1. 程式人生 > >OpenCV 立體視覺詳細解析(二)---視覺深度測量

OpenCV 立體視覺詳細解析(二)---視覺深度測量

先給出求視覺深度的演算法流程圖:

攝像頭標定:

攝像機標定的過程得出攝像機幾何模型,給出透鏡的畸變模型,這兩個模型定義了攝像機的內參數模型。

攝像機幾何模型:

針孔模型:

Learning Opencv中的此環節各種名詞的定義很混亂,在下面做一個統一)

成像平面:針孔平面。

影象平面:投影平面。

光軸:穿過針孔,與針孔平面垂直的直線。

焦距:針孔到影象平面距離。

針孔:投影中心。

主點:光軸與影象平面的焦點。

Z:針孔到物體的距離。

成像儀的中心:晶片感光陣列的中心點,圖片的畫素中心點。

由三角形相似

這個公式顯示的影象是倒立的,為了便於計算,將針孔模型轉化為計算模型,具體做法是交換影象平面與成像平面。

計算模型



若光軸與成像儀的交點剛好是影象平面的主點。那麼得到的公式是:

                

但是這種情況在實際中幾乎是不可能的。因此引入兩個新的引數CxCy,對可能的偏移進行建模。

最終得到的公式是:

方法1Learning Opencv的第11

利用函式cvCalibrateCamera2()

方法2Learning Opencv的第12

利用函式cvStereoRectify();

求視覺深度,首先必須得看懂這個圖

CxleftCxright:像平面的像主點

OlOr:投影中心,針孔模型中的針孔。

T:投影中心間距

f:兩個攝像頭的焦距

d:兩幅影象的視差

由三角形相似


由該公式可以看出,將求視覺深度轉化為求兩幅影象的視差。

然而在實際情況中,兩個攝像頭不可能嚴格地向前平行對準,當攝像頭不向前平行對準時,會出現一個新的感興趣點,稱之為極點。(eler)。

實際點P與兩個極點構成的面,稱為極面。

實際點P在投影面上的投影點稱為,投影點,投影點與極點的連線稱為極線。

該圖呈現的便是立體成像的基本幾何學:對極幾何。

每一個物理世界的3D點,都對應一個極面,兩條極線。由對極幾何的定義可知,pl的匹配檢視pr,一定在對應的極線上。於是便可以將二維收索轉化為在沿著極線的一維搜尋。

對極幾何的意義在於,減少特徵匹配的計算量,並且排除虛假匹配的點。

立體標定:計算空間上兩臺攝像機幾何關係的過程。

立體校正:對個體影象進行糾正的過程。

如何計算極線?

計算極線需要知道兩個攝像機的物理相對關係和畫素相對關係,需要用到兩個矩陣

基礎矩陣和本徵矩陣的對應關係

基礎矩陣的計算:cvFindamentalmat();也可以通過cvStereoCalibrate()函式得來。

由基礎矩陣計算極線。

cvComputeCorrespondEpilines();

根據得到的極線來立體校正影象。

立體匹配,匹配兩個不同攝像機檢視的3D點,計算視差。

使用cvPerspectiveTransform()或者成vReprojectImageTo3D();得到視覺深度。

Opencv開啟指定攝像頭