三维重建:Dense Construction-KinectFusion的基本原理(尺度)

来源:互联网 发布:椰族部落永久域名全拼 编辑:程序博客网 时间:2024/06/05 11:53

         三维重建为三维空间实体建立适合计算机表示和处理的三维数学模型,建立一个相对于真实三维世界坐标系的计算机世界坐标系中的三维映射模型。

         三维重建的关键因素为尺度(点的邻域覆盖单位)、相对位置(刚体物体的体元相对位置及位置映射)、原点位置

         对于尺度问题,通常有两种解决方法。第一种,直接得到实体到计算机世界坐标系的绝对映射关系,这就需要一个固定的位置映射系统,比如一个多个单目相机固定的摄影台,或者一个可以运动的双目摄像机。第二种,直接使用单目相机,使用特征配准或者位置点优化的方法,构建稀疏点集,进而构建模型,此种方法称为SLAM。

         使用多目或者双目摄像机系统的系统,关键点在于表面重建,局部的表面重建递进完成可以构建最终的完整表面;使用单目相机关键在于稀疏点的构建,寻找表面的显著点,构建一个物体的完整网格,再次通过补全网格的方法构建模型。


一、绝对尺度

         获得绝对尺度对于模型三维重建是非必须的,但对于一个扩展的三维重建应用在某些方面是必须的,比如希望与真实环境交互的移动机器人(扫地机器人、无人机、无人潜艇)。

         多目系统可以根据固定的相机位置获取计算机世界中的度量单位代表的真实世界尺度,双目相机也可以根据双目的基线获得此意义。单目相机是怎么样得到这个真实尺度的呢?通过相机的内参——焦距的定义。

        尺度的获取方式:多目和深度相机可以直接根据得到的深度值,进而由透视关系得到绝对尺度。对于单目相机,必须完成整个稀疏构建过程才能得到相对精确的深度,只有完成整个SLAM过程,才能得到真实尺度。


二、相对位置

        相对位置的获取为表面重建问题,可分为稀疏表面重建和稠密重建。

        深度相机根据双目时差原理等直接获得三维表面,这个表面是透视畸变的,可以通过透视校正的方法进行标准化补偿,得到 确定 面元,这就做到了表面重建的第一步。再经过一系列处理,最后通过ICP方法等稠密匹配的方法可以迭代构建整个三维模型。KinectFusion使用了特定的方法?

        单目相机对于稠密匹配在算法的设计代价上是得不偿失的,而对于稀疏构建是合适的。而尺度的未知和深度的未知即是 地图构建和相机同步定位 对于稀疏构建则是必须同时进行的,这就是常见的SLAM问题。


三、原点位置

        原点位置是在三维表面重建时附带的一个小的问题,计算机数据世界坐标系的原点位置确定与否代表了不同的构建方案。


VS2013编译PCL1.8.0 还是失败了,没有编译成功,修改为KinectFusion的文章吧

         VS2013社区版对个人开发者免费,终于可以不用该死的盗版了。Win10科技预览版X64系统开发版本下载,与Vs2013可以完美融合。

        PCL的源代码版本已经进化到1.8.0,不知道增加了多少新特性,还是拿来编译一下试一试。对于VS2012无法编译PCL1.7.2的问题,原因是OpenNI不支持1600以上数字的编译器,即最高支持到VC10。

       以下是注意事项:

       1. OpenNI:

           关于OpenNI的支持问题,把OpenNI 的包含文件 xxxxxGrab.h里面的 if ...>1600去掉,编译会完美通过;

       2.Boost:

          关于Boost的使用问题,Boost不支持CMAKE编译,支持VC12的最低版本为1.5.6.0,GIT有完整的Win二进制安装包;

       3.VTK:

           关于VTK的问题,使用罪行版本的VTK6.1,注意 源码里面的一个错误 :在58行处找到 宏定义 ,转到声明处, 补全定义数字 ,我补全的为 8;

<del>    118>  Build all projects    ========== Build: 118 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========</del>

       4.CMAKE:

           关于CMAKE,使用CMAKE3.0以上,添加了对VC12的支持。


0 1
原创粉丝点击