1

我正在开发一种工具,可以让您在 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。
- 您可以尝试“平均”图像(或加权平均)。

到目前为止我得到的最好的:

添加图像。给你重叠和两个周长: - 一个
内周(里面肯定是 1)
- 和一个外周(里面是有问题的)。
您还可以对 >0 AND <2 的区域进行遮罩,这是该可疑区域的遮罩。
在两周边图像上运行 abwdist并遮罩:

蒙面的 bwdist 图像

不过,不知道如何从这里出发。沿着该区域采用“最大”轮廓的线会起作用,但我不确定如何稳健地做到这一点。

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

谢谢。

4

1 回答 1

4

在阅读了 Schenk 等人的“Efficient Semiautomatic Segmentation of 3D Objects in Medical Images”之后,我今天明白了这一点。人。

这是我写的函数:

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;

在此处输入图像描述

于 2013-08-09T05:20:16.190 回答