【轉(zhuǎn)載】單應(yīng)矩陣的來源

Homography 理解本文轉(zhuǎn)自:http://m.blog.csdn.net/blog/xuluhui123/17115073
在計算機視覺中,平面的單應(yīng)性被定義為一個平面到另外一個平面的投影映射撰筷。因此一個二維平面上的點映射到攝像機成像儀上的映射就是平面單應(yīng)性的例子陈惰。如果點Q到成像儀上的點q的映射使用齊次坐標,這種映射可以用矩陣相乘的方式表示毕籽。若有一下定義:


則可以將單應(yīng)性簡單的表示為:

這里引入?yún)?shù)s抬闯,它是任意尺度的比例(目的是使得單應(yīng)性定義到該尺度比例)。通常根據(jù)習慣放在H的外面影钉。

H有兩部分組成:用于定位觀察的物體平面的物理變換和使用攝像機內(nèi)參數(shù)矩陣的投影画髓。


物理變換部分是與觀測到的圖像平面相關(guān)的部分旋轉(zhuǎn)R和部分平移t的影響之和掘剪,表示如下

這里R為33大小的矩陣平委,t表示一個一個3維的列矢量。
攝像機內(nèi)參數(shù)矩陣用M表示夺谁,那么我們重寫單應(yīng)性如下:

我們知道單應(yīng)性研究的是一個平面上到另外一個平面的映射廉赔,那么上述公式中的Q肉微,就可以簡化為平面坐標中的Q',即我們使Z=0蜡塌。即物體平面上的點我們用x,y表示碉纳,相機平面上的點,我們也是用二維點表示馏艾。我們?nèi)サ袅薢方向的坐標劳曹,那么相對于旋轉(zhuǎn)矩陣R,R可以分解為R=[r1 r2 r3]琅摩,那么r3也就不要了铁孵,參考下面的推導:

其中H為:

是一個3×3大小的矩陣.
故最終的單應(yīng)性矩陣可表示如下:

OpenCV就是利用上述公式來計算單應(yīng)性矩陣。它使用同一物體的多個圖像來計算每個視場的旋轉(zhuǎn)和平移房资,同時也計算攝像機的內(nèi)參數(shù)蜕劝。我們知道旋轉(zhuǎn)和平移共6個參數(shù),攝像機內(nèi)參數(shù)為4個參數(shù)轰异。對于每一個視場有6個要求解的新參數(shù)和4個不變的相機內(nèi)參數(shù)岖沛。對于平面物體如棋盤,能夠提供8個方差搭独,即映射一個正方形到四邊形可以用4個(x,y)來描述婴削。那么對于兩個視場,我們就有8
2=16=2*6+4,即求解所有的參數(shù)牙肝,至少需要兩個視場馆蠕。
為什么正方形到四邊形的四個點的映射可以確定8個方程呢,結(jié)果是顯然的惊奇,我們假設(shè)物體平面上的正方形的一個頂點坐標為(u,v)互躬,成像儀與該點對應(yīng)的點坐標為(x,y),我們假設(shè)它們之間的關(guān)系如下:
u=f(x,y);
v=g(x,y);
顯然颂郎,我們把四點的對應(yīng)坐標帶入到上述公式可以得到8個方程吼渡。
這里我們會想物體平面上正方形的四個頂點坐標如何確定,其實我們就可以理解為角點的個數(shù)乓序,對于尺度的話寺酪,我們有s進行控制。對于圖像平面上的角點的位置替劈,我們可以可以通過尋找角點來定位他們的位置寄雀。其實對于具體的操作,由于還沒細讀代碼和相關(guān)原理陨献,在這里只能大體猜測一下盒犹。等日后學習了,再來糾正。

單應(yīng)性矩陣H把源圖像平面上的點集位置與目標圖像平面上(通常是成像儀平面)的點集位置聯(lián)系起來:



OpenCV就是利用多個視場計算多個單應(yīng)性矩陣的方法來求解攝像機內(nèi)參數(shù)急膀。

OpenCV提供了一個方便的C函數(shù)cvFindHomography(),函數(shù)接口如下:

void cvFindHomography(  
const CvMat* src_points,  
const CvMat* dst_points,  
CvMat* homography  
);  

1沮协、src_points,dst_points為N×2或者N×3的矩陣卓嫂,N×2表示點是以像素坐標表示慷暂。N×3表示以齊次坐標表示。
2晨雳、homography,為3*3大小的矩陣行瑞,用來存儲輸出的結(jié)果。

C++函數(shù)的接口:

Mat findHomography( const Mat& srcPoints, const Mat& dstPoints,  
Mat& status, int method=0,  
double ransacReprojThreshold=3 );  
Mat findHomography( const Mat& srcPoints, const Mat& dstPoints,  
vector<uchar>& status, int method=0,  
double ransacReprojThreshold=3 );  
Mat findHomography( const Mat& srcPoints, const Mat& dstPoints,  
int method=0, double ransacReprojThreshold=3 );  

1餐禁、srcPoints,dstPoints為CV_32FC2或者vector<Point2f>類型
2蘑辑、method:0表示使用所有點的常規(guī)方法;CV_RANSAC 基于RANSAC魯棒性的方法坠宴;CV_LMEDS 最小中值魯棒性方法
3洋魂、ransacReprojThreshod 僅在RANSAC方法中使用,一個點對被認為是內(nèi)層圍值(非異常值)所允許的最大投影誤差喜鼓。即如果:



那么點i被認為是異常值副砍。如果srcPoints和dstPoints單位是像素,通常意味著在某些情況下這個參數(shù)的范圍在1到10之間庄岖。
4豁翎、status,可選的輸出掩碼隅忿,用在CV_RANSAC或者CV_LMEDS方法中心剥。注意輸入掩碼將被忽略。

這個函數(shù)找到并且返回源圖像平面和目的圖像平面之間的透視變換矩陣H:


使得下面的返回投影誤差(back-projection)最斜惩:

如果參數(shù)method設(shè)置為默認值0优烧,該函數(shù)使用一個簡單的最小二乘方案來計算初始的單應(yīng)性估計。
然而链峭,如果不是所有的點對(srcPoints,dstPoints)都適應(yīng)這個嚴格的透視變換畦娄。(也就是說,有一些異常值)弊仪,這個初始估計值將很差熙卡。在這種情況下,我們可以使用兩個魯棒性算法中的一個励饵。RANSCA和LMEDS這兩個方法都嘗試不同的隨機的相對應(yīng)點對的子集驳癌,每四對點集一組,使用這個子集和一個簡單的最小二乘算法來估計單應(yīng)性矩陣役听,然后計算得到單應(yīng)性矩陣的質(zhì)量quality/goodness颓鲜。(對于RANSAC方法是內(nèi)層圍點的數(shù)量表窘,對于LMeDs是中間的重投影誤差)。然后最好的子集用來產(chǎn)生單應(yīng)性矩陣的初始化估計和inliers/outliers的掩碼灾杰。

忽略方法蚊丐,魯棒性與否熙参,計算得到的單應(yīng)性矩陣使用Levenberg-Marquardt方法來進一步減少重投影誤差艳吠,從而進一步提純。(對于魯棒性的方法僅使用內(nèi)圍層點(inliers))孽椰。

RANSAC方法昭娩,幾乎可以處理任含有何異常值比率的情況,但是它需要一個閾值用來區(qū)分inliers和outliers黍匾。LMeDS方法不需要任何閾值栏渺,但是它僅在inliers大于50%的情況下才能正確的工作。最后锐涯,如果你確信在你計算得到的特征點僅含一些小的噪聲磕诊,但是沒有異常值,默認的方法可能是最好的選擇纹腌。(因此霎终,在計算相機參數(shù)時,我們或許僅使用默認的方法)
這個函數(shù)用來找到初始化內(nèi)參數(shù)和外參數(shù)矩陣升薯。單應(yīng)性矩陣取決于一個尺度莱褒,那么通常歸一化,以使得h33=1涎劈。

再貼一個知乎回答:

H矩陣知乎.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末广凸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蛛枚,更是在濱河造成了極大的恐慌谅海,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹦浦,死亡現(xiàn)場離奇詭異胁赢,居然都是意外死亡,警方通過查閱死者的電腦和手機白筹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門智末,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人徒河,你說我怎么就攤上這事系馆。” “怎么了顽照?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵由蘑,是天一觀的道長闽寡。 經(jīng)常有香客問我,道長尼酿,這世上最難降的妖魔是什么爷狈? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮裳擎,結(jié)果婚禮上涎永,老公的妹妹穿的比我還像新娘。我一直安慰自己鹿响,他們只是感情好羡微,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惶我,像睡著了一般妈倔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绸贡,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天盯蝴,我揣著相機與錄音,去河邊找鬼听怕。 笑死捧挺,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的叉跛。 我是一名探鬼主播松忍,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼筷厘!你這毒婦竟也來了鸣峭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤酥艳,失蹤者是張志新(化名)和其女友劉穎摊溶,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體充石,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡莫换,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了骤铃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拉岁。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惰爬,靈堂內(nèi)的尸體忽然破棺而出喊暖,到底是詐尸還是另有隱情,我是刑警寧澤撕瞧,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布陵叽,位于F島的核電站狞尔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏巩掺。R本人自食惡果不足惜偏序,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胖替。 院中可真熱鬧研儒,春花似錦、人聲如沸刊殉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽记焊。三九已至,卻和暖如春栓撞,著一層夾襖步出監(jiān)牢的瞬間遍膜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工瓤湘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓢颅,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓弛说,卻偏偏與公主長得像挽懦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子木人,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 這是很早以前已經(jīng)看過的信柿,最近無意中又把保存的文章翻出來時,想起很多朋友問過矩陣醒第,雖對矩陣似懂非懂渔嚷,但卻很想弄懂它,...
    dechuan閱讀 6,087評論 4 57
  • 之前在《淺談移動平臺創(chuàng)新玩法》簡單的猜測了easyar中使用的圖像識別算法稠曼,基于圖片指紋的哈希算法的圖片檢索 形病。后...
    zyl04401閱讀 13,080評論 6 16
  • 一前言 特征值 奇異值 二奇異值計算 三PCA 1)數(shù)據(jù)的向量表示及降維問題 2)向量的表示及基變換 3)基向量 ...
    Arya鑫閱讀 10,527評論 2 43
  • 理解矩陣一:轉(zhuǎn)載自:http://blog.csdn.net/myan/article/details/64751...
    jiandanjinxin閱讀 1,536評論 1 15
  • 到底是什么讓一個人的想法發(fā)生改變的,有人說是周圍環(huán)境變了霞幅,有人說人心會變漠吻。我也不知道我是因為環(huán)境變了還是心變了。去...
    心門上了鎖的窗閱讀 189評論 0 0