基础矩阵,本质矩阵,单应性矩阵讲解
ORB-SLAM點云地圖中相機的位姿初始化,無論算法工作在平面場景,還是非平面場景下,都能夠完成初始化的工作。其中主要是使用了適用于平面場景的單應性矩陣H和適用于非平面場景的基礎矩陣F,程序中通過一個評分規則來選擇適合的模型,恢復相機的旋轉矩陣R和平移矩陣t
那么下面主要講解關于對極幾何中的基礎矩陣,本質矩陣,和單應矩陣之間的區別與聯系。
對極幾何(Epipolar Geometry)描述的是兩幅視圖之間的內在射影關系,與外部場景無關,只依賴于攝像機內參數和這兩幅視圖之間的相對位姿。
兩視圖的對極幾何可以理解為圖像平面與以基線為軸的平面束相交的幾何關系,其中主要有幾種概念:
(1)基線(base line):兩個相機中心的連線CC'稱為基線。
(2)對極點(epipolar):ee'是對極點,是基線與兩個成像平面的交點,也就是兩個相機在另一個成像平面上的像點。
(3)對極平面(epipolar ?plane):過基線的平面都稱之為對極平面,其中兩個相機的中心C和C',三維點X,以及三維點在兩個相機成像點xx'這五點必定在同一對極平面上,當三維點X變化時,對極平面繞著基線旋轉,形成對極平面束。
(4)對極線(epipolar line):是對極平面和成像平面的交線,所有的對極線都相交于極點。
那么由對極幾何的基本性質引出了對極約束的概念,對極約束是指在平面2上的p點在平面1上的對應點一定在基線I'上,這句話說明了對極約束是一個點到直線的射影映射關系。如圖所示:
根據對極約束可以引出本質矩陣和基礎矩陣。在已知相機標定的情況下,假設有一個三維坐標點P(X,Y,Z)在兩個視圖上的點分別為p1,p2,由于第一個相機的中心作為世界坐標系的原點,也就是說第一個相機沒有旋轉R和平移t,通過小孔相機模型有:
? ? ? ? ? ? ? ? ? ? ? p1=KP,? ? ? ?p2=K(RP+t)
其中,K是相機的內參,R,t是第二個相機相對于第一個相機的旋轉和平移。
從p1=KP可以得到
帶入到第二個式子得到
兩邊同時乘以K_1得到
設x1,和x2表示為
帶入到x2=Rx1+t中,兩邊同時左乘向量t的反對稱矩陣t×,由于t×t=0,消除t,
兩邊再同時左乘xT2
由于t×x2是向量t和向量x2的叉積,同時垂直于向量t和向量x2,所以左邊的式子為0得到:
將x1,x2替掉
上式是對極約束的一種表示,該式子中僅包含像點,相機的旋轉和平移,中間的矩陣就是基礎矩陣F:
當K已知時提取中間的矩陣得到本質矩陣E,E矩陣同樣表示的是對極約束的關系,只不過它不再涉及相機內參,只由兩視圖之間的姿態關系決定:
F矩陣的性質有三:
1, 3*3且自由度為7的矩陣
2,kF 為基礎矩陣,相差一個尺度自由度
3,F矩陣的秩為2
基礎矩陣的求解方法:
1,直接線性變換法(8點法+最小二乘法)
2,RANSAC-估計基礎矩陣
求解基礎矩陣后,我們實際上是想求R和t.所以還是要繼續求解本質矩陣直到分解出R,t
E矩陣的性質:
(1)3*3且自由度為5的矩陣
(2)因為只包含R,t共有6個自由度,又因為尺度等價去掉一個自由度
(3)本質矩陣E的奇異值 必定為[ delta delta,0]T 的形式?
ORB-SLAM中通過E、F矩陣就可以利用兩視圖中的匹配點求解出相對姿態了,不過這個方法存在一個問題——當兩個視圖的相機中心相同時,也就是R,t中的t為0,這時對極幾何的基礎也就不成立了,可知E、F均為0無法求解。這時就需要使用平面間的單應性H矩陣恢復R,t。
單應性矩陣Homogeneous是射影幾何中的一個術語,又稱之為射影變換。本質上是一個數學概念,一般所說的單應矩陣是平面上的單應性矩陣,主要用來解決兩個問題:
(1)表述真實世界中一個平面與他對應圖像的透視變換
(2)通過透視變換實現圖像從一個視圖變換到另一個視圖的轉換。
把一個射影平面上的點(三維齊次矢量)映射到另一個射影平面上,并且把直接射影為直線,具有保線性,總的來說單應是關于三維齊次矢量的一種線性變換,如圖所示,兩個平面之間的關系可以用一個3*3的非奇異矩陣H表示x1=Hx2,H表示單應矩陣,定義了八個自由度。這種關系定義為平面單應性。
假設已經取得了兩圖像之間的單應,則可單應矩陣HH可以將兩幅圖像關聯起來:
其中,(u1,v1,1)T(u1,v1,1)T表示圖像1中的像點,(u2,v2,1)T(u2,v2,1)T是圖像2中的像點,也就是可以通過單應矩陣H將圖像2變換到圖像1,該功能有很多實際的應用,例如圖像的校正、對齊以及在SLAM中估計兩個相機間的運動。并保持某些性質的不變性,顯然具有保線性。
而在視覺slam中一般為同一相機在不同的位姿得到同一平面的圖像有以下公式
以上公式如何推導而來呢?假設使用同一相機在不同的位姿下拍攝了同一平面,如圖:
上圖表示場景中的平面π在兩相機的成像,設平面π在第一個相機坐標系下的單位法向量為N,其到第一個相機中心(坐標原點)的距離為d,則平面π可表示為:
變換為
其中,X1是三維點P在第一相機坐標系下的坐標,其在第二個相機坐標系下的坐標為X2,則
將上面式子結合起來有
得到了同一平面兩個不同相機坐標系的單應矩陣
單應矩陣求解方法:
(1)直接線性變換法。
(2)RANSAC-估計單應矩陣
平面的單應矩陣和對極約束的F矩陣的區別
兩圖像間的對極約束和場景的結構無關,可以理解對極約束對于任意場景結構的兩幅圖像都是成立的,約束是不能給出兩幅圖像上的像點的一一對應關系,但是可以給出點對應的必要條件,另一幅圖像上對應的像點位于對應的對極線上。基礎矩陣F描述的實際是一種點和直線的映射關系,而不是一種點對點的約束關系,并不能給出另一個點的確切位置。
平面間的單應矩陣,并不像對極約束完全不需要場景的結構信息,它對場景的結構有了要求,場景的點必須在同一個平面上,因此單應矩陣H也就能夠對兩圖像上對應點的提供更多的約束,知道了某點在一幅圖像的像點位置后,可以通過單應矩陣,求得其在另一幅圖像中像點的確切位置。
單應矩陣的應用場景是相機只有旋轉而無平移的時候,兩視圖的對極約束不成立,基礎矩陣F為零矩陣,這時候需要使用單應矩陣H,場景中的點都在同一個平面上,可以使用單應矩陣計算像點的匹配點。?相機的平移距離相對于場景的深度較小的時候,也可以使用單應矩陣H。
本文內容推導大部分來自《視覺SLAM14講》。如有補充請大家積極留言,并且希望大家能夠在閱讀論文或者有推薦的論文或者開源代碼,只要和點云相關,都可以留言給群主,如果有必要將會出與你推薦相關的資料。希望大家能夠積極參與分享。如有侵權請第一時間聯系本平臺,將及時刪除。
資源
三維點云論文及相關應用分享
【點云論文速讀】基于激光雷達的里程計及3D點云地圖中的定位方法
3D目標檢測:MV3D-Net
三維點云分割綜述(上)
3D-MiniNet: 從點云中學習2D表示以實現快速有效的3D LIDAR語義分割(2020)
win下使用QT添加VTK插件實現點云可視化GUI
JSNet:3D點云的聯合實例和語義分割
大場景三維點云的語義分割綜述
PCL中outofcore模塊---基于核外八叉樹的大規模點云的顯示
基于局部凹凸性進行目標分割
基于三維卷積神經網絡的點云標記
點云的超體素(SuperVoxel)
基于超點圖的大規模點云分割
更多文章可查看:點云學習歷史文章大匯總
SLAM及AR相關分享
【開源方案共享】ORB-SLAM3開源啦!
【論文速讀】AVP-SLAM:自動泊車系統中的語義SLAM
【點云論文速讀】StructSLAM:結構化線特征SLAM
SLAM和AR綜述
常用的3D深度相機
AR設備單目視覺慣導SLAM算法綜述與評價
SLAM綜述(4)激光與視覺融合SLAM
Kimera實時重建的語義SLAM系統
SLAM綜述(3)-視覺與慣導,視覺與深度學習SLAM
易擴展的SLAM框架-OpenVSLAM
高翔:非結構化道路激光SLAM中的挑戰
SLAM綜述之Lidar SLAM
基于魚眼相機的SLAM方法介紹
往期線上分享錄播匯總
第一期B站錄播之三維模型檢索技術
第二期B站錄播之深度學習在3D場景中的應用
第三期B站錄播之CMake進階學習
第四期B站錄播之點云物體及六自由度姿態估計
第五期B站錄播之點云深度學習語義分割拓展
第六期B站錄播之Pointnetlk解讀
[線上分享錄播]點云配準概述及其在激光SLAM中的應用
[線上分享錄播]cloudcompare插件開發
[線上分享錄播]基于點云數據的?Mesh重建與處理
[線上分享錄播]機器人力反饋遙操作技術及機器人視覺分享
[線上分享錄播]地面點云配準與機載點云航帶平差
點云PCL更多活動請查看:點云PCL活動之應屆生校招群
掃描下方微信視頻號二維碼可查看最新研究成果及相關開源方案的演示:
如果你對本文感興趣,請點擊“原文閱讀”獲取知識星球二維碼,務必按照“姓名+學校/公司+研究方向”備注加入免費知識星球,免費下載pdf文檔,和更多熱愛分享的小伙伴一起交流吧!
以上內容如有錯誤請留言評論,歡迎指正交流。如有侵權,請聯系刪除
掃描二維碼
? ? ? ? ? ? ? ? ? ?關注我們
讓我們一起分享一起學習吧!期待有想法,樂于分享的小伙伴加入免費星球注入愛分享的新鮮活力。分享的主題包含但不限于三維視覺,點云,高精地圖,自動駕駛,以及機器人等相關的領域。
分享及合作方式:可聯系微信“920177957”(需要按要求備注)聯系郵箱:dianyunpcl@163.com,歡迎企業來聯系公眾號展開合作。
點一下“在看”你會更好看耶
總結
以上是生活随笔為你收集整理的基础矩阵,本质矩阵,单应性矩阵讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TeaseR++:快速鲁棒的C++点云配
- 下一篇: windows下编译pcl-master