本文轉(zhuǎn)自徐飛翔的“圖像校正(Image Rectification)——使得在對極線上尋找對應(yīng)點更加容易 ”
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明
為什么我們需要圖像矯正
我們在[1]曾經(jīng)聊到了在對極線上尋找對應(yīng)點的方法,如Fig 1.1所示。這種方法將對應(yīng)點可能的范圍約束到了一條直線上,而不是一個二維平面,這樣大大減小了搜索空間。同時,我們也在[1]中聊過,每個對極面都是會經(jīng)過基線的,每個對極線也是會經(jīng)過對應(yīng)的對極點的,正是因為如此,其實對于單張圖的對極線組來說,如果延伸每條對極線,我們會發(fā)現(xiàn)每條對極線都會匯聚于對極點上,如Fig 1.2所示。也正是因為如此,我們得到的對極線們都不是平行的,如Fig 1.3所示。
Fig 1.1 在對極線l和l'上尋找對應(yīng)點。
Fig 1.2 對極線的延長線將會匯聚在對極點上。
Fig 1.3 兩張圖對應(yīng)的對極線對(epipolar lines pair),我們發(fā)現(xiàn)這兩組對極線都是不平行的。
我們在后續(xù)的處理中,將會發(fā)現(xiàn)不平行的對極線會使得尋找對極點的運算變得復(fù)雜,我們期望的是, 如果每對對極線都是平行的,那將會大大減少后續(xù)算法的復(fù)雜度,特別是在求視差時,平行的對極線將會提供極大的便利。 理想的對極線對的效果如Fig 1.4所示。我們后續(xù)就討論如何才能從不平行的對極線轉(zhuǎn)換成平行的,也就是 圖像矯正(image rectification) 的具體操作。
Fig 1.4 上圖表示的是未經(jīng)過圖像矯正的對極線配對,我們發(fā)現(xiàn)其是不平行的。下圖是經(jīng)過圖像矯正的對極線配對,我們發(fā)現(xiàn)其平行了,這個效果正是我們所期望的。
圖像矯正
需要明確的是,進(jìn)行圖像矯正之前需要知道相機的內(nèi)參數(shù)和外參數(shù)[4]。
我們首先要知道,為什么我們的對極線對會不平行呢?如圖Fig 2.1所示,其不平行的原因是因為我們的成像平面沒有共面(coplanar),那么自然地,我們的直接做法就是矯正我們的成像平面,使得其共面,效果如圖Fig 2.2的黃色面所示。其總體效果,如Fig 2.3所示,我們可以發(fā)現(xiàn),通過這種手段,我們的對應(yīng)點的搜索空間進(jìn)一步縮小到了水平線上,只用一個水平線上的參數(shù)x xx表示其距離就可以描述對應(yīng)點了,這樣其實是大大減少了運算量的。
Fig 2.1 使得對極線不平行的根本原因是我們的不同攝像機的成像平面之間并不是共面的。
Fig 2.2 通過矯正成像平面到共面,我們可以使得對極線對平行。
Fig 2.3 通過矯正到(2)的情況,我們的搜索空間進(jìn)一步減少了。
我們后續(xù)具體分析這個矯正過程,我們要想怎么樣才能將成像平面矯正到共面呢?我們觀察圖Fig 2.4,我們延伸射線和
分別得到
,
,使得
,同時,我們確保
到平面
的距離相同,那么我們的平面
就是期望得到的矯正成像平面了。其實這個也不難理解,因為每個對極面都是經(jīng)過基線的,而基線平行于
,那么
在基線上的投影必然是平行于
的,同時,我們保證了兩個焦點到兩個平面的距離相同,確保了其是
的投影。
Fig 2.4 平行對極線(粉色)平行于基線(黑色OO'),而且焦點分別到其對應(yīng)的成像平面的距離相同。
我們?yōu)槭裁匆由线@個焦點到兩個矯正后的成像平面的距離相同這個約束呢?讓我們看一個例子。
在如圖Fig 2.5的系統(tǒng)中,我們假設(shè)兩個成像平面是共面的,其焦點之間的距離,兩個攝像頭之間不存在有旋轉(zhuǎn)關(guān)系,那么我們可以知道其相機參數(shù)為:、
從[1]中提到的對極約束的代數(shù)表達(dá)形式,我們有:
從中我們發(fā)現(xiàn),我們必須引入這個約束去約束成像平面的位置。
我們知道極點e 是本征矩陣的零空間向量,也就是說我們有,我們可以解出:
我們?nèi)绻麖凝R次坐標(biāo)的角度去看待那么我們知道其實這個時候極點是在無限遠(yuǎn)處了。(關(guān)于齊次坐標(biāo)系,見[2,3])
于是,其實矯正成像平面的后果就是,我們的極點被挪到了無限遠(yuǎn)處,這個和我們圖Fig 1.2的推論相同。
Fig 2.6 經(jīng)過矯正之后,圖像的極點被移到了無限遠(yuǎn)處。
我們到現(xiàn)在算是對圖像矯正有了直觀上的印象,接下來我們嘗試用算法去描述這個過程。圖像矯正算法主要分四步。
用旋轉(zhuǎn)矩陣旋轉(zhuǎn)左相機,使得左成像平面的極點到無限遠(yuǎn)處。
用和第一步相同的旋轉(zhuǎn)矩陣旋轉(zhuǎn)右相機。
用外參數(shù)中的旋轉(zhuǎn)繼續(xù)旋轉(zhuǎn)右相機。
對坐標(biāo)系調(diào)整尺度。
我們首先需要確定旋轉(zhuǎn)矩陣? 。為了確定這個矩陣,我們需要構(gòu)造一組彼此正交的單位向量
。我們一般選擇以其中一個焦點為原點構(gòu)建,選擇
作為一個基底,然后進(jìn)行單位化,我們有:
構(gòu)造則只有和
正交并且是單位向量這約束,因此比較任意,如:
容易定義:
因此旋轉(zhuǎn)矩陣為:
然后設(shè)置左右攝像機的旋轉(zhuǎn)矩陣
其中的R \mathbf{R}R是外參數(shù)的旋轉(zhuǎn)矩陣。
隨后進(jìn)行旋轉(zhuǎn)和調(diào)整坐標(biāo)系尺度,如:對于左相機的點 ,計算出
,隨后計算器調(diào)整后的坐標(biāo)系,最終有:
對于右相機,其操作相同。
最后的矯正結(jié)果展示如:
Reference
[1]. https://blog.csdn.net/LoseInVain/article/details/102665911
[2]. Hartley R, Zisserman A. Multiple View Geometry in Computer Vision[J]. Kybernetes, 2008, 30(9/10):1865 - 1872.
[3]. https://blog.csdn.net/LoseInVain/article/details/102756630
[4].https://blog.csdn.net/LoseInVain/article/details/102632940