1. 程式人生 > >單應性矩陣的理解及求解1

單應性矩陣的理解及求解1

儘量寫的通俗一點,因為從某種程度上講,本人也是dummy.....
1. 先說homogeneous coordinate,齊次座標
一幅2D影象上的非齊次座標為(x,y),而齊次座標為(x,y,1),也可以寫成(x/z,y/z,1)或(x,y,z)。齊次座標有很多好處,比如可以很清楚的確定一個點在不在直線上:
T(x)*I=0,這裡T表示轉置;

還可以描述無窮遠點:(x,y,0);

還可以把平移和旋轉寫到一個矩陣裡(也有不願意這麼幹的,攝影測量裡用的都是非齊次座標,平移和旋轉分開寫);

具體的可去看<計算機視覺中的多檢視幾何>,i.e.,<multiple view geometry in computer vision>。

2. Homography matrix,單應性矩陣
兩個不同視角的影象上的點對的homogeneous coordinate可以用一個射影變換(projective transformation)表述,即:

x1 =H*x2

二維和三維的圖示如下:

射影變換也叫“單應”--Homography,“Homo”字首就是same的意思,表示“同”(homosexual大家都知道),homography就是用同一個源產生的graphy,中文譯過來大概就是"單應"。

因此上面式子中的矩陣H就叫單應性矩陣。上式中的x1和x2都是3*1的齊次座標,因此H是一個3*3的矩陣:{h00,h01,h02;h10,h11,h12;h20,h21,h22}。

然而,單應矩陣的自由度是多少呢?(參考https://www.zhihu.com/question/23310855)
如果給定一個單應H={h_ij},給它的元素乘上同一個數a,得到的的單應a*H和H作用相同,因為新單應無非把齊次點x1變成了齊次點a*x1,都是一回事。因此我們可以把a換成1/h22,那麼H就變成了只有8個自由元素的矩陣。
那麼需要多少個點對求解這個H呢?如果需要唯一解的話,需要4個點對(對應8個方程,去解H中的8個未知數)。
關於這個話題的理解,可以繼續參考:
http://blog.csdn.net/qq_19764963/article/details/52038748
http://cseweb.ucsd.edu/classes/wi07/cse252a/homography_estimation/homography_estimation.pdf
3. 舉兩個應用的例子。
例子1:兩個影象的拼接
通過影象特徵點匹配+RANSAC可以獲得影象之間的單應性矩陣,然後把其中一個影象通過這個矩陣投影到另一個影象上就完成了基本的拼接。
例子2:在相機的內參數標定過程中會用到求解單應性矩陣
對一個棋盤格拍照,棋盤格的世界座標系是使用者任意設定的,標定的時候,預設世界座標系就是以標定板左上角點為原點,z軸垂直於標定板,xoy面與標定板重合的三維直角座標系。棋盤格的格子長度已知,因此可以知道各個角點的世界座標系座標XYZ(Z=0)。由於Z=0,因此可以忽略掉Z這個維度,世界座標系中某個座標(X,Y,Z,1)到影象座標(x,y,1)的變換就等價於(X,Y,1)到影象座標(x,y,1)的變換。此時的變換矩陣就由3*4變為3*3,成為了單應性矩陣。
因此用4個角點就可以計算H的8個引數。以不同的角度對棋盤格拍攝3張就可以得到3個H,如果用張正友標定法,就可以得到6個約束方程,可以求解B矩陣(對稱矩陣)的6個未知引數,進而通過Cholesky分解求解出內參矩陣A的引數。