3D重建(1)——对整个工作的介绍

工作内容

整个工作是一个基于Windows的(相机标定时使用了GitHub上的iai_kinect项目,该项目是一个基于ros的功能包,本人是在Ubuntu16.04版本上进行的标定工作),非实时的,对本人自己上半身进行三维重建的工作,最终通过3D打印机得到最终的自身实体模型。

工作步骤

自身坐在kinect相机前方0.8m左右,自身在椅子上自转一周(过程中保持自己上身姿势不动),本人在这个过程中获取了31片自身的点云数据(具体多上张数据比较合适也没有定论,相关的blog看过不少,有的人就用了4片点云数据,抱着数据越多越精确的想法,本人就拍了31张),然后用pcl点云库进行初步滤波,再用它的icp算法进行点云融合(由于自身能力问题,并没有因此达到自己想要的效果,其次在后面的点云曲面重建的问题上也没有达到想要的效果,因此转向了对Geomagic Studio这款逆向工程软件的求助 ),将经过pcl的icp算法初步处理过的点云数据导入Geomagic Studio软件中进行点云融合并进行曲面重建(封装),并进行一定的修补以及修剪工作,最后保存为ply文件,再用Sculptris软件进行比较精巧的修饰,最后导出文件后就可以交给3D打印机进行处理了。

整个过程中麻烦一点的point

  1. Kinect红外相机内参,如果自身标定相机工作实在不易,可选择参考使用iai_kinect2项目中存放的别人相机的参数。
  2. 我使用的IDE为VS2015,然后并没有选择使用Kinect v2 的SDK,而是一股脑的搭建OpenKinect的libfreenect2项目环境来获取Kinect的数据,耗费了不少时间还是没有编译成功,最后就直接用了他们已经releases的版本。
  3. 相机内参的意义得回头理解相机的模型了,至于其使用就可参考iai_kinect2项目的kinect2_bridge.cpp,以及viewer.cpp文件。参考前者的目地是得注意到从kinect直接获取的深度图像是被进行过左右翻转后的,需要先用flip函数翻转回来,再用remap函数进行矫正,而后者中的函数则包含了将深度图像转变为点云数据的函数部分。
  4. 先用pcl的icp算法对点云数据进行一次处理后再导入Geomagic进行融合的原因是先一步减小各点云片间的旋转量,因为点云片间的旋转量如果过大,会导致融合算法的失效(个人是这样理解的,可参考pcl的icp算法)。
  5. 后期大量工作其实是对融合封装后的模型进行修补工作,不然直接成型的模型效果实在无法接受。其中具体的一点个人的技巧,后边再提。

不足

  1. 获取点云数据时,并没有获取该点的颜色信息。
  2. 点云数据的滤波工作做得不够多,参考有些文章都是做过一些双边滤波什么的,由于我也是刚接触,对这些点没有深究。
  3. 融合方面太过依赖现有的工程软件,自己简单的使用icp算法并没有达到想要的效果,其中的原因也没深究。
  4. 曲面重建问题同样进行过一段时间的尝试,但是对于自己的数据进行相关的处理后,结果也是凹凸不平的那种,还是得进行再处理。

相关技术

  1. 与kinfu项目相比,本项目要简单容易很多,技术上也是无法比拟的。
  2. slam技术,在进行点云融合过程中,从slam技术中了解到存在一种累积误差问题以及处理方法,然而由于本人的知识局限性,还没进行探究。
  3. 曲面重建技术。

结果图

3D重建(1)——对整个工作的介绍_第1张图片3D重建(1)——对整个工作的介绍_第2张图片

你可能感兴趣的:(3D重建项目)