Homography 知多少?

分類:IT技術 時間:2017-03-23

該博客內容發表在泡泡機器人公眾號上,請尊重泡泡機器人公眾號的版權聲明

在ORB-SLAM初始化的時候,作者提到,如果場景是平面,或者近似平面,或者低視差時,我們能應用單應性矩陣(homography),這三種情形在我應用SVO的過程中頗有同感,打破了我對H矩陣的固有映像,即只能用於平面或近似平面。但是我不知道如何去具體分析這裏面的誤差,比如不共面的情況時,應用H矩陣將一個圖像坐標從圖像1投影到圖像2時,它會落在圖像哪個位置?和實際位置的誤差該怎麽計算?誤差會有多大?和哪些因素有關?另外,為何相機只做純旋轉運動時,不管平面還是非平面,H矩陣都能應用?等等,一些列問題,讓我感覺對homography了解很粗淺。

先簡單回顧我腦海裏的H矩陣,原諒我的啰嗦,我習慣開頭一大段大白話給大家熱身,進入正文以後就會盡量言簡意賅。在沒做視覺SLAM以前,通過opencv大概知道利用兩個圖像中至少四個特征點能夠求解一個單應性矩陣(homography matrix),然後用這個單應性矩陣H能夠將圖像1中的某個坐標(u,v)變換到圖像2中對應的位置(u,v)。然而,那時忽略了兩個圖像能夠計算H的前提條件。在學SLAM過程中,知道H矩陣的推導是來自於相機在不同位姿拍攝同一個三維平面,所以使用opencv計算單應性矩陣H的時候前提是兩個圖像對應區域必須是同一平面。

最近,劉浩敏師兄的RKSLAM裏面用了多H矩陣來提高魯棒性,以及加上開頭的那些疑問讓我有迫切進一步學習H矩陣的想法。本文將包括三部分:H的由來,H矩陣的擴展:相機的純旋轉和非共面情形,由H矩陣到6點法估計本征矩陣E

H矩陣的由來

假設相機在兩個不同位姿處拍攝一個平面,該平面在frame 1中的法向量為N,到frame 1原點距離為d,具體如下圖所示
這裏寫圖片描述
於是,坐標系1中的點可以用下式轉換到坐標系2中:X2=RX1+T註意,大寫粗體X表示的是三維空間點。同時,由於三維點X1所在平面上,由簡單的直角三角形,可知該點沿著法線方向的投影距離應等於dNTX1=n1X+n2Y+n3Z=d或者1dNTX1=1?X1P結合起來我們能夠得到:X2=RX1+T1dNTX1=HX1所以我們就得到了平面單應性矩陣H=R+T1dNT,HR3×3回憶之前提到過本征矩陣xT2Ex1=xT2T^Rx1=0,它只是把點對應到一條極線,而單應性矩陣約束更強,是點到點的一一對應

註意,本征矩陣約束公式是對於歸一化圖像平面坐標x=(x,y,1)T而言的,而上述推導的H是對三維空間點的。從3d到2d, 只需要將3d點向歸一化圖像平面z=1上投影。三維空間點到歸一化圖像平面只是對坐標縮放了z,有:λ1x1=X1,λ2x2=X2λ2x2=Hλ1x1從這裏我們可以發現,從歸一化圖像平面坐標x2Hx1之間還存在一個尺度因子,因此我們利用兩個圖像對應的坐標對能恢復H,但從該H中無法將平移Td分離出來,就導致了尺度的不確定性。而利用H,我們能得到x2Hx1,註意雖然這裏是用的相似符號,但是我們還是能得到圖像坐標的一一對應,計算出x=Hx1以後,將x的坐標都除以xz進行坐標歸一化,就能得到x2

H矩陣的擴展:相機的純旋轉和非共面情形

先看純旋轉情形,三維坐標關系如下:X2=RX1對應的有H=R+T1dNT,T=0我們可以發現無論三維點是否在一個平面上,H矩陣都能完美的符合他們之前的轉換關系。同時,平移向量為0,可以等價於所有點位於無窮遠平面上,即d。從另一個角度來看,如果位移為0,也無法計算d,d為任意值都能滿足上面點的轉換關系。所以,大家在做全景拼接的時候,要盡量只用純旋轉哦!當然,如果相機全景拼接算法好,就當我沒說。

這裏寫圖片描述
好了,讓我們回到另一個問題,即非共面情形,又不是純旋轉,那我們使用一個H矩陣來進行坐標點的轉換誤差會咋樣?

假設我們有一些非共面點,通過RANSAC算法估計了一個滿足大多數點對應關系的H矩陣,那麽對於不在三維平面上的p用矩陣H轉換以後,H會強迫它落到三維平面上,然後投影到另一個圖像歸一化平面,示意圖如下:

這裏寫圖片描述
也就是說p實際應該對應x2,由於使用了錯誤的模型H,它會落到x2x2的橫縱坐標通過H矩陣能夠算出,x2坐標通過將p進行旋轉矩陣R和平移T,再投影以後也能算出。因此兩個坐標相減就能得到誤差模型。不需要精確的數學計算,單單從上面的圖,我們就能直觀的感受到當相機的平移向量相對於場景深度而言足夠小時,x2x2之間的誤差是可被接受的,即這種情況下依然可以使用H矩陣來算坐標的一一對應,這應該就是orbslam中提到的低視差情形。

一個重要的啟示是:H矩陣的這種直接計算圖像坐標一一對應關系的性質給解決SLAM中像素點的匹配又提供了一條思路,如果一個H矩陣不行,那一幅圖片就用多個H矩陣,這正是浩敏師兄那篇ISMAR 2016論文的重要框架基礎。而通過本征矩陣E只能計算極線,還需要沿著極線匹配。

H矩陣到本征矩陣E的一點遐想

既然說到了極線,順著上面的思路,幹脆探一探本征矩陣E。其實,上面圖中,大家夥都看到x2x2是位於極線上的,他們坐標都知道,就能得到極線方程,如果還有另外一個點再確定一條極線,如下圖所示

這裏寫圖片描述
那麽外極點e2就能確定,極點確定了,H也知道,那麽其他任意點的極線就能畫出來了,不用本征矩陣我們也可以構造極線幾何。這就是所謂的“六點法”,四個共面點確定H,兩個非共面點確定極點。

另外,還可以解釋為什麽8點法計算求解本征矩陣不能應用於共面的情形。我們知道一個向量和自己叉乘結果等於0,所以有x^2x2=0x^2Hx1=0另外,任意三維向量ux2的叉乘肯定垂直於向量x2,所以有:u^x2Hx1?(u^x2)THx1=0??xT2u^Hx1=0?xT2u^Hx1=0所以我們能得到E=u^H,這說明E在這種情況下有無窮多解都能滿足xT2Ex1=0,這個時候還用8點法,肯定是不行了。

總結

總算寫完了,推薦大家去讀Yi Ma的書《An Invitation to 3D vision》上面幾乎都來自於這本書,同時之前也提到過TUM的Prof.Cremers上課就是用的這本書。除此之外,再推薦個基於該書的課程。視覺幾何真心水深,沒有理論積累,沒有前人指點,坑是填不完的,祝好(對大家,也是對自己)。

(轉載請註明作者和出處:http://blog.csdn.net/heyijia0327 未經允許請勿用於商業用途)

【版權聲明】泡泡機器人SLAM的所有文章全部由泡泡機器人的成員花費大量心血制作而成的原創內容,希望大家珍惜我們的勞動成果,轉載請務必註明出自【泡泡機器人SLAM】微信公眾號,否則侵權必究!同時,我們也歡迎各位轉載到自己的朋友圈,讓更多的人能否進入到SLAM這個領域中,讓我們共同為推進中國的SLAM事業而努力!
【註】商業轉載請聯系劉富強([email protected])進行授權。普通個人轉載,請保留版權聲明,並且在文章下方放上“泡泡機器人SLAM”微信公眾賬號的二維碼即可。

ref:已在總結中指出,不再列舉。


Tags: 機器人 matrix 我不知道 版權 博客

文章來源:


ads
ads

相關文章
ads

相關文章

ad