1. 程式人生 > >計算機視覺 單應性 Homography

計算機視覺 單應性 Homography

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

先簡單回顧我腦海裡的矩陣,讓大家有點代入感,原諒我的囉嗦,進入正文以後就會盡量言簡意賅。在沒做視覺SLAM以前,通過opencv大概知道:利用兩個影象中至少四個特徵點能夠求解一個單應性矩陣(homography matrix),然後用這個單應性矩陣能夠將影象1中的某個座標變換到影象2中對應的位置。然而,那時忽略了兩個影象能夠計算的前提條件。在學SLAM過程中,知道矩陣的推導是來自於相機在不同位姿拍攝同一個三維平面

,所以使用opencv計算單應性矩陣的時候前提是兩個影象對應區域必須是同一平面。

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

矩陣的由來

假設相機在兩個不同位姿處拍攝一個平面,該平面在frame 1中的法向量為,到frame 1原點距離為,具體如下圖所示 
這裡寫圖片描述
於是,座標系1中的點可以用下式轉換到座標系2中:

注意,大寫粗體表示的是三維空間點。同時,由於三維點所在平面上,由簡單的直角三角形,可知該點沿著法線方向的投影距離應等於:或者結合起來我們能夠得到:所以我們就得到了平面單應性矩陣回憶之前提到過本徵矩陣,它只是把點對應到一條極線,而單應性矩陣約束更強,是點到點的一一對應

注意,本徵矩陣約束公式是對於歸一化影象平面座標而言的,而上述推導的是對三維空間點的。從3d到2d, 只需要將3d點向歸一化影象平面上投影。三維空間點到歸一化影象平面只是對座標縮放了,有:

從這裡我們可以發現,從歸一化影象平面座標到之間還存在一個尺度因子,因此我們利用兩個影象對應的座標對能恢復,但從該中無法將平移和分離出來,就導致了尺度的不確定性。而利用,我們能得到,注意雖然這裡是用的相似符號,但是我們還是能得到影象座標的一一對應,計算出以後,將的座標都除以進行座標歸一化,就能得到。

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

先看純旋轉情形,三維座標關係如下:

對應的有我們可以發現公式H和深度d沒有關係了,無論三維點是否在一個平面上,矩陣都能完美的符合他們之前的轉換關係。同時,平移向量為0,可以等價於所有點位於無窮遠平面上,即。從另一個角度來看,如果位移為0,也無法計算d,d為任意值都能滿足上面點的轉換關係。所以,大家在做全景拼接的時候,要儘量只用純旋轉哦!

當然,如果相機全景拼接演算法好,就當我沒說。 

這裡寫圖片描述

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

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

這裡寫圖片描述

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

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

由矩陣到本徵矩陣的一點遐想

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

這裡寫圖片描述

那麼外極點就能確定,極點確定了,H也知道,那麼其他任意點的極線就能畫出來了,不用本徵矩陣我們也可以構造極線幾何。這就是所謂的“六點法”,四個共麵點確定H,兩個非共麵點確定極點。

另外,還可以解釋為什麼8點法計算求解本徵矩陣不能應用於共面的情形。我們知道一個向量和自己叉乘結果等於0,所以有

另外,任意三維向量和的叉乘肯定垂直於向量,所以有:所以我們能得到,這說明在這種情況下有無窮多解都能滿足,這個時候還用8點法,肯定是不行了。

總結

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

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