一、SFM/MVS
colmap是一种经典的SFM/MVS开源框架,Correspondence Search时,首先对所有图片进行特征提取Feature Extraction,然后进行特征匹配match,匹配分为暴力两两匹配和按序列匹配等的多种方式,最后进行几何校验Geometric Verification,通过对极几何等约束删除异常匹配
Incremental Reconstruction时,首先选取匹配较好两帧进行初始化nitialization(选取策略优化),类似ORBSLAM根据F/H比值选取分解F或H矩阵进行初始化;再不断(增量式)选取较好的下一帧(选取策略优化)使用PNP(3D-2D)估计下一帧位姿注册mage Registration和三角化Triangulation;然后不断地进行捆集优化Bundle Adjustment(优化过程中也会不断三角化)和剔除异常值Outlier Filtering
二、nerf
隐式表达:输入位置x=(x,y,z)和光线入射角度d=( θ , Φ \theta,\Phi θ,Φ),输出光线(r(t)=o+td)方向离散N个点的RGB颜色和密度σ,颜色是关于位置和入射角的函数,密度是关于位置的函数。颜色的真实从图片上得到,理论计算公式如下:
离散化
最后,由图像像素作为观测、离散N个点的RGB颜色和密度σ计算估计值,构建误差函数
获取三维点时,通过每束光线得到N个离散密度,密度最高的认为是三维点,所以它是一种隐式表达
缺点:
- query过程需要大量的采样,渲染方法成本很高
- 用了大型多层MLP,运算量大,占用内存高
- 不容易编辑
- 不能显式对三维空间几何建模
- 导致遗忘问题
三、3D gauss
流程如下图,基于SFM(如colmap)得到3D点云地图,初始化Initialization为3D Gauss地图,即每个点用如下公式表示(scaling matrix 𝑆 and rotation matrix 𝑅);然后将3D点投影Projection到2D图像,对于同一条线束上点使用Nerf渲染rasterize方式计算颜色,不同的是对不同Tile进行渲染Differentiable Tile Rasterizer,然后与图像构建残差,反向传播优化3D Gauss地图,使用Adaptive Control of Gaussians策略膨胀under-reconstructed区域和腐蚀over-reconstructed
优点
- 快速渲染和丰富的优化:高达400FPS的速度渲染,可视化和优化速度更快
- 有明确空间范围的建图:
- 显式地图:
四、深度估计
DUST3R
框架如下图,推理流程类似深度估计,帧间通过information sharing构建约束,推理输出第1帧下点云,训练时根据真值点云构建
推理:
训练:
loss:
3D Regression loss:X为真值点云,可通过激光雷达获得
Confidence-aware loss:
应用:
Point matching:
使用最近邻方法进行匹配:
Recovering intrinsics:
恢复内参
Relative pose estimation
通过类似ICP方法得到帧间相对位姿
Absolute pose estimation:
方法1:使用3D-2D PnP方法估计
方法2:根据估计的相对位姿推算并恢复其尺度
深度估计+SFM/MVS
单帧进行深度估计,即监督学习;使用SFM/MVS计算位姿,构建帧间自监督
参考文献
- Structure-from-Motion Revisited
- NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
- 3D Gaussian Splatting for Real-Time Radiance Field Rendering
- DUSt3R: Geometric 3D Vision Made Easy