三维空间中两个平面之间的插值

时间:2013-08-06 15:44:27

标签: matlab math 3d contour spatial-interpolation

我正在开发一种工具,可让您在3d“音量上圈出/封闭内容。”我想通过标记“切片”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创建) slices one through five

随意提出全新的想法。我将把我的想法放在下面。

我想到的一些东西可能对你有帮助,但是我还没有成功使用。
- 你可以在每张图片上做一个bwperim。
- 您可以尝试“平均”图像(或加权平均值)。

迄今为止我做得最好:

添加图片。 给你重叠和两个周长:
- 内部周长(内部肯定是1)
- 外围(内部有问题)。
您还可以屏蔽> 0和< 2的区域,这是该可疑区域的掩码。
在双周图像上运行bwdist并屏蔽:

masked bwdist image

不知道如何离开这里。沿着该区域采用“最大”轮廓的线条可以工作,但我不确定如何做到这一点。

欢迎任何关于修改我的想法或任何其他想法的想法!

感谢。

1 个答案:

答案 0 :(得分:2)

我今天想到这一点,看完之后: Schenk等人的“医学图像中三维物体的高效半自动分割”。人

这是我写的函数:

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;

enter image description here