我是这个地方的新手,所以如果我问这里已经回答的问题,请原谅我。
我想通过一个3D矩阵计算3D对象的面积,该矩阵的值为 1
, 0
< / strong>为背景。
我尝试了convhulln(K)
,它计算了对象的凸包,然后总结了不同三角形的区域。但由于我的物体通常不是凸起的,因此低估了该区域。
我尝试的另一种选择是计算物体体素的面积&#34;暴露&#34;到后台。这很好用,但高估了区域,因为体素表示只是真实物体的近似值。
是否可以以非凸的方式对3D对象的表面进行三角测量,以便可以通过对各个三角形的面积求和来计算面积?
欢迎任何帮助!
答案 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)));
上面的代码假设矩阵的每个元素代表对象中的单位立方体。如果不是这种情况,您可以适当地缩放A
和B
。