3D凸壳内的体素

时间:2012-12-03 20:36:43

标签: 3d metrics connectivity convex-hull voxels

我有一个价值为1的体素的立方矩阵(其余为0)。我需要一个相同大小的矩阵,其中凸体内部的体素都是值1。我已经看到了一个类似的例子并对其进行了调整:如果我对以下内容进行this,那会有用吗?

%im3D是零和1的立方矩阵

**[x,y,z]=ind2sub(size(im3D), find(im3D==value));
pointMatrix(:,1) = x;
pointMatrix(:,2) = y;
pointMatrix(:,3) = z;
[K,V] = convhull(x,y,z);
dt = DelaunayTri(pointMatrix);
[X,Y,Z] = meshgrid(1:size(im3D));   
simplexIndex = pointLocation(dt,X(:),Y(:),Z(:));
filled_chull = ~isnan(simplexIndex);
filled_chull = reshape(filled_chull,size(X));**

第二个问题:凸壳内的体素应该全部连接在一起吗? 那么为什么下面的函数给了我两个连接的对象......欧几里德或类似曼哈顿/八角形?

**function [nEL, nVOX] = im3D_countobj(im3D,METRIC)
% set METRIC either 'euclidean' or 'octagon'
ES = mmsedisk(1,'3D',METRIC);
q = bwlabeln(im3D,mmseshow(ES));
nEL = max(max(max(q)));
nVOX = size(find(im3D),1);
end**

1 个答案:

答案 0 :(得分:0)

假设:
- 分辨率不是太高(我假设你使用3d体素) - 您对近似解决方案感到满意 - 速度不是问题

然后您可以尝试使用形态运算符。通过使用一组旋转的加厚结构元素加厚体素,最终得到一个近似的凸包。

2D中这种计算的一个例子如下所示:

http://homepages.inf.ed.ac.uk/rbf/HIPR2/thick.htm

否则,您选择生成3D点并计算delaunay也是一个合理的选择。您可能想尝试显示的代码。