0

我有一个值体素的三次矩阵1(其余的是0)。我需要一个相同大小的矩阵,其中凸包内的体素都是有价值的1。我看过一个类似的例子并对其进行了修改:如果我对以下内容执行操作,那会起作用吗?

% im3D 是一个零和一的三次矩阵

**[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**
4

1 回答 1

0

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

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

在 2D 中进行此类计算的示例如下所示:

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

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

于 2012-12-04T01:11:17.723 回答