我有一个体素组件,代表3D中的石头。它是一个二进制化的numpy 3D数组,其中1分配给构成我的石头的体素,0分配给其他地方。 我想:
但是怎么样?
答案 0 :(得分:2)
如果它有用,我解决了我的问题。 Marching Cubes算法很好,但它在二值化数组上不能很好地工作。所以: 1)高斯滤波器应用于3D阵列(scipy.filters) 2)Marching Cubes算法对其进行网格化(scikit-image工具) 3)总结三角形的区域(scikit-image工具)
答案 1 :(得分:1)
根据您的应用,我可以看到一些选项:3D凸包或行进立方体。
3D凸包
首先,您需要获取阵列等于1
的所有体素3D坐标的数组
稍后,您可以使用scipy.spatial.ConvexHull
。 Scipy
方法基本上是qhull
库的包装器。使用qhull
时,其中一个输出选项(FA
)用于计算总面积和体积。
您可以在此处找到更多信息: http://scipy.github.io/devdocs/generated/scipy.spatial.ConvexHull.html http://www.qhull.org/html/qconvex.htm
行进立方体
如果你需要保持凹度,那么前面的选项是不够的。行进的立方体将是一个很好的选择。 scikit-image中已经有一个python实现。
http://scikit-image.org/docs/dev/auto_examples/plot_marching_cubes.html
您将再次需要像上一个案例中那样获得所有积分。你用:
计算动词/面孔http://scikit-image.org/docs/dev/api/skimage.measure.html#marching-cubes
你可以用:
来计算面积http://scikit-image.org/docs/dev/api/skimage.measure.html#mesh-surface-area