本文轉(zhuǎn)自徐飛翔的“立體視覺中的對(duì)極幾何——如何更好更快地尋找對(duì)應(yīng)點(diǎn) ”
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明
什么是立體視覺立體視覺(Stereo Vision)是什么呢?我們可以這樣理解:立 體 視 覺 ( S t e r e o V i s i o n ) = 尋 找 相 關(guān) 性 ( C o r r e s p o n d e n c e s ) + 重 建 ( R e c o n s t r u c t i o n ) 立體視覺(Stereo Vision) = 尋找相關(guān)性(Correspondences) + 重建(Reconstruction)立體視覺(StereoVision)=尋找相關(guān)性(Correspondences)+重建(Reconstruction)
Correspondences: 給定一張圖片中的像素點(diǎn),尋找其在另一張圖片中的對(duì)應(yīng)點(diǎn)
。Reconstruction: 給定一組對(duì)應(yīng)點(diǎn)對(duì)
,計(jì)算其在空間中對(duì)應(yīng)點(diǎn)P的3D坐標(biāo)。
Fig 1.1 立體視覺的尋找對(duì)應(yīng)點(diǎn)和重建。那么,在本文中,其實(shí)我們要討論的內(nèi)容就屬于如何去更好更快地尋找對(duì)應(yīng)點(diǎn)。抱著這個(gè)問題,我們正式地開始討論對(duì)極幾何吧。
對(duì)極幾何假設(shè)我們現(xiàn)在有兩張從不同視角拍攝的,關(guān)于同一個(gè)物體的圖片,如Fig 2.1所示,最為樸素的想法就是從一個(gè)2D區(qū)域中去尋找對(duì)應(yīng)點(diǎn),這樣顯然我們的計(jì)算復(fù)雜度很高,而且還不一定精準(zhǔn),那么我們有沒有能夠改善這個(gè)算法的方案呢?我們能不能對(duì)對(duì)應(yīng)點(diǎn)的可能搜索范圍進(jìn)一步縮小呢?答案是可以的。
通過對(duì)極幾何的約束,我們可以把搜索空間限制在一個(gè)直線上,我們將這個(gè)直線稱之為對(duì)極線,顯然,這樣不僅提供了搜索的效率,還提高了搜索的精確度。如Fig 2.2所示。
Fig 2.2 通過對(duì)極幾何的約束,我們將搜索空間限制在了對(duì)極線上。這個(gè)對(duì)極幾何那么神奇,那到底是什么原理呢?且聽筆者慢慢道來。
對(duì)極約束為了簡(jiǎn)單分析考慮,我們現(xiàn)在只是假設(shè)兩臺(tái)攝像機(jī)的情況,假設(shè)我們已經(jīng)對(duì)攝像機(jī)進(jìn)行了內(nèi)外參數(shù)的標(biāo)定[2],也就是說,我們已經(jīng)知道了攝像機(jī)的朝向以及彼此之間的距離,相對(duì)位置關(guān)系等,同時(shí)也知道了內(nèi)參數(shù),也就是焦距等等。那么我們假設(shè)現(xiàn)在這兩臺(tái)攝像機(jī)同時(shí)對(duì)某個(gè)現(xiàn)實(shí)物體點(diǎn)P PP進(jìn)行成像,我們有幾何關(guān)系示意圖Fig 2.3。
Fig 2.3 對(duì)極幾何約束,其中P點(diǎn)是實(shí)體3D點(diǎn),O和O'是焦點(diǎn)在Fig 2.3中,其中的是實(shí)體3D點(diǎn),而O和
是兩個(gè)攝像機(jī)的焦點(diǎn)(對(duì)于焦點(diǎn),讀者不妨看成是一個(gè)觀察者的視角,也就是你可以想象成你在O和
點(diǎn)觀察P點(diǎn)。),而成像平面
和
就是我們的成像面,其中面上的p 和
是實(shí)體點(diǎn)P的成像對(duì)應(yīng)點(diǎn),我們需要找的對(duì)應(yīng)關(guān)系,其實(shí)就是
這樣的點(diǎn)對(duì)。
對(duì)于這兩個(gè)不同的相機(jī)坐標(biāo)系,我們對(duì)于這兩個(gè)成像點(diǎn)有著不同的坐標(biāo)系表達(dá),讓我們分別以各自的焦點(diǎn)為原點(diǎn),表達(dá)這兩個(gè)點(diǎn),有:
對(duì)于Fig 2.3中的其他幾何元素,我們分別給予術(shù)語(yǔ),以方便稱呼:
點(diǎn)e和點(diǎn)稱之為極點(diǎn)(epipole)線l 和
稱之為對(duì)極線(epipolar line),其中l(wèi)是點(diǎn)
的對(duì)極線,
是點(diǎn)p的對(duì)極線。焦點(diǎn)之間的連線
稱之為基線(Baseline)平面
稱之為對(duì)極面(epipolar plane)。具體的元素位置,我們還能參考圖Fig 2.4中的英語(yǔ)標(biāo)注。
Fig 2.4 對(duì)極幾何的一些術(shù)語(yǔ)。
那么由圖Fig 2.3我們其實(shí)很容易發(fā)現(xiàn),所謂的對(duì)極約束,指的就是,成像平面上的點(diǎn)p,其在
的對(duì)應(yīng)點(diǎn)
必然在其對(duì)極線
上,這個(gè)關(guān)系可以由三者共面很容易看出來,其證明可參考[3]。也就是說,對(duì)于點(diǎn)p,如果我們要搜索其在另一個(gè)成像平面上的對(duì)應(yīng)點(diǎn),無(wú)需在整個(gè)平面上搜索,只需要在對(duì)極線上尋找即可了。如圖Fig 2.5所示,我們發(fā)現(xiàn)這個(gè)幾何關(guān)系其實(shí)是很直觀的。
再如圖Fig 2.6所示,這是個(gè)實(shí)際圖像的例子,我們發(fā)現(xiàn)我們剛才在幾何上的結(jié)論在實(shí)際中是成立的。
Fig 2.6 b和c上的對(duì)極線以及其對(duì)應(yīng)點(diǎn)的位置。
同時(shí),我們要注意到,我們的基線和成像平面的位置是不會(huì)改變的(假設(shè)不改變攝像機(jī)的相對(duì)位置的話),那么顯然,不管實(shí)體點(diǎn)P PP的位置在哪里,所有的對(duì)極線都是會(huì)經(jīng)過極點(diǎn)的,如圖Fig 2.7所示,其中虛線表示不同的對(duì)極面,不管對(duì)極面是哪個(gè),都是會(huì)經(jīng)過基線的;相對(duì)應(yīng)的,所有的對(duì)極線也是會(huì)經(jīng)過極點(diǎn)的。
好的,那么我們以上就直覺上討論了對(duì)極約束,那么我們應(yīng)該怎么用代數(shù)的方式去描述這個(gè)約束呢?畢竟只有用代數(shù)的方式表達(dá),才能進(jìn)行計(jì)算機(jī)的編程和實(shí)現(xiàn)。為了實(shí)現(xiàn)代數(shù)化,我們要引入所謂的本征矩陣。我們接下來討論這個(gè)。
本征矩陣還記得公式(2.1)中,我們?cè)?jīng)對(duì)兩個(gè)對(duì)應(yīng)點(diǎn)p和進(jìn)行了坐標(biāo)表達(dá)嗎?假設(shè)我們現(xiàn)在知道了每臺(tái)攝像機(jī)的內(nèi)部參數(shù),并且圖像坐標(biāo)已經(jīng)歸一化[4,5],這里所說的歸一化指的是假設(shè)存在一個(gè)焦距為1的面,如Fig 2.8所示,這里假設(shè)焦距為單位長(zhǎng)度,是為了后面的分析方便而已,我們將會(huì)看到,當(dāng)考慮實(shí)際焦距時(shí),其處理略有不同。進(jìn)行了歸一化之后,我們有:
其中是圖像點(diǎn)的單位坐標(biāo)向量。
Fig 2.8 相機(jī)系統(tǒng)內(nèi)的物理視網(wǎng)膜平面(也就是實(shí)際的成像平面)和歸一化成像平面(也就是焦距為1時(shí)的成像平面,是假想出來的平面,為了分析方便)。
OK, 不管怎么樣,我們繼續(xù)我們的討論。我們發(fā)現(xiàn)在Fig 2.3中,和
共面,我們用代數(shù)描述就是:
其中,×表示的是向量叉乘,我們知道空間向量叉乘表示求得其在右手坐標(biāo)系中的正交向量,如圖Fig 2.9所示。
Fig 2.9 叉乘的幾何意義。而式子中的點(diǎn)積為0表示了垂直關(guān)系,因此式子(2.2)正確表達(dá)了我們的對(duì)極約束,我們接下來代入坐標(biāo)。
考慮在中表示點(diǎn)p,通過坐標(biāo)的平移和旋轉(zhuǎn)可以容易實(shí)現(xiàn),見:
其中表示平移向量,
表示旋轉(zhuǎn)矩陣。那么反過來有:
令和
,我們有(2.4)的簡(jiǎn)化形式:
令和
,我們有(2.4)的簡(jiǎn)化形式:
考慮公式(2.2),我們發(fā)現(xiàn):
注意到,因?yàn)閷?duì)于垂直關(guān)系而言,平移與否沒有影響,我們最終有式子:
其中,(2.7)第二行的公式表示在另一個(gè)成像平面表示
上的坐標(biāo),最后一行,我們把叉乘轉(zhuǎn)化成矩陣乘法操作[6]。對(duì)于一個(gè)
來說,其叉乘乘子的矩陣乘法形式為:
如果用? ,我們有:
我們把這里的稱之為本征矩陣(Essential matrix)。
我們發(fā)現(xiàn),這里的旋轉(zhuǎn)矩陣其實(shí)是可以通過相機(jī)標(biāo)定進(jìn)行外參數(shù)估計(jì)得到的,同樣的,
也是如此。假設(shè),我們現(xiàn)在已知了
上的點(diǎn)p,我們可以令
,我們知道這個(gè)是個(gè)常數(shù)向量。最終,公式(2.9)可以寫成:
我們發(fā)現(xiàn)(2.10)其實(shí)就是一個(gè)直線方程了,這個(gè)直線方程正是p 的對(duì)極線,我們需要搜索的對(duì)應(yīng)點(diǎn) 正是在對(duì)極線上。
去掉歸一化坐標(biāo)系的限制,引入基礎(chǔ)矩陣我們?cè)诒菊骶仃嚹且还?jié)考慮的是歸一化的坐標(biāo)系,那么如果在原始的圖像坐標(biāo)系中,我們需要改寫成:
其中,是3 × 3 的標(biāo)定矩陣,
是圖像點(diǎn)的單位坐標(biāo)向量。那么我們有:
其中,矩陣稱之為基礎(chǔ)矩陣(Fundamental matrix)。
通常來說,無(wú)論是基礎(chǔ)矩陣還是本征矩陣都可以通過內(nèi)外參數(shù)的標(biāo)定來求得,特別地,通過足夠多的的圖像匹配計(jì)算,我們同樣可以無(wú)須采用標(biāo)定圖像,也可以得到這兩個(gè)矩陣。
Reference
[1]. 電子科技大學(xué)自動(dòng)化學(xué)院 楊路 老師 計(jì)算機(jī)視覺課程課件。
[2]. https://blog.csdn.net/LoseInVain/article/details/102632940
[3]. Hartley R, Zisserman A. Multiple View Geometry in Computer Vision[J]. Kybernetes, 2008, 30(9/10):1865 - 1872.
[4]. http://answers.opencv.org/question/83807/normalized-camera-image-coordinates/
[5]. http://answers.opencv.org/question/83807/normalized-camera-image-coordinates/
[6]. https://en.wikipedia.org/wiki/Cross_product