作者:Tengfei Jiang
https://zhuanlan.zhihu.com/p/81016834
本文已由原作者授權,不得擅自二次轉載
人依靠兩隻眼睛判斷深度(物體離眼睛的距離),具體是如何來判斷的呢,我們從小到大似乎並未接受過深度計算的訓練。視差(Disparity)是解釋原理的基本概念之一。我們可以做個簡單的實驗,將手指置於雙目之間,分別開閉左右眼。怎麼樣,是不是發現手指不在同一個位置?這就是視差。
可以參考上圖,當左右相機同時觀察三維點時,該點分別投影在左右相機的相平面上,這兩個投影點之間的差異就是視差:d=Xleft-Xright。這個公式看起來簡單直觀,其實有不少未解釋清楚的地方,比如這兩個x是在同一個坐標系內麼,這兩個像平面一定是平行擺放的嗎,為什麼可以直接減?等等。要解釋清楚這些問題,上圖還是略簡陋,讓我們換張圖來解釋。
從公式可以看出,視差 d和深度z成反比關係。視差越大,可以探測的深度越小。b是兩個相機光心的距離,又叫基線(baseline),f是相機的焦距。f、b與深度均成正比關係。
立體匹配從上一節可以看到,如果要計算深度,我們需要知道視差、基線、焦距。另外注意,上文的推導是基於理想模型,比如不考慮相機的畸變,不考慮雙相機光軸不平行的情況。
在視差計算之前,我們首先給定了兩個投影點。但實際應用中,我們並不知道左右相機中哪兩個點是對應點。查找對應點是雙目立體視覺中非常核心的步驟,可以毫不誇張地說,大部分的結構光重建方案解決的都是如何準確快速地匹配對應點。在介紹具體方案之前,有些通用的背景知識稍微鋪墊一下。
對極幾何(Epipolar Geometry)是一個內容非常豐富的範疇(本文不想鋪展太多,只是選擇幾個概念簡單描述,詳細內容可以參考《計算機視覺中的多視圖幾何》一書)。對極幾何描述的是三維點與兩個相機相平面之間的特殊幾何關係,我們先看下圖的模型。
其中C0、C1為兩個相機中心,P為空間中一點,P在C0、C1對應像平面上的投影分別為X0、X1。C0、C1連線與像平面的交點e0、e1稱為極點(Epipoles),l0、l1稱為極線(Epipolar Lines),C0、C1、P三點組成的平面稱為極平面(Epipolar Plane)。
這個模型有個有趣的性質。當三維點P沿著方向接近左相機時,我們發現其在左相機上的投影點X0並不會移動,但是其在右相機相平面上的投影點x1發生了變化,其移動軌跡一定是沿著極線l1。反過來,假設我們並不知道P點坐標,只知道X0是其在左相機上的投影,要尋找其在右相機相平面中的投影,則只需要沿著極線l1搜索即可。這個性質使得對應點匹配的搜索空間直接從2維降低到1維。
聰明的同學看到這肯定會問了,沒有P點怎麼知道極線在哪,這不是因果不分麼?事實上極線的位置僅和X0以及相機的內外參有關,和P點位置無關。這就引出了接下來的約束。在對極幾何中有個非常著名的約束---對極約束(Epipolar Constraint)形式化地描述了對應點 X0、X1之間的幾何關係:
其中F是基礎矩陣(Fundamental Matrix)。這個式子是如此簡潔,以至於忍不住想要推導一番,推導過程見附錄1。
極線矯正 對極約束描述了對應點匹配可沿極線搜索。在實際應用中,兩個相機擺放一定是不平行的,因而相平面中的極線大概率是條斜線,這就給搜索過程帶來了不便,為了簡化過程,還需要引入額外的極線矯正步驟,使得兩相機的極線共線且平行於相平面的X 軸。矯正前後的效果如下面兩張圖所示,應該比較直觀。
對應點查找經過上述處理後,要生成視差圖,最核心的步驟就是在相平面的同一行上,查找對應點了。查找的方法有多種,大體上可以分成兩類。
(1)提取圖像特徵該類方法可以對每張圖像單獨進行分析,提取「特徵」。這裡特徵可以有不同的表示方法,如邊緣、角點等,也可能來自其他主動投射的結構光信息,如正弦條紋相位值、編碼值等,通過在雙目圖像之間查找相同(相似)特徵來確定對應點。
(2)使用相關關係 該類方法假設對應點小領域內有相似的亮度模式,因而可以用兩者的相關關係來定位。為了增加額外的亮度變化信息,通常會通過主動光源投射隨機散斑這類圖案。
具體的結構光重建原理會在後續文章中展開討論。
參考對極約束證明:
上述內容,如有侵犯版權,請聯繫作者,會自行刪文。
交流群
歡迎加入我們公眾號讀者群一起和同行交流,目前有3D視覺、深度學習、雷射SLAM、VSLAM、三維重建、點雲後處理、圖像處理、手眼標定、自動駕駛、位姿估計等微信群,請掃描下面微信號加群,備註:」研究方向+學校/公司+暱稱「,例如:」3D視覺 + 上海交大 + 靜靜「。請按照格式備註,否則不予通過。添加成功後會根據研究方向邀請進去相關微信群。
知識星球
學習3D視覺核心技術,掃描查看詳情,3天內無條件退款
圈裡有高質量教程資料、可答疑解惑、助你高效解決問題