3d重建
- 基于深度相机(结构光、TOF、双目摄像头)的三维重建
- 基于图像的三维重建:深度学习
- 基于视觉几何的传统三维重建:这种三维重建方法研究时间比较久远,技术相对成熟。主要通过多视角图像对采集数据的相机位置进行估计,再通过图像提取特征后进行比对拼接完成二维图像到三维模型的转换,就像利用立体几何中的三视图还原立体图一样。
3D形状表示方法(shape representation)
- 深度图(depth map):2D图片,每个像素都记录了从视点(viewpoint)到遮挡物表面(遮挡物就是阴影生成物体)的距离,被遮挡的部分无法表示,仅能表示物体相对于视点平面的垂直深度
- 点云(point cloud):某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标X,Y,Z、颜色、分类值、强度值、时间等等。在我看来点云可以将现实世界原子化,通过高精度的点云数据可以还原现实世界。可通过三维激光扫描获取。
- 体素(voxel):3D空间中具有一定体积的点,相当于3D空间中的像素。体素本身不含有位置信息,只谈论与其他体素的相对距离
- 网格(mesh):表示多面体形状的顶点与多边形的集合,它也叫作非结构网格
深度图(depth map) | 点云(point cloud) | 体素(voxel) | 网格(mesh) |
3d重建算法
- Truncated Signed Distance Function (截断符号距离函数):实时3D重建经典算法。TSDF是SDF的改进,将取值限制在[-1,1]之间,同时仅在物体表面的限定的距离范围内进行计算,降低了计算量。原理:用一个大的空间包围盒(volume)去包括进去待3D构建的场景,volume分成多个voxel(小立体方块)
- SIFT (Scale Invariant Feature Transform)
- ANN Feature Matching (近似最邻近特征匹配)
- SfT(Shape from Template):需要预先得到目标物体在刚性状态下的三维模型来作为模板,后面模型去追踪单目视频里目标物体的变化,得到每一帧图像对应的形变三维模型。这种方法具有实时重建的可能
- Eight Point Algorithm (八点算法):用八个点点对应关系计算核线几何(f-matrix)两个Projective Camera之间的点点对应关系是需要满足核线几何的,就像三点可以确定一个平面一样,8对匹配可以确定两个相机的核线几何
3d重建流程
- ->输入无序图像 Unstructured Images
- ->图像对齐(Assoc.),筛选图像,构建场景图(也称为连接图)。
- ->稀疏重建(Structure from Motion,SFM),生成稀疏的3D点云结构,该步骤的贡献是建立统一的坐标系,确定了重建物体的尺寸,提供可靠的2D-3D多对一的匹配点对。
- ->稠密重建(Multiple View Stereo,MVS),生成稠密的3D点云结构,该步骤的贡献生成稠密的点云。
- ->表面重建(Mesh,Model Fitting),稠密点云转化为网格(mesh)。
- ->纹理重建(Texture Mapping) ,纹理贴图,即对网格进行纹理坐标映射,进行贴纹理。
- ->可视化渲染
基于深度学习的3d重建算法:
- 基于单张RGB图像的三维重建
- 基于多视图的三维重建
- 基于点云数据的三维重建
MVSNet(2018):Depth Inference for Unstructured Multi-view Stereo 稠密重建
第一个基于深度学习的MVS重建架构。提出一种端到端的多视图重建深度学习架构,参考基于2张图片的代价体的双目立体匹配深度估计方法,扩展到多张图片中进行深度估计。MVSNet的核心不是直接把3D模型建出来,而是端到端的学习深度图,它的目标是预测图片上每个像素的深度信息。在该架构中,首先提取深层的视觉图像特征,然后通过可微分的单应变换,基于参考视图的相机视锥体构建3D代价体。然后使用3D卷积对初始深度图进行正则化和回归得到初始的深度图,初始的深度图通过参考图像改进得到最后的深度图
LoFTR: Detector-Free Local Feature Matching with Transformers
一种新的局部图像特征匹配方法。首先在粗粒度上建立图像特征的检测、描述和匹配,然后在精粒度别上细化亚像素级别的密集匹配,而不是依次执行图像特征检测、描述和匹配。与使用cost volume来搜索对应关系的密集方法相比,本文借鉴Transformer使用了自注意层和互注意层来获得两幅图像的特征描述符。这种方法提供的全局接受域使得能够在纹理较少的区域产生密集匹配
渲染方式
- 容积图渲染(Volume Rendering):该技术主要应用于医学图像的可视化。它利用三维空间中的体素进行渲染和加权,通过调整灰度和透明度来显示内部结构。
- 表面渲染(Surface Rendering):该技术利用三维建模工具构建表面模型,并使用光照等效果对表面进行渲染。表面渲染技术可以生成真实的渲染效果,但需要许多处理步骤,比较繁琐
- 可微分渲染(differentiable rendering)
- 神经渲染(Neural rendering):基于深度生成模型和图形学领域的光学物理知识
神经辐射场(NeRF)使用多层感知器(MLP)来近似3D场景的辐射场和密度场。该学习的体表示可以使用解析可微分渲染(即体积分)从任何虚拟摄像头渲染。对于训练,假设从多个摄像机视点观测场景。从这些训练视点,渲染估计的3D场景,并最小化渲染图像和观察图像之间的差异,根据这些观察结果训练网络。一旦训练完成,由神经网络近似的3D场景可以从新的视点进行渲染,从而实现可控合成。与使用神经网络学习渲染函数的方法相反,NeRF在该方法中更明确地使用了计算机图形学的知识,由于(物理)归纳偏差,能够更好地概括新视图:场景密度和半径的中间3D结构化表示。因此,NeRF在3D空间中学习物理上有意义的颜色和密度值,物理激发的光线投射和体集成可以持续渲染到新视图中。
开源框架
- OpenMVG: https://github.com/openMVG/openMVG
- Colmap: https://github.com/colmap/colmap
- OpenSfM:https://github.com/mapillary/OpenSfM
- OpenMVS:https://github.com/cdcseacave/openMVS