在三維重建中,如果我們有2個以上視角,那么三條線很可能是不交于一點的。原因是我們選擇的旋轉矩陣有精度表達問題,位姿估計也存在誤差。使用奇異值分解的方法是求得到三條線距離最小的點,還有一種合適的估計,是使得該點在三個相機上的重復投影誤差最小。同時,R,T,P(X,Y,Z)進行估計,最終保證Reprojection err 最小的方法————the state of the art BUNDLE ADJUST.先回到最原始的問題,如何求解非線性最小二乘法。由線性最小二乘法,我們可以得到非線性最小二乘法矩陣表達形式。如果要求得其局部最小值,則對 x 求導后,導數應為 0。然而,這個東西并不好解,我們考慮使用梯度下降迭代的方式。這里使用的是單純的梯度。這里有個非常不好理解的地方,其假設detaX非常小,故表示成上述形式,以保證 f(x + deta_X)<f(x) , 只要依次迭代 x 就能保證每次都向著f(x)減小的方向移動。實際上,這個解應該由HESSIAN矩陣給出。以信標定位為例。講道理,兩個信標為圓心畫圓應該給出位置的兩個解析解。但是如果有很多信標,那么信標就會畫出一塊區域........這是SLAM里的經典問題了,后面會有博客專門講BUNDLE ADJUST. (四) 極幾何是機器人視覺分支——雙目視覺中,最為重要的概念。與結構光視覺不同,雙目視覺是“主動測量”方法。
本征矩陣攜帶了相機相對位置信息。其推導如下:在相機2的坐標系中,場景點坐標:X2 = RX1+ t相機1光心坐標:t極線在空間中的映射 :X2 - t = RX1此時,三個向量在同一個平面上,則有:X2 T tx RX1 = 0其中,tx 代表 t 的叉乘矩陣。tx R 稱為本征矩陣E. 兩幅圖片一旦拍攝完成R與T都是確定的。空間中任何一組對應點都必須滿足本征矩陣!
1.2、基本矩陣
空間中的點滿足E矩陣,則該點坐標Zoom后,仍然必須滿足E矩陣。坐標的Zoom顯然和相機內部矩陣有關。在相機坐標系下:x1 = KX1; x2 = KX2其中,x1 ,x2 是齊次像素坐標。那么,X1 = K-1x1 ;X2 = K-1x2帶入本征矩陣可得:x2 T K-Ttx RK-1 x1 = 0 ======> K-TEK-1 = 0 =========> x2 T F x1 = 0 F = K-TEK-1 稱為基本矩陣。基本矩陣所接受的是齊次像素坐標。基本矩陣的秩是2,因為它有0空間。同時,其自由度是8,因為它接受的是齊次坐標。每組圖像點可以提供1個方程,所以由8組點就可以線性解出F矩陣。當然,解法是化成Ax = 0,然后使用奇異值分解取v的最后一列。然后2次奇異值分解去掉最小奇異值正則化。
1.3、極點與極線
從基本矩陣可知:x2 T F x1 = 0 顯然這里有熟悉的身影,由點線對偶可知,x2 在直線 F x1 上。該直線是極線在圖像2上的方程。x1 在直線 x2 T F 。該直線是極線在圖像1上的方程。極點是多條極線的交點(最少兩條)
之前已經在擬合一篇中,已經補完了非線性最小二乘擬合問題。Bundle Adjustment,中文是光束平差法,就是利用非線性最小二乘法來求取相機位姿,三維點坐標。在僅給定相機內部矩陣的條件下,對四周物體進行高精度重建。Bundle Adjustment的優化目標依舊是最小重復投影誤差。 與利用non-linear mean square 解三角同,bundle adjustment 中所有的參數,RCX均為變量。N幅圖則有N個位姿,X個點,我們會得到非常大的jacobbian Matrix.本質上,需要使用雅克比矩陣進行梯度下降搜索。詳細見之前介紹過的“擬合”篇。
2、雅克比矩陣
雅克比矩陣的行代表信息,列代表約束。每一行是一個點在該位姿下的誤差,每一列代表f對x分量的偏導數。q x c 均為變量,q是旋轉四元素,x 是三維點空間坐標,c 是相機光心在世界坐標系下的坐標。J 可以分為三部分,前4列代表對旋轉求導,中間三列代表對c求導,最后三列代表對x求導。其中,對旋轉求導又可以分解為對旋轉矩陣求導X旋轉矩陣對四元素q求導。一旦獲得J的表達式,我們就可以使用Newton-Gaussian 迭代對x尋優了。求導后的數學表達式如下:如果有兩個相機,則總的雅克比矩陣如下:通過同時迭代所有的q C X ,最終可以同時得到世界點坐標,相機位姿 ——SLAM!