一、研究背景
視覺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).
四、總結