天天看點

最詳細的雙目攝像頭測距離(深度)的原理

關于雙目攝像頭測距原理,最近在看關于雙目錄影機成像的項目,找關于雙目攝像頭标定的c++代碼,但是發現自己對雙目錄影機的成像原理不清楚,是以看代碼和看天書一樣。這篇就寫給零基礎接觸雙目錄影機成像原理的小夥伴,等看完這篇之後再去找類似的c++、python标定代碼,就簡單很多。

當然,之後也會介紹,關于幾個坐标系(世界坐标系、像素坐标系、圖檔坐标系)的轉化。

**視差的概念:**是指從兩個不同位置觀察同一個物體時,此物體在視野中的位置變化與差異。從兩個觀察點看目标,兩條視線之間的夾角叫做這兩個點的視差角,兩點之間的距離稱作視差基線。

為什麼單目錄影機不能測深度?

下圖從實體原理上展示了為什麼單目相機不能測量深度值而雙目可以。我們看到紅色線條上三個不同遠近的黑色的點在下方相機上投影在同一個位置,是以單目相機無法分辨成的像到底是遠的那個還是近的那個。

最詳細的雙目攝像頭測距離(深度)的原理

雙目立體視覺深度相機測距流程:

(1)需要對雙目相機進行标定,得到兩個相機的内外參數、單應矩陣。

(2) 根據标定結果對原始圖像進行校正,校正後的兩張圖像位于同一平面且互相平行。

(3)對校正後的兩張圖像進行像素點比對。

(4)根據比對結果計算每個像素的深度,進而獲得深度圖

理想雙目相機成像模型:

首先我們從理想的情況開始分析:假設左右兩個相機位于同一平面(光軸平行),且相機參數(焦距f)一緻。那麼深度值的推到原理和公式如下:

最詳細的雙目攝像頭測距離(深度)的原理

根據上述推導,空間點p離相機的距離(深度)z=f*b/d,可以發現如果要計算深度z,必須要知道:

(1)相機焦距f,左右相機基線b。這些參數可以通過先驗資訊或者相機标定得到。

(2)視差b。需要知道左相機的每個像素點(Xl, Yl)和右相機中對應點(Xr,Yr)的對應關系。這是雙目視覺的核心問題。

極限限制

那麼問題來了,對于左圖中的一個像素點,如何确定該點在右圖中的位置,可以通過極限限制。

什麼是極線呢?如下圖所示,C1,C2是兩個相機,p是空間中一點,P和兩個相機中心點C1、C2形成了三維空間中的一個平面PC1C2,稱為極平面。極平面和兩幅圖像相交于兩條直線,這兩條直線為極線。p在相機C1中的成像點是P1,在相機C2中的成像點是P2,但p的位置事先是未知的。

我們的目标是:對于左圖中的P1點,尋找它在右圖中的對應點P2,這樣就能确定P點的空間位置,也就是我們想要的空間物體和相機的距離。

所謂極線限制,就是指當同一個空間點在兩幅圖像上分别成像時,已知左圖投影點P1,那麼對應右圖投影點P2一定在相對于P1的極線上,這樣可以極大的縮小比對範圍。

最詳細的雙目攝像頭測距離(深度)的原理

細心的朋友會發現上述過程考慮的情況(兩相機共面且光軸平行,參數相同)非常理想,相機C1、C2如果不在同一直線上怎麼辦?

非理想雙目相機成像模型

事實上,這種情況非常常見,因為有些場景下兩個相機需要獨立固定,很難保證光心C1、C2完全水準,即使是固定在同一基闆上也會因為裝配的原因導緻光心不水準。

最詳細的雙目攝像頭測距離(深度)的原理

有辦法喲!

最詳細的雙目攝像頭測距離(深度)的原理

我們先來看看這種情況下拍攝的兩張左右圖檔,左圖中三個十字标志的點,在右圖中對應的極線是右圖中的三條白線,也就是對應的搜尋區域。我們看到這三條線并不是水準的,如果進行逐點搜尋效率非常低。

怎麼辦呢?

把不理想的轉化為理想情況就好了。這就是圖像矯正技術。

圖像校正技術是通過分别對兩張圖檔用單應矩陣變換得到的,目的就是把兩個不同方向的圖下個平面重新投影到同一平面且光周互相平行,下圖中的黃色平面,這樣就可以用前面理想情況下的模型了,兩個相機的極線也變成水準的了。

最詳細的雙目攝像頭測距離(深度)的原理
最詳細的雙目攝像頭測距離(深度)的原理

經過校正後,從上圖中我們可以看到越近的物體視差越小,越近的物體視差越大,和我們的常識一緻。

上面講到的對于左圖的一個點,沿着它在右圖水準極線方向尋找和它最比對的像素點,說起來簡單,但實際操作起來并不容易。

(1)實際上要保證兩個相機完全共面且參數一緻是非常困難的,而且在計算中會産生誤差積累,是以對于左圖中的一個點,其右圖的對應點不一定恰好在極線上。應該是在極線附近,是以搜尋範圍需要适當放寬。

(2)單個像素點進行比較魯棒性很差,很容易受到光照變化和視角不同的影響。

(3)基于滑動視窗的圖像比對

上述問題的解決辦法是:使用滑動視窗。對于左圖中一個像素點(左圖中的紅色方框中心),在右圖中從左到右用一個尺寸滑動視窗内的像素和它計算相似程度,相似度的度量有很多方法,比如誤差平方法,ssd。ssd越小的位置對應的像素點就是最佳比對結果。

最詳細的雙目攝像頭測距離(深度)的原理

具體操作中還有很多實際問題,比如滑動視窗的尺寸。

基于能量優化的圖像比對

目前比較主流的方法都是基于能量優化的方法來實作比對。能量優化通常會定義一個能量函數。比如對于兩張圖中像素點的比對問題來說,我們定義的能量函數如下圖公式1.

(1)在左圖中所有的像素點和右圖中對應的像素點越近似越好,反映在圖像裡就是灰階值越接近越好,也就是下圖公式2的描述。

(2)在 同一張圖檔裡,兩個相鄰的像素點視差(深度值)也應該相近。也就是下圖公式3的描述。

最詳細的雙目攝像頭測距離(深度)的原理

上述公式1代表的能量函數就是著名的馬爾科夫随機場(Markov Random Field)模型。通過對能量函數最小化,我們最後得到了一個最佳的比對結果。有了左右圖的每個像素的比對結果,根據前面的深度計算公式就可以得到每個像素點的深度值,最終得到一幅深度圖。

原文轉自:https://zhuanlan.zhihu.com/p/32199990