点击上方“计算机视觉life”,选择“星标”
快速获得最新干货
作者: Moonsmile
https://zhuanlan.zhihu.com/p/79628068
本文已由作者授权,未经允许,不得二次转载
三维重建意义
三维重建作为环境感知的关键技术之一,可用于自动驾驶、虚拟现实、运动目标监测、行为分析、安防监控和重点人群监护等。现在每个人都在研究识别,但识别只是计算机视觉的一部分。真正意义上的计算机视觉要超越识别,感知三维环境。我们活在三维空间里,要做到交互和感知,就必须将世界恢复到三维。所以,在识别的基础上,计算机视觉下一步必须走向三维重建。本文笔者将带大家初步了解三维重建的相关内容以及算法。
三维重建定义
在计算机视觉中, 三维重建是指根据单视图或者多视图的图像重建三维信息的过程. 由于单视频的信息不完全,因此三维重建需要利用经验知识. 而多视图的三维重建(类似人的双目定位)相对比较容易, 其方法是先对摄像机进行标定, 即计算出摄像机的图象坐标系与世界坐标系的关系.然后利用多个二维图象中的信息重建出三维信息。
常见的三维重建表达方式
常规的3D shape representation有以下四种:深度图(depth)、点云(point cloud)、体素(voxel)、网格(mesh)。
![1808787242ab992307e96d586d513bf5.png](https://i-blog.csdnimg.cn/blog_migrate/cec142f77cab08e97244cba9b9f93d71.jpeg)
深度图其每个像素值代表的是物体到相机xy平面的距离,单位为 mm。
![55c3ae0606a18312511e1f40324b86ac.png](https://i-blog.csdnimg.cn/blog_migrate/f6ceb61fde74953852b6652b53e466bd.jpeg)
体素是三维空间中的一个有大小的点,一个小方块,相当于是三维空间种的像素。
![a14d71bf71cf27be484cd0c4ea8cf309.png](https://i-blog.csdnimg.cn/blog_migrate/afcbecb5ae890228882e4242a52e37ad.jpeg)
点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标X,Y,Z、颜色、分类值、强度值、时间等等。在我看来点云可以将现实世界原子化,通过高精度的点云数据可以还原现实世界。万物皆点云,获取方式可通过三维激光扫描等。
![17f51264060120def44573838adcc856.png](https://i-blog.csdnimg.cn/blog_migrate/70684671825ffba7f8a5cb1d99c58e5f.jpeg)
三角网格就是全部由三角形组成的多边形网格。多边形和三角网格在图形学和建模中广泛使用,用来模拟复杂物体的表面,如建筑、车辆、人体,当然还有茶壶等。任意多边形网格都能转换成三角网格。
三角网格需要存储三类信息:
顶点:每个三角形都有三个顶点,各顶点都有可能和其他三角形共享。.
边:连接两个顶点的边,每个三角形有三条边。
面:每个三角形对应一个面,我们可以用顶点或边列表表示面。
![5f7befb81c67886dcefee4bf0b35ae91.png](https://i-blog.csdnimg.cn/blog_migrate/a47c0b1d250bc0c66d090ed5ed7647d8.jpeg)
三维重建的分类
根据采集设备是否主动发射测量信号,分为两类:基于主动视觉理论和基于被动视觉的三维重建方法。
主动视觉三维重建方法:主要包括结构光法和激光扫描法。
被动视觉三维重建方法:被动视觉只使用摄像机采集三维场景得到其投影的二维图像,根据图像的纹理分布等信息恢复深度信息,进而实现三维重建。
其中,双目视觉和多目视觉理论上可精确恢复深度信息,但实际中,受拍摄条件的影响,精度无法得到保证。单目视觉只使用单一摄像机作为采集设备,具有低成本、易部署等优点,但其存在固有的问题:单张图像可能对应无数真实物理世界场景(病态),故使用单目视觉方法从图像中估计深度进而实现三维重建的难度较大。
近几年代表性论文回顾
一、从单张图像恢复深度图
![df64033d49ab1c56cd9e44709ab15b9b.png](https://i-blog.csdnimg.cn/blog_migrate/375403f2f939027c4ce6ca3b7685d048.jpeg)
这篇论文思路很简单,算是用深度学习做深度图估计的开山之作,网络分为全局粗估计和局部精估计,对深度由粗到精的估计,并且提出了一个尺度不变的损失函数。
![cd2c2a05c5208859f6b4aa78d080586c.png](https://i-blog.csdnimg.cn/blog_migrate/fe4e9a26d578c11b8f78d0cd73cf96e1.jpeg)
![eae8c1c7eda4b99fa4eb7f550c665de5.png](https://i-blog.csdnimg.cn/blog_migrate/bfeb699b0a71762a22fe2a1666094e23.jpeg)
本文总结
(1)提出了一个包含分为全局粗估计和局部精估计,可以由粗到精估计的网络。
(2)提出了一个尺度不变的损失函数。
二、用体素来做单视图或多视图的三维重建
![eebbbc7deeba8ee3df8a5db14b0b2a7f.png](https://i-blog.csdnimg.cn/blog_migrate/f7f6da5460c73803c8948c6e26b8b47e.jpeg)
这篇文章挺有意思,结合了LSTM来做,如果输入只有一张图像,则输入一张,输出也一个结果。如果是多视图的,则将多视图看作一个序列,输入到LSTM当中,输出多个结果。
![564a74037998ff14996cfc13f3067138.png](https://i-blog.csdnimg.cn/blog_migrate/e1e3f62fc6644cee58fa9b714ad663ae.jpeg)
![5f2df5d44c26c0066d6967ae695e9302.png](https://i-blog.csdnimg.cn/blog_migrate/1bb8814c225045c67f5c8b93c23377f5.jpeg)
如主框架所示,这篇文章采用深度学习从2D图像到其对应的3D voxel模型的映射: 首先利用一个标准的CNN结构对原始input image 进行编码;再利用一个标准 Deconvolution network 对其解码。中间用LSTM进行过渡连接, LSTM 单元排列成3D网格结构, 每个单元接收一个feature vector from Encoder and Hidden states of neighbors by convolution,并将他们输送到Decoder中. 这样每个LSTM单元重构output voxel的一部分。总之,通过这样的Encoder-3DLSTM-Decoder 的网络结构就建立了2D images -to -3D voxel model 的映射。
![82f568a850b3c555033edf64ba6bc1d2.png](https://i-blog.csdnimg.cn/blog_migrate/d38734d92d8e6ec7ae153e79975368be.jpeg)
损失函数采用的是二分类的交叉熵损失,类似于在三维空间做分割,类别是两类,分别是占有或者不占有。