【3D实践】3D模型骨架提取及分析

作者:憨豆酒(YinDou),联系我[email protected],熟悉图形学,图像处理领域,本章的源代码可在此仓库中找到 如果对您有帮助,还请给一个star,如果大家发现错误以及不合理之处,还希望多多指出。

- [我的Github]
- [我的博客]
- [我的知乎]

常见问题总结:

博客发布以来收到了许多反馈,点击这里查看常见问题列表常见问题列表链接,也许就可以找到您的答案。

 

1 运行结果

经历了一个痛苦的过程,做骨架提取的很少众,做三维骨架提取的更加少,中文资料也很少,本人在这里进行总结,帮助需要的人。源代码位置在顶部链接

下面是我对我的数据进行骨架提取的效果。

【3D实践】3D模型骨架提取及分析_第1张图片【3D实践】3D模型骨架提取及分析_第2张图片

基础知识介绍:

  1. 体素(Voxel):可以产生体数据集,不仅包含模型的表面信息,而且可以描述模型的内部属性。与表示图像的二维像素比较类似,只不过是从二维的像素扩展到了三维的立方体单元。应用领域:三维成像、地理分析、化学分析、科学资料与医学影像等等等。

  2. 面片(Mesh):三角网格就是由一系列三角形组成的多边形网格,主要用于模拟复杂物体的表面。无法描述模型的内部信息。有多种表达格式,例如OBJPLY等,所包含的信息也不同。但都包含顶点信息。应用领域:图形处理,实时渲染、3D人物模型等。

【3D实践】3D模型骨架提取及分析_第3张图片【3D实践】3D模型骨架提取及分析_第4张图片

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的展示结果

【3D实践】3D模型骨架提取及分析_第5张图片

(3)ImagePy的展示结果

【3D实践】3D模型骨架提取及分析_第6张图片【3D实践】3D模型骨架提取及分析_第7张图片

 

4.2 基于三维面片的骨架提取算法:

基于三维面片的骨架提取算法可以参考此篇Paper:Skeleton Extraction by Mesh Contraction

【3D实践】3D模型骨架提取及分析_第8张图片

5 骨架分析:

我使用的是ImagePy进行的骨架分析。

在这篇教程中很详细的描述了骨架分析的方法,包括骨架节点的提取,骨架长度的提取等等。参考链接

可以查看一下我的分析效果:

【3D实践】3D模型骨架提取及分析_第9张图片

【3D实践】3D模型骨架提取及分析_第10张图片【3D实践】3D模型骨架提取及分析_第11张图片

NodeID:端点。

Degree:端点线数目。

X,Y,Z:端点坐标。

骨架:

startID,EndID,Length:开始编号,结束编号,长度。

 

如果在使用和运行过程中遇到什么问题欢迎联系我,[email protected] 微信ID:qq619192323(别问到底是微信还是QQ,问就是微信-大笑) 

 

 

 

你可能感兴趣的:(3D图形学)