【3D实践】3D模型骨架提取及分析
源代码可在此仓库中找到:如果对您有帮助,还请给一个star,如果大家发现错误以及不合理之处,还希望多多指出。1 运行结果
经历了一个痛苦的过程,做骨架提取的很少众,做三维骨架提取的更加少,中文资料也很少,本人在这里进行总结,帮助需要的人。源代码位置在顶部链接
下面是我对我的数据进行骨架提取的效果。
基础知识介绍:
体素(Voxel):可以产生体数据集,不仅包含模型的表面信息,而且可以描述模型的内部属性。与表示图像的二维像素比较类似,只不过是从二维的像素扩展到了三维的立方体单元。应用领域:三维成像、地理分析、化学分析、科学资料与医学影像等等等。
面片(Mesh):三角网格就是由一系列三角形组成的多边形网格,主要用于模拟复杂物体的表面。无法描述模型的内部信息。有多种表达格式,例如OBJ、PLY等,所包含的信息也不同。但都包含顶点信息。应用领域:图形处理,实时渲染、3D人物模型等。
3 数据准备
体素格式:需要保证内部也要有体素,不能只是表面。体素格式本质是三维矩阵,0是背景,1是前景。
PS:你的数据如果是ply,obj,需要进行体素化操作,常用工具是MeshLab。如果数据是mat,甚至还可能是nparray,可能是图像栈,都没关系,都是可以进行转换
面片Mesh格式:只需要顶点坐标。
4 两种骨架提取方法:
4.1 基于体素的骨架提取的框架以及算法:
目前常用的共三种方法:
(1)Python的scikit图像处理库的skeleton_3D方法点击链接
(2)matlab的第三开发者骨架提取框架skeleton3d 点击链接
(3)图像处理程序ImageJ、ImagePy。熟悉图像处理领域的读者应该很清楚ImageJ。而ImagePy是国内开发人员开的框架,它模拟了ImageJ。点击链接
这三者使用都是1994年的算法:Building Skeleton Models via 3-D Medial Surface/Axis Thinning Algorithms 此算法是基于体素进行迭代,有兴趣的可以看看此Paper。
以下为对应的官方案例展示结果图。
(1)scikit中没有给出三维案例,只给出了二维案例。
(2)matlab的展示结果
(3) ImagePy的展示结果
4.2 基于三维面片的骨架提取算法:
基于三维面片的骨架提取算法可以参考此篇Paper:Skeleton Extraction by Mesh Contraction
5 骨架分析:
我使用的是ImagePy进行的骨架分析。
在这篇教程中很详细的描述了骨架分析的方法,包括骨架节点的提取,骨架长度的提取等等。参考链接
可以查看一下我的分析效果:
NodeID:端点。
Degree:端点线数目。
X,Y,Z:端点坐标。
骨架:
startID,EndID,Length:开始编号,结束编号,长度。 大佬啊,摩拜,什么时候我也能像大佬一样。[惊喜][惊喜][惊喜] 我是小白我学几年可以做到 如果是基于point cloud,该如何提取骨架?是要先体素化? 首先保证体素格式,其次需要保证内部需要有数据。
页:
[1]