如何通过在matlab中对3D对象进行三角测量来计算面积?

时间:2014-09-09 15:02:22

标签: matlab 3d area triangulation

我是这个地方的新手,所以如果我问这里已经回答的问题,请原谅我。

我想通过一个3D矩阵计算3D对象的面积,该矩阵的值为 1 0 < / strong>为背景。

我尝试了convhulln(K),它计算了对象的凸包,然后总结了不同三角形的区域。但由于我的物体通常不是凸起的,因此低估了该区域。

我尝试的另一种选择是计算物体体素的面积&#34;暴露&#34;到后台。这很好用,但高估了区域,因为体素表示只是真实物体的近似值。

是否可以以非凸的方式对3D对象的表面进行三角测量,以便可以通过对各个三角形的面积求和来计算面积?

欢迎任何帮助!

1 个答案:

答案 0 :(得分:3)

是的,您可以使用MATLAB中的isosurface()函数对对象的表面进行三角测量。由于您的对象为1且背景为0,因此您可以对表面进行三角测量:

FV = isosurface(yourMatrix, 0.5);

FV将是一个包含曲面三角形的面和顶点的结构。由于三角形的面积可以计算为其两边的交叉积的一半,因此表面的总面积可以计算为:

V = FV.vertices;
F = FV.faces;
A = V(F(:, 2), :) - V(F(:, 1), :);
B = V(F(:, 3), :) - V(F(:, 1), :);
C = cross(A, B, 2);
area = 1/2 * sum(sqrt(sum(C.^2, 2)));

上面的代码假设矩阵的每个元素代表对象中的单位立方体。如果不是这种情况,您可以适当地缩放AB