轉載聲明:本文轉載自 金木炎 的博客,僅供個人學習。感謝博主的無私分享,如有侵權,敬請告知。
這篇將要講orbslam2相機初始位置估計的另一種方法:單應矩陣H(使用場景:平面,視差小)和map point的求法
(一):單應矩陣
在計算機視覺中,平面的單應性被定義爲一個平面到另外一個平面的投影映射。因此一個二維平面上的點映射到攝像機成像儀上的映射就是平面單應性的例子。如果點Q到成像儀上的點q的映射使用齊次座標,這種映射可以用矩陣相乘的方式表示。若有一下定義:
Q=[X Y Z 1]T
q=[x y 1]T
q=sHQ
這裏引入參數s,它是任意尺度的比例(目的是使得單應性定義到該尺度比例)。通常根據習慣放在H的外面。
H有兩部分組成:用於定位觀察的物體平面的物理變換和使用攝像機內參數矩陣的投影。
物理變換部分是與觀測到的圖像平面相關的部分旋轉R和部分平移t的影響之和,表示如下
W=[R t]
這裏R爲3*3大小的矩陣,t表示一個一個3維的列矢量。
攝像機內參數矩陣用M表示,那麼我們重寫單應性如下:
q=sWMQ where W是相機內參矩陣
我們知道單應性研究的是一個平面上到另外一個平面的映射,那麼上述公式中的~Q,就可以簡化爲平面座標中的~Q',即我們使Z=0。即物體平面上的點我們用x,y表示,相機平面上的點,我們也是用二維點表示。我們去掉了Z方向的座標,那麼相對於旋轉矩陣R,R可以分解爲R=[r1 r2 r3],那麼r3也就不要了。
其中H爲:
H=sM[r1 r2 t]
是一個3×3大小的矩陣.
故最終的單應性矩陣可表示如下:
q=sHQ我們可以從H矩陣中恢復R,T。但是同樣存在尺度問題(指T),所以只有在初始位置估計的時候纔用到E或H。以後一般都用opencv的PNP求解也就是3D-2D的映射。
(二)我們除了要求相機的pose以外,還要求map point。下面來講解map point的求法。
所以,通過本徵矩陣得到R,t以後,要計算攝像機座標系C2外參數矩陣的程序如下:
有了外參矩陣,我們就可以得到這些點座標的關係:
在以上計算P三維座標的推導過程中,可以看到和本徵矩陣E是息息相關的,E和我們的尺度緊密相連,所以計算出來的深度和尺度scale也是直接相關的。同時,根據這種三角法(triangulation )計算的深度,其實是不怎麼靠譜的,一般只是拿這個做一個初始值。
兩個射線夾角越小,誤差協方差越大。所以點到光心連線組成的射線向量在orbslam中是有明確記錄的。