爲了詳細瞭解單目稠密重建的細節,咱們將會分幾個專題來探討深度濾波器的一系列內容。spa
1.三角化3d
2.三角化深度值的偏差分析code
3.深度濾波器的原理及實現orm
4.單目稠密重建的流程blog
本系列內容主要參考高翔《視覺SLAM十四講》,這裏加上本身的理解,作一個總結。ip
本篇博客咱們來聊一聊三角化恢復深度信息。博客
目錄:it
(1)三角化的提出io
(2)三角化公式class
(3)求解深度的另外兩種方法
附錄
(1)三角化的提出
三角化最先由高斯提出,並應用於測量學中。簡單來說就是:在不一樣的位置觀測同一個三維點P(x, y, z),已知在不一樣位置處觀察到的三維點的二維投影點X1(x1, y1), X2(x2, y2),利用三角關係,恢復出三維點的深度信息z。
(2)三角化公式
按照對極幾何中的定義,設x1, x2爲兩個特徵點的歸一化座標,則它們知足:
s1x1 = s2Rx2 + t 公式(1)
=> s1x1 - s2Rx2 = t 公式(2)
對公式(2)左右兩側分別乘以x1T,得:
s1x1Tx1 - s2x1TRx2 = x1T t 公式(3)
對公式(2)左右兩側分別乘以(Rx2)T,得:
s1(Rx2)Tx1 - s2(Rx2)TRx2 = (Rx2)T t 公式(4)
由公式(3)和公式(4)能夠聯立獲得一個一元二次線性方程組,而後能夠利用Cramer's法則(參見線性代數書)進行求解。
以下是對應的代碼(若是你們感受不易讀懂,能夠先跳過這段代碼,等看完理論部分再返回來看不遲)
1 // 方程 2 // d_ref * f_ref = d_cur * ( R_RC * f_cur ) + t_RC 3 // => [ f_ref^T f_ref, -f_ref^T f_cur ] [d_ref] = [f_ref^T t] 4 // [ f_cur^T f_ref, -f_cur^T f_cur ] [d_cur] = [f_cur^T t] 5 // 二階方程用克萊默法則求解並解之 6 Vector3d t = T_R_C.translation(); 7 Vector3d f2 = T_R_C.rotation_matrix() * f_curr; 8 Vector2d b = Vector2d ( t.dot ( f_ref ), t.dot ( f2 ) ); 9 double A[4]; 10 A[0] = f_ref.dot ( f_ref ); 11 A[2] = f_ref.dot ( f2 ); 12 A[1] = -A[2]; 13 A[3] = - f2.dot ( f2 ); 14 double d = A[0]*A[3]-A[1]*A[2]; 15 Vector2d lambdavec = 16 Vector2d ( A[3] * b ( 0,0 ) - A[1] * b ( 1,0 ), 17 -A[2] * b ( 0,0 ) + A[0] * b ( 1,0 )) /d; 18 Vector3d xm = lambdavec ( 0,0 ) * f_ref; 19 Vector3d xn = t + lambdavec ( 1,0 ) * f2; 20 Vector3d d_esti = ( xm+xn ) / 2.0; // 三角化算得的深度向量 21 double depth_estimation = d_esti.norm(); // 深度值
(3)求解深度的另外兩種方法
a.利用叉乘進行消元進行求解
由
s1x1 = s2Rx2 + t 公式(1)
左右兩邊同時乘以x1的反對稱矩陣,可得:
s1x1^x1 = 0 = s2x1^Rx2 + x1^t 公式(2)
由上式可解得s2,
將s2代入公式(1),可求得s1
b.利用Mid Point Method進行求解(Hartley大名鼎鼎的《Multiple View Geometry》中有講解)
今後圖中咱們能夠知道,理想狀況下O1P和O2P會相交於空間中的一點,可是因爲圖像分辨率以及噪聲的存在,實際的狀況更多是上圖所描述的那樣:O1P和O2P在空間中沒有交點,這時咱們須要找到一個O1P與O2P之間的公垂線,而後取其上的中點做爲咱們重建出的三維點,此即爲Mid Point Method,具體的推導及公式請參看Hartley的《Multiple View Geometry》。
好了,今天的三角化深度信息咱們就講解到這裏,下次課咱們接着討論三角化深度信息中的偏差分析。
附錄:
1.Cramer's 法則:
若是A的行列式不爲0, Ax=b能夠經過以下行列式進行求解:
矩陣Bj爲A的第j列被b替換後獲得的新的矩陣。
參考文獻:
1.《視覺SLAM十四講:從理論到實踐》,電子工業出版社,2017,高翔等著。