matlab 三维空间中两平面间的插值

ezykj2lf  于 2023-10-23  发布在  Matlab
关注(0)|答案(1)|浏览(149)

我正在开发一个工具,可以让你在一个三维“体积”上圈出/包围东西,我想通过标记“切片”1和3,并根据这些信息“填充”切片2来保存时间。
两个简单的解决方案是:

1. slice2 = slice1 AND slice3 (gets the overlap between the two)
2. slice2 = slice2 OR  slice3 (true for any pixel true in either image)

这些是ok和快速,但我更喜欢做一些更智能的东西,使形状之间的某种平均/插值。你可以把它想象成试图找到连接海平面上的飞机和空中高原的悬崖面。
示例:从这个3D矩阵中填充切片2-4。(使用montage创建)x1c 0d1x
你可以自由地提出全新的想法。我将把我的想法放在下面。
有些东西我想过,可能会帮助你,回答者,但我还没有能够成功地使用。

  • 你可以对每个图像进行bwperim。
  • 您可以尝试对图像进行“平均”(或加权平均)。

目前为止我最好的:
添加图像。提供重叠和两个周长:

  • 一个内周长(其内部肯定是1)
  • 和一个外围(其中内部是可疑的)。
    您还可以屏蔽>0且<2的区域,这是此可疑区域的屏蔽。
    在两周图像上运行bwdist,并屏蔽:
    ![masked bwdist image] 2
    不知道从这里怎么走。一条线,采取“最大”轮廓沿着该地区将工作,但我不知道如何做到这一点稳健。
    任何关于修复我的想法或任何其他想法的想法是受欢迎的!
    谢谢.
j8ag8udp

j8ag8udp1#

我今天在阅读之后发现了这一点:Schenk等人的“Eachicient Semiautomatic Segmentation of 3D Objects in Medical Images”。al.
下面是我写的函数:

function out = interp_shape(top,bottom,num)

if nargin<2;
    error('not enough args');
end
if nargin<3;
    num = 1;
end
if ~num>0 && round(num)== num; 
    error('number of slices to be interpolated must be integer >0');
end

top = signed_bwdist(top); % see local function below
bottom = signed_bwdist(bottom);

r = size(top,1);
c = size(top,2);
t = num+2;

[x y z] = ndgrid(1:r,1:c,[1 t]); % existing data
[xi yi zi] = ndgrid(1:r,1:c,1:t); % including new slice

out = interpn(x,y,z,cat(3,bottom,top),xi,yi,zi);
out = out(:,:,2:end-1)>=0;

function im = signed_bwdist(im)
im = -bwdist(bwperim(im)).*~im + bwdist(bwperim(im)).*im;

相关问题