/ 導(dǎo)讀 /
雙目立體視覺(Binocular Stereo Vision)是機器視覺的一種重要形式,它是基于視差原理并利用成像設(shè)備從不同的位置獲取被測物體的兩幅圖像,通過計算圖像對應(yīng)點間的位置偏差,來獲取物體三維幾何信息的方法。
1偽激光雷達-雙目立體相機
深度學(xué)習(xí)和計算機視覺在自動駕駛系統(tǒng)中已經(jīng)非常流行且被廣泛應(yīng)用。計算機視覺領(lǐng)域在過去的十年里得到了迅猛的發(fā)展,特別是在障礙物檢測方面。障礙物檢測算法,如YOLO或RetinaNet提供了二維邊界框,用邊界框給出了障礙物在圖像中的位置。
目前,大多數(shù)的目標(biāo)檢測算法都是基于單目RGB攝像機的,不能返回每個障礙物的距離。為了能夠返回每個障礙物的距離,工程師們將相機與激光雷達(LiDAR,光探測和測距)傳感器進行融合,后者使用激光來返回深度信息。將計算機視覺信息和激光雷達輸出進行傳感器的融合。這種方法的問題是使用激光雷達,就會導(dǎo)致價格昂貴。所以經(jīng)常有人使用的一個雙目攝像頭進行替代,并使用幾何信息來定義每個障礙物的距離,故可以將雙目相機獲取的數(shù)據(jù)稱之為偽激光雷達
雙目視覺利用幾何學(xué)來構(gòu)建深度圖,并將其與目標(biāo)檢測相結(jié)合以獲得三維距離。那么如何利用立體視覺實現(xiàn)距離估計?以下是雙目障礙物檢測的5步偽代碼:
標(biāo)定 2 個攝像頭(內(nèi)外參的標(biāo)定)
創(chuàng)建極線約束
先構(gòu)建視差圖,然后構(gòu)建深度圖
然后將深度圖與障礙物檢測算法相結(jié)合
估計邊界框內(nèi)像素的深度。
2相機內(nèi)外參標(biāo)定
每個攝像機都需要標(biāo)定。相機的標(biāo)定是指將三維世界中的[X,Y,Z]坐標(biāo)的三維點轉(zhuǎn)換為具有[X,Y]坐標(biāo)的二維像素。這里簡單的介紹一下針孔相機模型。顧名思義就是用一個針孔讓少量光線穿過相機,從而得到清晰的圖像。
針孔相機模型可以設(shè)置焦距,使得圖像更加的清晰。為了相機標(biāo)定,我們需要通過攝像機坐標(biāo)系計算世界坐標(biāo)點到像素坐標(biāo)的變換關(guān)系。
從世界坐標(biāo)系到相機坐標(biāo)的轉(zhuǎn)換稱為外參標(biāo)定,外部參數(shù)稱為R(旋轉(zhuǎn)矩陣)和T(平移矩陣)。
從攝像機坐標(biāo)到像素坐標(biāo)的轉(zhuǎn)換稱為內(nèi)參標(biāo)定,它獲取的是相機的內(nèi)部參數(shù),如焦距、光心等…
內(nèi)參我們常稱之為K的矩陣。
內(nèi)參標(biāo)定,通常使用棋盤和自動算法獲得,如下圖我們在采集標(biāo)定板時,將告訴算法棋盤上的一個點(例如世界坐標(biāo)系點 0, 0 , 0)對應(yīng)于圖像中的一個像素為(545,343)。
為此,相機標(biāo)定必須用攝像機拍攝棋盤格的圖像,在得到一些圖像和對應(yīng)的點之后,標(biāo)定算法將通過最小化平方誤差來確定攝像機的標(biāo)定矩陣。得到標(biāo)定參數(shù)后為了得到校正后的圖像,需要進行畸變校正。畸變可以是徑向的,也可以是切向的。畸變校正有助于消除圖像失真。
以下是攝像機標(biāo)定返回的矩陣形式
f是焦距-(u?,v?) 是光學(xué)中心:這些是固有參數(shù)。
我認(rèn)為每一個計算機視覺工程師都應(yīng)該必須知道并掌握相機的標(biāo)定,這是最基本且重要的要求。
在相機標(biāo)定的過程中涉及到一些齊次坐標(biāo)轉(zhuǎn)換的問題,這里簡單的介紹一下有兩個公式可以得到從世界坐標(biāo)系到像素坐標(biāo)系的關(guān)系:
(1)世界坐標(biāo)系到相機坐標(biāo)系的轉(zhuǎn)換(外參標(biāo)定公式)
(2)相機坐標(biāo)系到圖像坐標(biāo)系的轉(zhuǎn)換(內(nèi)參標(biāo)定公式)
所以從三維空間坐標(biāo)系到圖像坐標(biāo)系下的關(guān)系可以總結(jié)為
但是我們知道這個公式是齊次坐標(biāo)才可以這么寫,也就是需要將O_world從[X Y Z]修改為[X Y Z 1],加這個“1”后稱為齊次坐標(biāo)。
3雙目視覺的對極幾何
我們知道雙目立體視覺是基于兩幅圖像來尋找深度的,人類的眼睛就像兩個相機,因為兩只眼睛從不同的角度觀察圖像,所以他們可以計算兩個視角之間的差異,并建立距離估計。下圖是一個雙目立體相機的例子
那么我們?nèi)绾胃鶕?jù)雙目立體相機如何估計深度?想象一下你有兩個攝像頭,一個左攝像頭和一個右攝像頭。這兩個攝像頭在同一Y軸和Z軸上對齊。那么唯一的區(qū)別是它們的X值。
根據(jù)上圖我們的目標(biāo)是估計O點(代表圖像中的任何像素)的Z值,即距離。X是對齊軸,Y是高度值,Z是深度值,兩個藍(lán)色的平面圖對應(yīng)于每個攝像頭的圖像。假設(shè)我們從從俯視的角度來考慮這個問題。
已知:
(1)xL對應(yīng)于左側(cè)相機圖像中的點。xR是與左側(cè)圖像中該點的對應(yīng)位置。(2)b是基線,是兩個攝像頭之間的距離。
針對左相機,如下圖,我們可以得到一個公式:Z = X*f / xL.
針對右相機,如下圖,我們可以得到另一個公式:Z = (X — b)*f/xR.
此時根據(jù)兩個公式我們可以計算出正確的視差d=xL-xR和一個物體的正確XYZ位置。
4視差和深度圖
什么是視差?視差是指同一個三維點在兩個不同的攝像機角度獲得的圖像中位置的差異。視差圖是指一對立體圖像之間明顯的像素差異或運動。要體驗這一點,試著閉上你的一只眼睛,然后快速地閉上它,同時打開另一只眼睛。離你很近的物體看起來會跳一段很長的距離,而離你較遠(yuǎn)的物體移動很少,這種運動就是視差。
由于立體視覺,我們可以估計任何物體的深度,假設(shè)我們得到了正確的矩陣參數(shù),則可以計算深度圖或視差圖:
為了計算視差,我們必須從左邊的圖像中找到每個像素,并將其與右邊圖像中的每個像素進行匹配。這就是所謂的雙目相機的立體匹配的問題。為了解決像素匹配的問題,引入對極幾何約束,只需在對極線上搜索它,就不需要二維搜索,對應(yīng)點一定是位于這條線上,搜索范圍縮小到一維。
之所以能夠引入對極約束,這是因為兩個相機是沿同一軸對齊的。以下是極線搜索的工作原理:
取左圖中這一行上的每個像素
在同一極線上比較左圖像像素和右圖像中的每個像素
選擇 cost 最低的像素
計算視差 d
5構(gòu)建偽激光雷達效果
現(xiàn)在,是時候把這些應(yīng)用到一個真實的場景中,看看我們?nèi)绾问褂秒p目立體視覺來估計物體的深度。假設(shè)我們有以下兩張實際場景下的圖片,并且我們我們已經(jīng)獲取了雙目相機的外參矩陣。
此時我們計算視差圖的步驟。將投影矩陣分解為攝像機內(nèi)參矩陣
編輯:jq
-
RGB
+關(guān)注
關(guān)注
4文章
798瀏覽量
58388 -
計算機視覺
+關(guān)注
關(guān)注
8文章
1696瀏覽量
45927 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5492瀏覽量
120977 -
自動駕駛系統(tǒng)
+關(guān)注
關(guān)注
0文章
65瀏覽量
6753
原文標(biāo)題:自動駕駛汽車的偽激光雷達-雙目立體視覺
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論