什么是单应矩阵和本质矩阵
知乎上面的大牛還是很多,直接搜Homography或者單應(yīng)矩陣就能得到很多大神的回答,可能回答中的一句話或者一個(gè)鏈接就夠自己學(xué)習(xí)很久。
其實(shí)在之前研究雙目視覺(jué)的時(shí)候就接觸了對(duì)極幾何,通過(guò)視覺(jué)就可以得到物體的遠(yuǎn)近信息,這也是特斯拉等自動(dòng)駕駛甚至可以完全使用攝像頭而不使用雷達(dá)的原因。
通過(guò)下面這幅圖說(shuō)明一下匹配點(diǎn)必須在極線上。在單鏡頭下,同一個(gè)徑向的物體P、Q的成像是重合的,所以我們無(wú)法判斷物體的前后遠(yuǎn)近關(guān)系,在雙目視覺(jué)中,利用兩個(gè)鏡頭對(duì)同一場(chǎng)景進(jìn)行捕捉,相當(dāng)于換了一個(gè)視角觀察,或者說(shuō)引入了鏡頭相對(duì)位置這個(gè)先驗(yàn)信息,從而可以利用兩個(gè)鏡頭分別捕捉的圖像進(jìn)行信息融合。這時(shí)問(wèn)題的關(guān)鍵就是在兩幅圖像之間找到對(duì)應(yīng)點(diǎn)。我們當(dāng)然可以使用SIFT等特征點(diǎn)描述子進(jìn)行匹配,但是,對(duì)極幾何利用極平面的特殊性質(zhì)將對(duì)應(yīng)點(diǎn)約束在另外一幅圖像的極線上,將搜索范圍從2D減少到1D。
本質(zhì)矩陣
剛才提到我們引入了鏡頭相對(duì)位置的先驗(yàn)信息,兩個(gè)鏡頭對(duì)于彼此的位置是已知的(通過(guò)極點(diǎn)),那么這種相對(duì)位置在數(shù)學(xué)上是怎么表示的呢?其實(shí)這就是基礎(chǔ)矩陣。最基本的空間變換是平移和旋轉(zhuǎn),本質(zhì)矩陣Essential Matrix就包含了旋轉(zhuǎn)R和平移T,因?yàn)橹皇晴R頭相對(duì)位置,所以不包含相機(jī)焦距等內(nèi)參。本質(zhì)矩陣的推導(dǎo)主要利用的是三個(gè)紅色的向量在極平面內(nèi)共面,即三個(gè)向量混合積(點(diǎn)乘和叉乘)為0,使用的坐標(biāo)系是相機(jī)坐標(biāo)系。
叉乘(向量的外積),結(jié)果還是一個(gè)向量,新的向量c垂直于向量a和b,按照右手螺旋法則,長(zhǎng)度是a和b張開(kāi)的平行四邊形的面積。相機(jī)坐標(biāo)系是以相機(jī)的鏡頭(光心)為原點(diǎn),z軸為鏡頭的徑向,和成像平面垂直。
將圓括號(hào)中的叉乘改寫(xiě)成矩陣形式,最后可以得到
本質(zhì)矩陣的求解和其中旋轉(zhuǎn)和平移矩陣的求解。矩陣是3x3大小的,需要8個(gè)點(diǎn)來(lái)求解。
基礎(chǔ)矩陣
剛才的本質(zhì)矩陣是在對(duì)應(yīng)點(diǎn)在相機(jī)坐標(biāo)系下的對(duì)應(yīng)關(guān)系,而我們更關(guān)心的是成像,即對(duì)應(yīng)點(diǎn)在圖像物理坐標(biāo)系(也叫平面坐標(biāo)系)下的對(duì)應(yīng)關(guān)系。圖像物理坐標(biāo)系大致和相機(jī)坐標(biāo)系一樣,但是原點(diǎn)移到了成像面上,為光軸與成像平面的交點(diǎn)。
相機(jī)坐標(biāo)系到圖像物理坐標(biāo)系之間的轉(zhuǎn)換:
圖像物理坐標(biāo)系和我們?nèi)粘T谟?jì)算機(jī)進(jìn)行數(shù)字圖像處理所使用的坐標(biāo)系依然不一樣,前者是以m為單位的,表示的是成像時(shí)距離原點(diǎn)的絕對(duì)長(zhǎng)度,而我們通常使用的是像素坐標(biāo)系。像素坐標(biāo)系以像素為單位,如圖像大小為255x255,表示這個(gè)圖像長(zhǎng)寬都是255個(gè)像素。像素坐標(biāo)系的原點(diǎn)選在圖像左上角,x軸為水平向右。OpenCV、OpenGL等庫(kù)的坐標(biāo)系即和圖像坐標(biāo)系一致。當(dāng)然明顯看出CCD傳感器以mm單位到像素中間有轉(zhuǎn)換的。舉個(gè)例子,CCD傳感上上面的8mm x 6mm,轉(zhuǎn)換到像素大小是640x480. 假如dx表示像素坐標(biāo)系中每個(gè)像素的物理大小就是1/80. 也就是說(shuō)毫米與像素點(diǎn)的之間關(guān)系是piexl/mm.
OpenCV中函數(shù)findFundamentalMat可以找到基礎(chǔ)矩陣Fundamental matrix。
單應(yīng)性矩陣Homography matrix
之前的對(duì)極幾何中兩個(gè)視圖中點(diǎn)的對(duì)應(yīng)關(guān)系是點(diǎn)對(duì)應(yīng)直線(極線),而單應(yīng)矩陣是點(diǎn)對(duì)應(yīng)另外一幅視圖中的點(diǎn),約束力更強(qiáng)。
H矩陣的推導(dǎo),來(lái)自相機(jī)在不同位姿拍攝同一個(gè)三維平面。之所以H矩陣約束力更強(qiáng),是它不僅僅引入了兩個(gè)鏡頭之間的旋轉(zhuǎn)和平移變換,還包含了景深信息d。
通過(guò)相機(jī)位置坐標(biāo)在法向量方向的投影(乘轉(zhuǎn)置)表示景深距離d。
兩個(gè)相機(jī)之間的位置包含了平移和旋轉(zhuǎn),他們之間的關(guān)系可以用等式來(lái)表示:
如果研究的對(duì)象是相機(jī)像素坐標(biāo),應(yīng)該有內(nèi)參矩陣K的參與,對(duì)應(yīng)的單應(yīng)矩陣為:
注意這里的單應(yīng)矩陣中包含了三大信息,旋轉(zhuǎn)矩陣R,平移矩陣T,景深信息d。R和T描述兩個(gè)相機(jī)之間的關(guān)系,所以是唯一確定的,而d是兩個(gè)相機(jī)所捕獲的平面上點(diǎn)到其中一個(gè)相機(jī)的距離,為了用單應(yīng)矩陣描述兩幅視圖中像素點(diǎn)的對(duì)應(yīng)關(guān)系,這個(gè)d應(yīng)該保持一致,即相機(jī)所捕獲的場(chǎng)景應(yīng)該是平面,且是垂直于相機(jī)1法向量的平面。
特別的,在純旋轉(zhuǎn)情況下,兩個(gè)相機(jī)之間沒(méi)有平移關(guān)系T,即
這樣單應(yīng)矩陣H就退化為H=R,H中不再包含d,所以就可以擺脫拍攝景物必須在同一平面的限制。而我們通常無(wú)法獲得景深信息d,所以這也讓我們不必再求解d。換一種思路,即便相機(jī)之間存在平移,但是當(dāng)景物在無(wú)窮遠(yuǎn)處時(shí),d可以認(rèn)為無(wú)窮大,也可以將H中的第二項(xiàng)舍去,此時(shí)的H叫做Infinite Homography。這給我們的啟發(fā)或者說(shuō)解釋就是,在使用相機(jī)拍攝全景圖時(shí),最好保證相機(jī)只在原地旋轉(zhuǎn),沒(méi)有平移運(yùn)動(dòng),或者拍攝的景物是遠(yuǎn)景,可以看作d是無(wú)窮大。
那么,當(dāng)實(shí)在無(wú)法滿足上述條件,即有平移,且無(wú)法保證共面,這種情況下不同的點(diǎn)的參數(shù)d不一樣,但是單應(yīng)矩陣只能選擇一個(gè)d,肯定會(huì)出現(xiàn)誤差。當(dāng)相機(jī)的平移向量相對(duì)于場(chǎng)景深度而言足夠小時(shí),可以使用RANSAC找到一個(gè)滿足大部分點(diǎn)的矩陣,誤差是可以接受的,這應(yīng)該就是orbslam中提到的低視差情形。
單應(yīng)矩陣的本質(zhì)
單應(yīng)矩陣的本質(zhì)是利用了平面信息(平面法向量n和相機(jī)到平面的距離d),建立起像素坐標(biāo)到相機(jī)系坐標(biāo)的關(guān)系。推導(dǎo)過(guò)程如下:
像素系齊次坐標(biāo)
原理上可由齊次坐標(biāo)得到相機(jī)坐標(biāo)系下的坐標(biāo):,K是相機(jī)內(nèi)參,K一般是已知的,現(xiàn)在問(wèn)題是深度z未知。而如果我們除了知道p的點(diǎn)坐標(biāo),還知道它所在平面的信息,就可以求出z。
p所在平面的法向量是n,p所在平面到相機(jī)的距離d,那么,將代入,得到
最后,參考鏈接還總結(jié)了單應(yīng)矩陣和對(duì)極幾何的關(guān)系。所謂的“六點(diǎn)法”,四個(gè)共面點(diǎn)確定H,兩個(gè)非共面點(diǎn)確定極點(diǎn)。極點(diǎn)確定了,H也知道,那么其他任意點(diǎn)的極線就能畫(huà)出來(lái)了,不用本征矩陣我們也可以構(gòu)造極線幾何。
而在計(jì)算本質(zhì)矩陣中,又必須滿足8點(diǎn)不能共面。這是因?yàn)楣裁娴脑捛蠼釫會(huì)有無(wú)窮多個(gè)解滿足方程,所以8點(diǎn)法求解不能適用于共面的情況。
這篇博客連同上一篇研究了圖像變換和單應(yīng)矩陣、本質(zhì)矩陣。其實(shí)在學(xué)習(xí)線性代數(shù)和矩陣論時(shí)就應(yīng)該認(rèn)識(shí)到,矩陣不僅能表示狀態(tài),還可以表示運(yùn)動(dòng)。真實(shí)世界中的物體在不同的成像條件下(特指相機(jī)的位置不同,兩個(gè)相機(jī)之間存在旋轉(zhuǎn)和平移),會(huì)得到不同的圖像,這些圖像之間可以認(rèn)為存在仿射變換或者透視變換,如果用矩陣來(lái)描述就可以使用單應(yīng)矩陣或者本質(zhì)矩陣。其實(shí)單應(yīng)矩陣適用于相機(jī)發(fā)生了旋轉(zhuǎn)的平面場(chǎng)景(或者近似平面場(chǎng)景),應(yīng)用的限制性和對(duì)點(diǎn)的限制性(點(diǎn)到點(diǎn))都更強(qiáng);本質(zhì)矩陣和基礎(chǔ)矩陣適用范圍更廣,它們都包含了相機(jī)之間的旋轉(zhuǎn)和平移信息,其中基礎(chǔ)矩陣更常用,因?yàn)樗唧w描述的是兩個(gè)相機(jī)得到的圖像的像素級(jí)之間的關(guān)系,而本質(zhì)矩陣只描述了兩個(gè)相機(jī)之間的關(guān)系,換一句話說(shuō),基礎(chǔ)矩陣相比于本質(zhì)矩陣,不僅包含兩個(gè)相機(jī)之間的旋轉(zhuǎn)平移信息,還包含了相機(jī)內(nèi)參。相機(jī)內(nèi)參就包括了鏡頭焦距、像素大小等信息,這就涉及到相機(jī)標(biāo)定,可以通過(guò)一個(gè)仿射矩陣表示。不過(guò)在理論上通過(guò)四對(duì)匹配點(diǎn)對(duì)就可以計(jì)算得到,而OpenCV的一個(gè)函數(shù)就可以實(shí)現(xiàn)。
Reference:
1.知多少https://blog.csdn.net/heyijia0327/article/details/53782094
2.坐標(biāo)系https://blog.csdn.net/lyl771857509/article/details/79633412
3.庖丁解牛侯凱https://www.cnblogs.com/houkai/p/6661607.html
4.葵花寶典https://link.zhihu.com/?target=http%3A//www.robots.ox.ac.uk/%7Evgg/hzbook/
5.一分鐘:https://blog.csdn.net/Yong_Qi2015/article/details/82858582
總結(jié)
以上是生活随笔為你收集整理的什么是单应矩阵和本质矩阵的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安卓向服务器发送List数据
- 下一篇: 剑指 Offer 06. 从尾到头打印链