1. 程式人生 > >從零開始一起學習SLAM | 不推公式,如何真正理解對極約束?

從零開始一起學習SLAM | 不推公式,如何真正理解對極約束?

 

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

小白:師兄,對極幾何這塊你覺得重要嗎?
師兄:當然重要啦,這個是多視角立體視覺的核心啊

小白:那師兄一定得幫幫我講清楚啊,最近在看書上這部分內容,感覺很難理解呢!
師兄:哪裡不理解?書上公式推導的挺詳細了都

小白:這麼說吧,公式推導我也能大概看懂,但總覺得不知道為啥這麼推導,這樣推導的物理意義是什麼?
師兄:哦哦,明白啦,就是不能轉化為直觀的理解方式吧

小白:是的,只能被動接受推導結果,但不能理解背後的原理,這種感覺好差。。
師兄:嗯,那我想想,怎麼給你講。。。說實話,你這個問題挺有意義的

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

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

左右兩個平行四邊形分別是相機在不同位置的成像平面
C0, C1分別是兩個位置中相機的光心,也就是針孔相機模型中的針孔
P是空間中的一個三維點,p0, p1分別是P點在不同成像平面上對應的畫素點

 


小白:嗯,這個圖見到很多次了,不過一直理解的不透徹
師兄:你看上面左側的圖,如果將點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 | 為什麼要用齊次座標?》裡講的叉乘的定義嗎?兩個向量的叉乘結果是一個同時垂直於這兩個向量的向量。
小白:記得呢,叉乘只在三維空間中有定義,比如兩個向量 a和b 的叉乘寫作 a x b,它是與向量 a, b都垂直的向量,其方向通過右手定則決定。

師兄:對,除了叉乘,還有點乘,a點乘b的定義是
a * b = ||a||* ||b|| *cos(θ)
因此如果兩個互相垂直的向量點乘,cos(θ) = 0,點乘結果也為0。
小白:師兄,這些我都記得呢!可是怎麼突然說這個呢,和對極幾何有什麼關係嗎?

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

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

 

你自己說說為什麼這個等式成立?
小白:我看看哈,額,根據叉乘的定義

 

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

 

結果就是0了。是吧,師兄?
師兄:完全正確,用到的都是我們前面剛剛講過的基礎知識~
小白:可是,師兄,叉乘不是僅在三維空間中有定義嗎?我們這裡的p0, p1都是影象上的二維點啊

師兄:這個問題問的好!確實如你所說,p0, p1都是影象上的二維點,不過,這裡我們會把它變成三維的方向向量來考慮
小白:啥是方向向量啊?

師兄:就是我們只考慮它的方向,而不考慮它的起點或終點的向量。我們假設一個歸一化的影象平面,該平面上焦距f =1 ,因此我們可以定義在以C0為原點的座標系下

 

而在以C1為原點的座標系下

 

小白:這樣定義可以嗎?
師兄:可以的,事實上,你在C0-C1-p0-p1組成的極平面上,保證

 

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

 

方向不變,在極平面上隨便移動,結論1中等式仍然都成立。
小白:確實是這樣,師兄,下一步怎麼辦?好像p0, p1不在同一個參考座標系裡?

師兄:是的,前面說過,p0在以C0為原點的參考座標系,p1在以C1為原點的參考座標系,所以我們還是需要轉換座標系。這裡我們把所有點的座標都轉換到以C0為原點的座標系。前面說過這些向量都是方向向量和向量起始位置無關,所以這裡座標系變換隻考慮旋轉就可以。我們記 R 為從C1座標系到C0座標系的旋轉矩陣
小白:那麼 Rp1 就是p1 在以C0為原點的C0座標系了
師兄:對的~現在再看看結論1

 


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

 

這個式子是根據對極幾何得到的,我們稱之為對極約束。
小白:哇塞,師兄,原來對極約束也可以這樣得到啊!我現在能完全理解啦!

如何得到極線方程?
師兄:對,這就是對極約束最直觀的解釋,一般把中間的部分拿出來,像下面這樣,記為本質矩陣或本徵矩陣(Essential Matrix)。

 

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

 

小白:厲害了師兄,這下徹底明白啦,不過之前提到的極線什麼的好像也沒說怎麼求啊?
師兄:其實根據上面結論3就可以求出極線方程啦!

小白:啊,怎麼求極線方程?
師兄:還記得我們在《從零開始一起學習SLAM | 為什麼要用齊次座標?》裡講過的點p在直線l上的充分必要條件就是 直線l 的係數與p的齊次座標p’的內積為0

 

小白:記得呢!那節課的習題我都認真做了,所以印象深刻!
師兄:不錯!那結論3我們就可以把Ep1看做是直線的方程,p0看做是直線上的點,也就是說Ep1就是以C0為原點座標系中的極線了。如下圖中紅色線條所示,就是極線啦,它的方程是E*p1。

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

師兄:嗯,相信以後你肯定不會忘記啦!
小白:師兄,我們去吃大餐慶祝一下吧!
師兄:走起~

師兄:等下,今天的作業還沒留呢!
小白:(我暈,師兄記性真好。。)

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

 

作業2:
題目:現有一個運動著的相機拍攝的連續兩張圖片,其中特徵點匹配部分已經完成。請根據兩幀影象對應的匹配點計算基礎矩陣,並利用該矩陣繪製出前10個特徵點對應的極線。
參考結果是這樣的:

 


師兄提醒:關注“計算機視覺life”微信公眾號,選單欄回覆“幾何”,就能下載程式碼框架啦!

原文連結:從零開始一起學習SLAM | 不推公式,如何真正理解對極約束?
相關閱讀
從零開始一起學習SLAM | 為什麼要學SLAM?
從零開始一起學習SLAM | 學習SLAM到底需要學什麼?
從零開始一起學習SLAM | SLAM有什麼用?
從零開始一起學習SLAM | C++新特性要不要學?
從零開始一起學習SLAM | 為什麼要用齊次座標?
從零開始一起學習SLAM | 三維空間剛體的旋轉
從零開始一起學習SLAM | 為啥需要李群與李代數?
從零開始一起學習SLAM | 相機成像模型
零基礎小白,如何入門計算機視覺?


---------------------
作者:electech6
來源:CSDN
原文:https://blog.csdn.net/electech6/article/details/83818218
版權宣告:本文為博主原創文章,轉載請附上博文連結!