视觉SLAM中的深度估计问题

时间:2024-03-17 19:01:50

一、研究背景

视觉SLAM需要获取世界坐标系中点的深度。

世界坐标系到像素坐标系的转换为(深度即Z):

 

深度的获取一共分两种方式:

a)主动式

  RGB-D相机按照原理又分为结构光测距、ToF相机

  

              ToF相机原理

 

b)被动

被动式无法精确得到点的深度值,因此存在深度的估计问题,按照主流相机的种类可以分为双目相机估计以及单目相机估计。

接下来详细介绍双目系统以及单目SLAM系统的深度估计问题

 

二、双目系统

双目相机模型如下图所示:

(图源《视觉SLAM十四讲》)

 要计算深度z,需要已知世界坐标系中一点在左相机与右相机中对应的像素坐标UL与UR,即视差d。

获取d关键在于双目匹配,即左相机与右相机中的像素坐标对应的世界坐标系中的同一点。

举例:

  • ORB-SLAM2基于特征点获取视差:FAST特征点+BREIF算子。

  • 块匹配算法(对图像灰度值的操作)
    •  SAD(Sum of Absolute Difference)
    •  SSD(Sum of Squared Distance)
    •     NCC(Normalized Correlation) 

 

得到匹配到的像素必须满足通过对极约束:

三、单目相机

针孔相机模型为:

相机坐标系下为(xC,yC,zC),像素坐标系为(u,v),归一化坐标系为(u0,v0)

 

3.1 三角化估计深度

通过两处观察同一个夹角,从而确定该点的距离

在通过对极几何求得R,t后,R,t已知

 

 通过优化方法可求得上式中右边的最小二乘解,三角化的矛盾:平移增大,测量的精度会变高,但是可能会导致匹配失效。

 ORB-SLAM单目中的三角化代码如下,可作参考:

void Initializer::Triangulate(const cv::KeyPoint &kp1, const cv::KeyPoint &kp2, const cv::Mat &P1, const cv::Mat &P2, cv::Mat &x3D) 
{ 
cv::Mat A(4,4,CV_32F); 
 A.row(0) = kp1.pt.x*P1.row(2)-P1.row(0); 
A.row(1) = kp1.pt.y*P1.row(2)-P1.row(1); 
A.row(2) = kp2.pt.x*P2.row(2)-P2.row(0); 
A.row(3) = kp2.pt.y*P2.row(2)-P2.row(1); 
 cv::Mat u,w,vt; 
cv::SVD::compute(A,w,u,vt,cv::SVD::MODIFY_A| cv::SVD::FULL_UV); 
x3D = vt.row(3).t(); 
x3D = x3D.rowRange(0,3)/x3D.at<float>(3); 
} 

 

 

 

 

 

3.2 深度滤波器

本质上为卡尔曼滤波估计深度

假设深度服从某种分布,最后深度的方差不断减少并收敛

以SVO为例:

SVO估计深度流程如下:

SVO中点服从高斯均匀分布:

点深度满足分布:

 

3.3 与监督学习结合

 

[1]Tateno, K., Tombari, F., Laina, I., & Navab, N. (2017, July). CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR) (Vol. 2).
[2] Eigen D, Fergus R. Predicting depth, surface normals and semantic labels with a common multi-scale convolutional architecture[C]//Proceedings of the IEEE International Conference on Computer Vision. 2015: 2650-2658.

 

3.4 与非监督学习结合

总结一下思想:

矩阵T21的估计值,深度估计网络根据单目图像,输出深度的估计值。该值再结合左右视图的变换矩阵TLR,以及相机的内参K,可以从左图重构出右图,还可以把左图的特征映射到右图。重构图和特征与真值的差异构成了损失函数,利用反向传播算法可以不断优化网络。

Zhan, H., Garg, R., Weerasekera, C. S., Li, K., Agarwal, H., & Reid, I. (2018, March). Unsupervised Learning of Monocular Depth Estimation and Visual Odometry with Deep Feature Reconstruction. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 340-349).

 

3.5 与半监督学习结合

 

 

监督学习部分 ground-truth depth由激光雷达提供,无监督学习部分由双目相机的图像训练。损失函数的构成:预测深度与groud-truth的差,左图与右图+左深度图重构的左图的光度误差,右图与左图重构的光度误差,泛化损失:对深度和灰度求梯度。

 

Kuznietsov, Y., Stückler, J., & Leibe, B. (2017, July). Semi-supervised deep learning for monocular depth map prediction. In Proc. of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 6647-6655).

 

四、总结