内插在3D空间中两个平面之间(Interpolating Between Two Planes in

2019-10-18 10:51发布

我正在开发一个工具,可以让一个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)

这些都是和快速,但我宁愿做一些通过使形状某种两者之间的平均/插值更智能。 你可以把它想象成试图找到连接在见水平平面和一些空气中的高原悬崖边。

例如:在从该3D矩阵切片2-4填写。 (创建使用montage

随意拿出全新的思路。 我要去把我的想法所以下面为止。

有些东西,我也想过,可能会帮助你,回答者,但我一直没能成功使用。
- 你可以做的每个图像上的bwperim。
- 您可以尝试“平均”的图像(或加权平均)。

最好的我已经走到这一步:

添加图像。 为您提供了重叠和两个周长:
-an内周边(其内部一定会1)
-and外周边(其内部是有问题的)。
也可以掩盖是> 0和<2的区域中,这是本领域可疑的掩模。
运行bwdist双周边图像上,并掩盖了:

不知道如何从这里走,虽然。 即采取了“最大”轮廓沿着该地区的线路将工作,但我不知道该怎么做稳健。

在固定我的想法或任何其他的想法任何想法,欢迎!

谢谢。

Answer 1:

今天我想通了这一点,看完后:“3D电子FFI cient半自动分割对象在医学图像”,由申克等。 人。

这里是我写的函数:

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;



文章来源: Interpolating Between Two Planes in 3d space