我需要从一堆 2D 切片创建一个 3D 球体

I need to create a 3D sphere from a bunch of 2D slices

我目前必须从一堆二维切片(MATLAB 中的二维矩阵,表示二维灰度图像)创建一个球体。我使用下面的代码创建了一堆切片。为了创建球体,我反复创建了大小逐渐增加到 100,然后逐渐减小的圆片。所有这些切片都被添加到一个 3D 矩阵中。

Circle = ones(200,400,400); 

for i = 1:100
    [rr cc] = meshgrid(1:400);
    C = sqrt((rr-200).^2+(cc-200).^2)<=i;
    for j = 1:400
        for k = 1:400
            Circle(i,j,k) = C(j,k);
        end
    end
end

index = 100; 

for i = 1:100
    [rr cc] = meshgrid(1:400);
    C = sqrt((rr-200).^2+(cc-200).^2)<=index;
    for j = 1:400
        for k = 1:400
            Circle(i+100,j,k) = C(j,k);
        end
    end
    index = index - 1; 
end

viewer3d(Circle);

viewer3d 是第 3 部分库,可帮助您将切片的 3D 图像堆栈视为 3d 对象。一旦我看到这个 'supposed' 球体,我就意识到它是一个菱形顶部而不是球体。

因此我不明白如何在 y 平面中改变圆的大小直到球体的中心点,然后使用相同的算法减小它。

感谢您的回答,请不要犹豫让我澄清这个问题中的任何内容。

是的,沿 Z 轴的半径不是线性的,而是随 cos/sin 函数变化的。使用 this representation:

你的半径是 "Radius = r sin(Theta)","Theta = arccos(r / z)"。所以 "r" 是你的球体的半径,"z" 你想要绘制的 level/slice。不要忘记 "z" 来自 -"r"至 "r"。我已经测试了这些公式,它适用于图像堆栈(切片)。

或者,直接创建一个球体,不使用循环:

Circle = zeros(200,400,400); 

[x,y,z]=meshgrid(1:size(Circle,1),1:size(Circle,2),1:size(Circle,3));

radius=??; %// e.g. radius=100;
%//this sphere is centered in the middle of the image
Circle(sqrt((x-size(Circle,1)/2).^2+(y-size(Circle,2)/2).^2..
     +(z-size(Circle,2)/2).^2)<radius)=1;