天天看點

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

自從小白向師兄學習了李群李代數和相機成像模型的基本原理後,感覺書上的内容沒那麼難了,公式推導也能推得動了,感覺進步神速,不過最近小白在學習對極幾何,貌似又遇到了麻煩。。。

小白:師兄,對極幾何這塊你覺得重要嗎?

師兄:當然重要啦,這個是多視角立體視覺的核心啊

小白:那師兄一定得幫幫我講清楚啊,最近在看書上這部分内容,感覺很難了解呢!

師兄:哪裡不了解?書上公式推導的挺詳細了都

小白:這麼說吧,公式推導我也能大概看懂,但總覺得不知道為啥這麼推導,這樣推導的實體意義是什麼?

師兄:哦哦,明白啦,就是不能轉化為直覺的了解方式吧

小白:是的,隻能被動接受推導結果,但不能了解背後的原理,這種感覺好差。。

師兄:嗯,那我想想,怎麼給你講。。。說實話,你這個問題挺有意義的

小白:太好啦!開講吧師兄,小闆凳我都搬好啦,瓜子花生都準備好啦

對極幾何基本概念

師兄:好。那我就從幾何意義的角度來推導一下對極幾何中的對極限制吧。先看下面這個圖,很熟悉吧,對極限制中很常見的圖。它表示的是一個運動的相機在兩個不同位置的成像,其中:

左右兩個平行四邊形分别是相機在不同位置的成像平面

C0, C1分别是兩個位置中相機的光心,也就是針孔相機模型中的針孔

P是空間中的一個三維點,p0, p1分别是P點在不同成像平面上對應的像素點

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

小白:嗯,這個圖見到很多次了,不過一直了解的不透徹

師兄:你看上面左側的圖,如果将點P沿着C0-p0所在的直線移動,你會發現P在左邊相機的成像一直不變,都是p0,這時候P在右邊相機的成像點p1是一直在變化的

小白:對,好像是沿着右邊那條紅色的線滑動

師兄:嗯,你看C0-C1-P-p0-p1他們都是在同一個平面上的,你可以想象C0-C1-P組成的平面是一個三角尺,它所在的平面稱之為極平面(epipolar plane),它像一把鋒利的刀,切割了左右兩個成像平面

小白:哇塞,這樣感覺直覺多了

師兄:嗯,其中和成像平面相交的直線稱之為極線(epipolar line),兩個光心C0, C1和成像平面的交點叫做極點(epipole)。

小白:師兄,好多新的術語啊,都要記嗎?

師兄:不用死記,知道是哪個就行了。我們重點來說說極平面,你看下面這個圖,C0-C1-P-p0-p1他們是不是都是在極平面上?

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

小白:嗯,是的,它們都是共面的。

不推公式,如何了解對極限制?

師兄:還記得我們在《

從零開始一起學習SLAM | 為什麼要用齊次坐标?

》裡講的叉乘的定義嗎?兩個向量的叉乘結果是一個同時垂直于這兩個向量的向量。

小白:記得呢,叉乘隻在三維空間中有定義,比如兩個向量 a和b 的叉乘寫作 a x b,它是與向量 a, b都垂直的向量,其方向通過右手定則決定。

師兄:對,除了叉乘,還有點乘,a點乘b的定義是

a * b = ||a||* ||b|| *cos(θ)

是以如果兩個互相垂直的向量點乘,cos(θ) = 0,點乘結果也為0。

小白:師兄,這些我都記得呢!可是怎麼突然說這個呢,和對極幾何有什麼關系嗎?

師兄:當然有關系!剛剛你說了點乘和叉乘的特點,現在我們把極平面中C0-C1-p0-p1單拎出來,看下面的圖

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

我們能夠得到下面的 結論1:

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

你自己說說為什麼這個等式成立?

小白:我看看哈,額,根據叉乘的定義

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

的結果是一個同時垂直于它們的向量,也就是說垂直于C0-C1-p0-p1組成的極平面,是以這個叉乘的結果再點乘

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

結果就是0了。是吧,師兄?

師兄:完全正确,用到的都是我們前面剛剛講過的基礎知識~

小白:可是,師兄,叉乘不是僅在三維空間中有定義嗎?我們這裡的p0, p1都是圖像上的二維點啊

師兄:這個問題問的好!确實如你所說,p0, p1都是圖像上的二維點,不過,這裡我們會把它變成三維的方向向量來考慮

小白:啥是方向向量啊?

師兄:就是我們隻考慮它的方向,而不考慮它的起點或終點的向量。我們假設一個歸一化的圖像平面,該平面上焦距f =1 ,是以我們可以定義在以C0為原點的坐标系下

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

而在以C1為原點的坐标系下

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

小白:這樣定義可以嗎?

師兄:可以的,事實上,你在C0-C1-p0-p1組成的極平面上,保證

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

的方向不變,在極平面上随便移動,結論1中等式都成立。同樣的道理,在極平面上,保證

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

方向不變,在極平面上随便移動,結論1中等式仍然都成立。

小白:确實是這樣,師兄,下一步怎麼辦?好像p0, p1不在同一個參考坐标系裡?

師兄:是的,前面說過,p0在以C0為原點的參考坐标系,p1在以C1為原點的參考坐标系,是以我們還是需要轉換坐标系。這裡我們把所有點的坐标都轉換到以C0為原點的坐标系。前面說過這些向量都是方向向量和向量起始位置無關,是以這裡坐标系變換隻考慮旋轉就可以。我們記 R 為從C1坐标系到C0坐标系的旋轉矩陣

小白:那麼 Rp1 就是p1 在以C0為原點的C0坐标系了

師兄:對的~現在再看看結論1:

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

最左邊向量C0-p0就可以用p0表示,向量C0-C1就是光心C1相對于C0的平移,我們記為t, 向量C1-p1根據前面的讨論,可以用 Rp1 來表示,那麼結論1可以表示為以下的結論2:

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

這個式子是根據對極幾何得到的,我們稱之為對極限制。

小白:哇塞,師兄,原來對極限制也可以這樣得到啊!我現在能完全了解啦!

如何得到極線方程?

師兄:對,這就是對極限制最直覺的解釋,一般把中間的部分拿出來,像下面這樣,記為本質矩陣或本征矩陣(Essential Matrix)。

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

然後我們就得到了如下的結論3:

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

小白:厲害了師兄,這下徹底明白啦,不過之前提到的極線什麼的好像也沒說怎麼求啊?

師兄:其實根據上面結論3就可以求出極線方程啦!

小白:啊,怎麼求極線方程?

》裡講過的

點p在直線l上的充分必要條件就是 直線l 的系數與p的齊次坐标p'的内積為0

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

小白:記得呢!那節課的習題我都認真做了,是以印象深刻!

師兄:不錯!那結論3我們就可以把E*p1看做是直線的方程,p0看做是直線上的點,也就是說E*p1就是以C0為原點坐标系中的極線了。如下圖中紅色線條所示,就是極線啦,它的方程是E*p1。

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

小白:原來如此,看來以前的基礎很重要啊!哪裡都能用上。謝謝師兄,今天沒有推導公式,我竟然能夠得到極線限制的式子,太神奇了,而且印象很深刻!

師兄:嗯,相信以後你肯定不會忘記啦!

小白:師兄,我們去吃大餐慶祝一下吧!

師兄:走起~

師兄:等下,今天的作業還沒留呢!

小白:(我暈,師兄記性真好。。)

作業

作業1:

證明:對三維列向量下面等式恒成立。其中等式左邊 X 表示叉乘,等式右邊上三角符号表示反對稱矩陣。

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

作業2:

題目:現有一個運動着的相機拍攝的連續兩張圖檔,其中特征點比對部分已經完成。請根據兩幀圖像對應的比對點計算基礎矩陣,并利用該矩陣繪制出前10個特征點對應的極線。

參考結果是這樣的:

從零開始一起學習SLAM | 不推公式,如何真正了解對極限制?

原文釋出時間為:2018-11-6

本文作者:electech6

本文來自雲栖社群合作夥伴“

計算機視覺life

”,了解相關資訊可以關注“

”。

繼續閱讀