01前言伯克利的馬毅教授在線上開展了為期 2 周的暑期課程,課程主講 3D視覺,課程涉及內容十分豐富,受限于版權原因可能不會公開,所有內容都可以在馬老師的?An invitation to 3D vision?一書中進行深入了解。本篇博客重點解讀 Two View Geometry 的部分內容,這也是馬老師重點強調的內容。其實這部分內容在大多數課程和教材中都有涉及,很多人可能也覺得很簡單,有一定的套路可言,但是如標題所說,你真的理解Two View Geometry嗎?筆者曾面試過 DJI 以及 Nreal 兩家很棒的公司,面試時都問到了這一部分,當時還覺得自己答得不錯,但是聽過馬老師的課程之后發現,其實我也并不是很了解 Two View Geometry。接下來我會依據馬老師的課件以及教材詳細介紹 Two View Geometry, 在這之后的下一篇博客我會介紹一篇 CVPR 2021 的工作 Deep Two-View Structure-from-Motion Revisited,下面進入正式內容。02Traditional Two View Geometry下面這張圖是一個 Geometric Vision 的簡略回顧:
大致歷程是:從雙視圖,到三視圖四視圖,再到統一的多視圖。內容我們只涉及雙視圖的,按照書中的標題來說就是:Reconstruction from Two Calibrated Views. 所要做的事情就是,給定兩張同一場景不同視角下拍攝到的圖像,恢復出相機的位姿以及場景的結構。
我們假設先前的預備工作已經準備充分,相機已經標定完成,correspondence 也已經匹配完成,那么不失一般性的可以用下面這個等式來進行表述:
這里
分別表示視角1以及視角2下,對空間中同一個點的觀測,這里是使用歸一化平面坐標進行表達,
表示
對應的深度值,
表示從視角 1 到視角 2 的 Rigid Body Motion。所謂恢復 motion 以及 structure 就是計算深度
以及變換
。(1)式在有多次觀測時,
是一直變化的,而相機運動
卻是始終不變的,為了追求統一,雖然說法有些哲學(玄學),但是道理就是這么個道理,我們需要同時叉乘T,消去場景結構帶來的影響,然后就得到了著名的Epipolar Geometry:
我們把
這個矩陣用
表示,并稱之為Essential matrix. 這是Longuet-Higgins 在 1981 年發現的,感謝前人貢獻。正如推導過程所闡述的,(2)式只與相機的運動有關, right?并且因為(2)式右邊為0,說明這是一個齊次等式,乘以任意的常數依然正確,而
是觀測,
,因此常數只能給
,這也符合我們的常識,即單目相機沒有辦法恢復尺度。但是沒有關系,we only care about the direction!對極幾何還表達了一個重要的屬性就是3點共面,
表示了這個平面的法向量,right?所以在什么情況下,法向量與
點乘為0呢?只能是共面。可以看到,代數與幾何是統一的,你甚至可以直接根據幾何寫出(2)式。對極幾何的表達十分簡潔,并且有許多有趣的性質:
我們來稍加解讀。按照上面的說法,對極幾何其實表達的是三點共面,
三個點會形成一個三角形,從而確定一個平面,不論空間點
怎么變,
這條邊是不變的。在幾何層面,線和面不平行就會產生交點,我們稱成像平面與
的交點為
Epipoles:
類似的你可以了解 Epipolar line 的定義。具體的性質可以參考馬老師的書,這里我簡單描述一下,
是極線,但是我們選擇用三角形平面的法向量去描述極線,因為法向量確定了極線就唯一確定了。剩下的挨個理一下就通了。接下來難度會提升一些。對極幾何很美,如何解呢?這個方程是 homo- geneous 的,因此E的自由度為最多為 8,事實上我們知道實際自由度是 5(旋轉矩陣的自由度為 3,不考慮尺度因素,平移向量的自由度為 2),但是暫且不考慮這個。因此如果給定8對 correspondence(這里我們不考慮共線共面以及其他的corner case),至少E可以解出。接下來會面對兩個問題:1.
怎么解呢?2.假設你知道怎么解出
,而實際應用中,我們的correspondence都是很noise的,這樣得到的解也是帶噪聲的,那么如何把噪聲去掉,得到一個干干凈凈的Essential Matrix呢?帶著這些問題繼續往下走。我們通過8個點對,解出的矩陣記作
,首先有一點你要了解,不是任何3×3的矩陣都能分解為
這種形式的,
的自由度是6,如果upto scale的話,自由度則是5,并且包含一個
的旋轉矩陣部分,因此
也是一個 special group,有其對應的空間(essential space),或者說 5 維的流形上(essential manifold),當有噪聲時,得到的解
會在這個空間外。為了便于表達,我們引入 normalized essential matrix 來消除尺度的干擾:
在后文我們提到的
不特殊說明都指的是normalized essential matrix.我們希望能在 essential space 中找到一個距離F最“近”的解,然后將F投影到這個解上,如下圖所示:
在說明怎樣投影前,我們需要先給出三個定理:
定理一描述了一個矩陣為 Essential Matrix 的充要條件。
定理二描述了如何從 Essential Matrix 恢復到旋轉矩陣以及平移方向向量。這里需要注意的是,normalized essential matrix 可以消除尺度的干擾,但是不能消除符號的干擾,代數角度而言,E 和?E 都滿足Epipolar Constraint,因此實際我們能得到四組解。
定理三給出了投影的方法,我們選擇F-norm作為投影距離的度量指標。這里需要注意的是,
的SVD分解得到的
只滿足正交性,不能滿足行列式為+1的條件,當得到的
行列式為?1時,我們會對其取負,在后面我們會用代碼具體解釋。以上三個定理在馬老師的書里都有詳細證明,出于易讀性的考慮后續會單獨的整理到我的知乎上分享。在有了這三個定理之后,整個算法也就明朗了,流程如下:
以上就是著名的八點法,你可以在許多資料上看到這個過程,本文的主要目的是梳理八點法的一些思路。我們引用一段 colmap 中的源碼來解讀上述過程:
取
的最后一行可以留給讀者作為一個思考題,提示是
,然后分析一下矩陣的秩。八點法十分簡潔(當然證明過程比較復雜),但是在實際使用過程中,還是會遇到許多問題的,我們在以下簡要列舉:1. Number of points. 由于 Normalized Essential Matrix 的自由度為 5,在比較 general 的情況下,最少選取的 correspondence 點對為 5(Kruppa在 1913 年的時候給出了五點法,類似八點法會產生 4 個滿足對極約束的解,五點法會產生 10個解),因此選取多少點是一個需要實際使用中考慮的問題。2. Number of solutions and positive depth constraint.雖然八點法給出了四對解,但是實際上只有一個正確解,那么其他三個解怎么排除呢?首先從代數層面,不要忘了最原始的表達式
,在這個表達式中隱藏了一個很關鍵的約束,深度值應該為正,至于怎么求深度值是三角化部分的知識了,我們不在這里討論,如果你對上述過程熟悉,不難發現就是一個叉乘的技巧。基于這一約束我們可以將正確的解篩選出來。而從幾何層面來看,就是下面這張圖(From Multiple View Geometry in Computer Vision):
3. Structure requirement: general position.當觀測到的空間點滿足某些導致退化的條件時(called critical surfaces),使用八點法會遇到解不唯一的情況。一個典型的例子就是觀測點共面的情況,這種時候我們需要使用homography 來解決。4. Motion requirement: su?icient parallax.也就是說,平移量不能為0(為0時也要使用 homography)。需要十分小心的是,在沒有平移移動且匹配十分 noise 的時候,八點法依舊會得到一個很奇怪的平移部分的解,而這個解是毫無意義的。5. Multiple motion hypotheses.運動物體場景,這又是另一個問題了。03結語Essential Matrix 之所以叫 Essential Matrix,就是因為它太重要了, 馬老師花了4節課的時間,介紹two view geometry的內容, 可見其重要性。目前學術的研究主要在于recognition的問題了,也有許多工作還是聚焦在end to end的執著,當然這只是我個人的一些粗淺的看法。審核編輯 :李倩
![9d07d10a-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv6AbTZvAAPU0VyWH2s483.png)
![9d1f9100-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv6AZc-PAAd1-j6uEWQ032.png)
![9d2bd438-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv6ABznSAAAZjIio4vo249.png)
![9d32f3da-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv6AVLT6AAARZtUmfYI959.png)
![9d392fca-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AHNGfAAADqPof3dQ927.png)
![9d32f3da-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv6AVLT6AAARZtUmfYI959.png)
![9d45986e-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AWqbWAAAD5F2lPJc061.png)
![9d392fca-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AHNGfAAADqPof3dQ927.png)
![9d45986e-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AWqbWAAAD5F2lPJc061.png)
![9d392fca-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AHNGfAAADqPof3dQ927.png)
![9d45986e-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AWqbWAAAD5F2lPJc061.png)
![9d63c6b8-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AKvKxAAAajUR3a4I918.png)
![9d6c1c0a-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-Ad4N8AAADe55UM7s965.png)
![9d799d80-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AEgZ1AAATgAtMaDI959.png)
![9d32f3da-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv6AVLT6AAARZtUmfYI959.png)
![9d88b734-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AcCIYAAAWeYyA4eE899.png)
![9d92a8fc-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AOOhWAAAB74ySRrM949.png)
![9d9b29a0-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AcoyEAAAFEZrOLok580.png)
![9da78e3e-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwCAKVVVAAACc61XKXA492.png)
![9db05848-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwCAfye3AAGwwlSzdUE373.png)
![9dbe6366-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwCAbY1fAAASBEoyntc052.png)
![9dc4b748-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwCAIFZMAAAB8020RnQ200.png)
![9dcd1ee2-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwCAKl1GAAADa5itOMY066.png)
![9dcd1ee2-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwCAKl1GAAADa5itOMY066.png)
![9de0c51e-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwCAQyfCAAAROAoV76c735.png)
![9de8bc4c-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwCAeKVAAAD_ARmvlq0771.png)
![9df04c78-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwCAQZnvAAARKHt1V4k513.png)
![9d45986e-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AWqbWAAAD5F2lPJc061.png)
![9d45986e-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-AWqbWAAAD5F2lPJc061.png)
![9e0441ce-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwGAWsaBAAACD7LJRtE335.png)
![9d6c1c0a-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-Ad4N8AAADe55UM7s965.png)
![9d6c1c0a-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-Ad4N8AAADe55UM7s965.png)
![9e19ef6a-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwGAPz3gAAAFv11aJtM153.png)
![9d6c1c0a-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjv-Ad4N8AAADe55UM7s965.png)
![9e0441ce-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwGAWsaBAAACD7LJRtE335.png)
![9e312e28-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwGASfZdAAAXASfgKdE446.png)
![9e3ba5ba-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwGAKQajAAACJ1vxB5U417.png)
![9e455222-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwGAOlP6AAChHS3uW2g489.png)
![9e5c238a-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwGAGCsCAAD1REGn7iY203.png)
![9e737a58-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwGAHFFYAADQCdtuCH0452.png)
![9e7bc3c0-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E2/wKgZomTnjwGANpB8AAEkM5glJeI084.png)
![9e97db78-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E3/wKgZomTnjwKALdz5AAACA42-H-g830.png)
![9ea275c4-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E3/wKgZomTnjwKAFdgIAAAD2iBzm_8332.png)
![9eafd67e-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E3/wKgZomTnjwKAWg_PAAADU32bF18239.png)
![9ebf1058-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E3/wKgZomTnjwKABNtDAAbNE95tp3Y369.png)
voidDecomposeEssentialMatrix(
const Eigen : : Matrix3d& E, Eigen : : Matrix3d? R1,
Eigen : : Matrix3d? R2, Eigen : : Vector3d? t )
{
// 根據對極約束得到的帶噪聲的E做SVD分解
Eigen::JacobiSVD svd(
E, Eigen : : ComputeFullU | Eigen : : ComputeFullV ) ;
Eigen::Matrix3d U = svd.matrixU();
Eigen::Matrix3d V = svd.matrixV().transpose();
// 保證行列式符號為正
if (U.determinant() < 0) {
U ?= ?1;
}
if (V.determinant() < 0) {
V ?= ?1;
}
Eigen : : Matrix3d W;
W<< 0, 1, 0, ?1, 0, 0, 0, 0, 1;
?R1 = U ? W ? V;
?R2=U?W.transpose() ?V;
?t = U. col (2). normalized ();
}
void PoseFromEssentialMatrix ( const Eigen : : Matrix3d& E,
const std : : vector& points1 ,
const std : : vector& points2 ,
Eigen : : Matrix3d? R, Eigen : : Vector3d? t ,
std : : vector? points3D ) { 7
CHECK_EQ(points1 . size () , points2 . size ());
Eigen::Matrix3d R1;
Eigen::Matrix3d R2;
DecomposeEssentialMatrix(E, &R1, &R2, t );
// Generate all possible projection matrix combinations.
const std : : array R_cmbs{{R1, R2, R1, R2}};
const std : : array t_cmbs{{?t , ?t , ??t , ??t }};
...
}
這里為什么![9ecf20e2-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E3/wKgZomTnjwKAOuYxAAABhhcf0j4651.png)
![9ed9d942-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E3/wKgZomTnjwKAaxOBAAACK1P3ChE903.png)
![9ee67ef4-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E3/wKgZomTnjwOAREc2AAARoNyRu_o395.png)
![9eee5912-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E3/wKgZomTnjwOAXjkLAAAV7t_KLyc540.png)
![9ef3edbe-de57-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/E3/wKgZomTnjwOAN2rAAADciDtfLTQ738.png)
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
相機
+關注
關注
4文章
1369瀏覽量
53914 -
3D視覺
+關注
關注
4文章
435瀏覽量
27626 -
視圖
+關注
關注
0文章
140瀏覽量
6616
原文標題:雙視圖幾何:你真的理解嗎?
文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
如何通俗理解視覺定位?帶你看懂對極幾何與基本矩陣
本文為大家介紹對極幾何與基本矩陣這兩個視覺定位原理。對極幾何提到對極幾何,一定是對二幅圖像而言,對極幾何實際上是“兩幅圖像之間的對極幾何”,
發表于 06-01 08:00
你真的懂Word嗎
在日常辦公當中, Word文檔就是我們最常用的軟件之一。用它我們寫論文、寫方案、寫小說等等。但是,你真的懂Word嗎?其實,Word軟件背后,還有一大批隱藏技能你不知道。掌握他們,你將
發表于 01-12 08:22
如何才能看懂電子元器件規格書里的三視圖
電子元器件規格書里的三視圖,或者電子零件規格書里的三視圖其實是三視圖里面最簡單不過的三視圖,我們還是要了解一些三視圖的基本概念,這樣對我們更
發表于 11-09 15:27
?3.5w次閱讀
多表物化視圖的需求分析及實現應用設計
要了解物化視圖可以先了解視圖的概念。視圖是一個虛擬表(也可以認為是一條語句),基于它創建時指定的查詢語句返回的結果集。而物化視圖則是將這個虛擬表進行實體化,其本身可以
基于幾何變換器的2D-to-BEV視圖轉換學習
BEV感知是自動駕駛的重要趨勢。常規的自動駕駛算法方法基于在前視圖或透視圖中執行檢測、分割、跟蹤,而在BEV中可表示周圍場景,相對而言更加直觀,并且在BEV中表示目標對于后續模塊最為理想。
發表于 06-06 17:47
?1802次閱讀
![基于<b class='flag-5'>幾何</b>變換器的2D-to-BEV<b class='flag-5'>視圖</b>轉換學習](https://file1.elecfans.com/web2/M00/89/43/wKgaomR_AJ2ANkz2AADfbzHkimA840.jpg)
評論