三维重建综述

原文地址AC4Fun.com, 转载请注明出处~,谢谢

背景

  • 对几何3D模型不断增长的需求:电影 游戏 虚拟环境等行业
  • VR&AR的火爆
  • 房地产 三维地图等领域的需求

应用

  • 中国古代建筑三维数字化保护
  • 三维数字化城市
  • 三维地图
  • VR&&AR游戏,电影等
  • 医疗行业:三维心脏
  • 教育行业等

方法介绍

传统的三维重建主要是依靠昂贵的三维扫描设备,并且需要被扫描的目标保持一段时间的稳定。近年来,由于计算机硬件大规模计算能力的发展,特别是GPU和分布式计算的发展,实时高效的解决方案成为了可能。目前主流的方法主要分为以下两类:

  • 基于深度相机的三维重建
  • 基于图像的三维重建

基于深度相机的三维重建

深度相机

原理 主要有以下三种:

  • 结构光,这个技术的代表产品是 Kinect 一代,它的传感器芯片用的是 PrimeSense 家的。PrimeSense 现在是苹果旗下的公司。
  • TOF,time-of-flight,代表产品是 Kinect 二代,由于微软对于 One 这个单词的热爱,它的官方名字是 Kinect One。
  • 双目摄像头,代表产品是 Google Tango 以及 Leap Motion,前者配有四台摄像头,后者有两个

主要设备有Kinect, ASUS Xtion PRO等

Kinect 1代与kinect 2代比较

  • Kinect v1对应Xbox 360, Kinect v2对应Xbox One
  • Kinect v1,彩色摄像头为640480,深度摄像头为320240,只能识别两个人的骨骼数据。
  • Kinect v2,彩色为1080P,深度摄像头为512*424,能识别六个人的骨骼,并且识别稳定精度高。有红外线感应,1代没有
  • 功能(2代): 通过人体骨骼追踪识别与跟踪运动人群,手势识别,面部追踪,目标测距;语音识别,声源定位

目前基于深度相机进行三维重建的工作有很多,最经典的应该属微软剑桥研究院的Kinect Fusion, 2011, 微软有自己的SDK, 注意一代和二代的原理有很大的不同,分别下载对应的SDK,目前对Kinect 2代的支持还不是特别好,它对硬件也有一定的要求(特别是USB3.0接口):

Kinect SDK2.0 System Requirements.png

当然,开源社区也有许多基于Kinect Fusion的开源实现,如由PCL团队开发的KinFu,论文在这里。高通公司nullspace的开源项目kfusion, 但是个人觉得目前效果最好的,应该要属Kintinuous,Real-time large scale dense visual SLAM system了。不过Kintinuous对kinect 2代的支持效果还不好,目前Kinect 1代和华硕的Xtion支持比较好(可能和他们都是PrimeSense的TOF原理有关吧)

基于图像的三维重建(3D Reconstruction from multiple Images)

关键点 实时要求/室内场景/大范围场景/点云精确度要求
由于基于深度相机(RGB-D)会受到红外距离的限制,如kinect支持的距离为0.5-5m,而且容易产生空洞(holes),所以比较适合室内场景,目前应用最多的是机器人Visual SLAM方面。但是从三维重建的实际应用角度来看,不够方便(主要是Kinect需要使用外接电源,而且需要连接电脑),目前工业界用的最多的方法应该是基于图像的三维几何重建了,其主要步骤包括局部特征匹配Structure-from-Motion, Multi-View StereoSurface ReconstructionSurface Texturing 等。
这种方法主要需要解决的问题是判断相机的姿态(位置和方向),这点和Visual SLAM比较类似。

立体视觉的核心问题

通过对照片特征的检测与匹配,得到相机的姿态,并计算出稀疏的场景三维点云。

目前比较好的算法主要有:

目前已知的研究小组有:#

百度深度学习研究院
中科院自动化所模式识别国重机器视觉课题组
美国明德学院(Middlebury college)
香港科技大学
德国达姆施塔特工业大学MVE
OpenMVG

相关人物
王亮
章国峰

一些资料收藏

深度数据RGBD集合

参考文献#

3D Photography Gallery
wedidstuff

基于图像的三维重建是我的研究重点,接下来将会对具体的技术,如特征提取算法,稀疏重建,立体匹配与重建,表面重建等分别说明。

如果上面有什么不对的地方,欢迎大家指教。

推荐阅读更多精彩内容