【问题标题】:Find 3D ellipsoid matlab查找 3D 椭球 matlab
【发布时间】:2016-10-27 20:54:04
【问题描述】:

我在 Matlab 中有以下问题:我有一个对应于 3D ROI 的二进制 3D 体积 (NxNxN),我想找到最适合该 ROI 的椭球。我找到了中心的 3D 坐标、3D 中半轴的长度和拟合椭圆体的 3D 角度。结果向量类似于: [195.1126 169.3114 62.4193 28.2725 23.0191 9.3104 52.9536 -5.7639 1.7606] 其中前三个元素表示中心坐标,元素编号 4,5,6 表示半轴半径,元素编号 7,8,9分别表示 x,y,z 中的旋转度数。现在我想找到一个二进制 3D 体积(如 3D 矩阵:NxNxN,与原始 ROI 大小相同),其中 0 是椭圆体之外,1 是椭圆体。 谁能帮我解决这个问题? 非常感谢。

【问题讨论】:

    标签: matlab 3d ellipse data-fitting


    【解决方案1】:

    试试这个:解释在 cmets 中

         V = [195.1126 169.3114 62.4193,28.2725 23.0191 9.3104,52.9536 -5.7639 1.7606];
     c = V(1:3); % The centroid
     l = V(4:6); % Axis Length
     phi = -V(7:9); % Angles
     E = zeros(512,512,85); % initialize Elipse matrix
     R = rotx(phi(1))*roty(phi(2))*rotz(phi(3)); % Create rotation matrix around phi
     %%
     [X,Y,Z] = meshgrid(1:size(E,2),1:size(E,1),1:size(E,3)); % Create a Grid
     XYZr = ([X(:)-c(1),Y(:)-c(2),Z(:)-c(3)])*R; % rotate Grid and centralize around centroid
     %% Calculate the elipse equation
     inx = (((XYZr(:,1)))./l(1)); % 
     iny = (((XYZr(:,2)))./l(2));
     inz = (((XYZr(:,3)))./l(3));
     ind = [inx,iny,inz];
    
     E(:) = sum(ind.^2,2)<1;
     %% Display
     figure; imagesc(E(:,:,62));
     figure; imagesc(squeeze(E(:,195,:)));
     figure; imagesc(squeeze(E(170,:,:)));
    

    【讨论】:

    • 嗨,我已经尝试过了,但它不起作用......它给了我错误的结果......椭圆体完全错误,未居中并且半径错误。只有一种解释:我将 E 初始化为 512x512x85 矩阵,因为我的体积是 512x512x85。如果您尝试这样做,它将无法正常工作。你知道如何解决这个问题吗?
    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多