深度相機(jī)原理揭秘--雙目立體視覺
原標(biāo)題:深度相機(jī)原理揭秘--雙目立體視覺
導(dǎo)讀
為什么非得用雙目相機(jī)才能得到深度?
雙目立體視覺深度相機(jī)的工作流程
雙目立體視覺深度相機(jī)詳細(xì)工作原理
理想雙目相機(jī)成像模型
極線約束
圖像矯正技術(shù)
基于滑動窗口的圖像匹配
基于能量優(yōu)化的圖像匹配
雙目立體視覺深度相機(jī)的優(yōu)缺點(diǎn)
---------------------------------------------------
基于雙目立體視覺的深度相機(jī)類似人類的雙眼,和基于TOF、結(jié)構(gòu)光原理的深度相機(jī)不同,它不對外主動投射光源,完全依靠拍攝的兩張圖片(彩色RGB或者灰度圖)來計(jì)算深度,因此有時候也被稱為被動雙目深度相機(jī)。比較知名的產(chǎn)品有STEROLABS 推出的 ZED 2K Stereo Camera和Point Grey 公司推出的 BumbleBee。
ZED 2K Stereo Camera
為什么非得用雙目相機(jī)才能得到深度?
說到這里,有些讀者會問啦:為什么非得用雙目相機(jī)才能得到深度?我閉上一只眼只用一只眼來觀察,也能知道哪個物體離我近哪個離我遠(yuǎn)??!是不是說明單目相機(jī)也可以獲得深度?
在此解答一下:首先,確實(shí)人通過一只眼也可以獲得一定的深度信息,不過這背后其實(shí)有一些容易忽略的因素在起作用:一是因?yàn)槿吮旧韺λ幍氖澜缡欠浅A私獾模ㄏ闰?yàn)知識),因而對日常物品的大小是有一個基本預(yù)判的(從小到大多年的視覺訓(xùn)練),根據(jù)近大遠(yuǎn)小的常識確實(shí)可以推斷出圖像中什么離我們遠(yuǎn)什么離我們近;二是人在單眼觀察物體的時候其實(shí)人眼是晃動的,相當(dāng)于一個移動的單目相機(jī),這類似于運(yùn)動恢復(fù)結(jié)構(gòu)(Structure from Motion, SfM)的原理,移動的單目相機(jī)通過比較多幀差異確實(shí)可以得到深度信息。
但是實(shí)際上,相機(jī)畢竟不是人眼,它只會傻傻的按照人的操作拍照,不會學(xué)習(xí)和思考。下圖從物理原理上展示了為什么單目相機(jī)不能測量深度值而雙目可以的原因。我們看到紅色線條上三個不同遠(yuǎn)近的黑色的點(diǎn)在下方相機(jī)上投影在同一個位置,因此單目相機(jī)無法分辨成的像到底是遠(yuǎn)的那個點(diǎn)還是近的那個點(diǎn),但是它們在上方相機(jī)的投影卻位于三個不同位置,因此通過兩個相機(jī)的觀察可以確定到底是哪一個點(diǎn)。
雙目相機(jī)確定深度示意圖
雙目立體視覺深度相機(jī)簡化流程
下面簡單的總結(jié)一下雙目立體視覺深度相機(jī)的深度測量過程,如下:
1、首先需要對雙目相機(jī)進(jìn)行標(biāo)定,得到兩個相機(jī)的內(nèi)外參數(shù)、單應(yīng)矩陣。
2、根據(jù)標(biāo)定結(jié)果對原始圖像校正,校正后的兩張圖像位于同一平面且互相平行。
3、對校正后的兩張圖像進(jìn)行像素點(diǎn)匹配。
4、根據(jù)匹配結(jié)果計(jì)算每個像素的深度,從而獲得深度圖。
欲知詳情,且看下面詳細(xì)介紹。
雙目立體視覺深度相機(jī)詳細(xì)原理
1
理想雙目相機(jī)成像模型
首先我們從理想的情況開始分析:假設(shè)左右兩個相機(jī)位于同一平面(光軸平行),且相機(jī)參數(shù)(如焦距f)一致。那么深度值的推導(dǎo)原理和公式如下。公式只涉及到初中學(xué)的三角形相似知識,不難看懂。
理想情況下雙目立體視覺相機(jī)深度值計(jì)算原理
根據(jù)上述推導(dǎo),空間點(diǎn)P離相機(jī)的距離(深度)z=f*b/d,可以發(fā)現(xiàn)如果要計(jì)算深度z,必須要知道:
1、相機(jī)焦距f,左右相機(jī)基線b。這些參數(shù)可以通過先驗(yàn)信息或者相機(jī)標(biāo)定得到。
2、視差d。需要知道左相機(jī)的每個像素點(diǎn)(xl, yl)和右相機(jī)中對應(yīng)點(diǎn)(xr, yr)的對應(yīng)關(guān)系。這是雙目視覺的核心問題。
2
極線約束
那么問題來了,對于左圖中的一個像素點(diǎn),如何確定該點(diǎn)在右圖中的位置?是不是需要我們在整個圖像中地毯式搜索一個個匹配?
答案是:不需要。因?yàn)橛袠O線約束(名字聽著很嚇人)。極線約束對于求解圖像對中像素點(diǎn)的對應(yīng)關(guān)系非常重要。
那什么是極線呢?如下圖所示。C1,C2是兩個相機(jī),P是空間中的一個點(diǎn),P和兩個相機(jī)中心點(diǎn)C1、C2形成了三維空間中的一個平面PC1C2,稱為極平面(Epipolar plane)。極平面和兩幅圖像相交于兩條直線,這兩條直線稱為極線(Epipolar line)。P在相機(jī)C1中的成像點(diǎn)是P1,在相機(jī)C2中的成像點(diǎn)是P2,但是P的位置事先是未知的。
我們的目標(biāo)是:對于左圖的P1點(diǎn),尋找它在右圖中的對應(yīng)點(diǎn)P2,這樣就能確定P點(diǎn)的空間位置,也就是我們想要的空間物體和相機(jī)的距離(深度)。
所謂極線約束(Epipolar Constraint)就是指當(dāng)同一個空間點(diǎn)在兩幅圖像上分別成像時,已知左圖投影點(diǎn)p1,那么對應(yīng)右圖投影點(diǎn)p2一定在相對于p1的極線上,這樣可以極大的縮小匹配范圍。
根據(jù)極線約束的定義,我們可以在下圖中直觀的看到P2一定在對極線上,所以我們只需要沿著極線搜索一定可以找到和P1的對應(yīng)點(diǎn)P2。
極線約束示意圖
細(xì)心的朋友會發(fā)現(xiàn)上述過程考慮的情況(兩相機(jī)共面且光軸平行,參數(shù)相同)非常理想,相機(jī)C1,C2如果不是在同一直線上怎么辦?
事實(shí)上,這種情況非常常見,因?yàn)橛行﹫鼍跋聝蓚€相機(jī)需要獨(dú)立固定,很難保證光心C1,C2完全水平,即使是固定在同一個基板上也會因?yàn)檠b配的原因?qū)е鹿庑牟煌耆?。如下圖所示。我們看到兩個相機(jī)的極線不僅不平行,還不共面,之前的理想模型那一套推導(dǎo)結(jié)果用不了了,這可咋辦呢?
非理想情況下的極線
不急,有辦法。我們先來看看這種情況下拍攝的兩張左右圖片吧,如下所示。左圖中三個十字標(biāo)志的點(diǎn),在右圖中對應(yīng)的極線是右圖中的三條白色直線,也就是對應(yīng)的搜索區(qū)域。我們看到這三條直線并不是水平的,如果進(jìn)行逐點(diǎn)搜索效率非常低。
左圖中三個點(diǎn)(十字標(biāo)志)在右圖中對應(yīng)的極線是右圖中的三條白色直線
3
圖像矯正技術(shù)
怎么辦呢?把不理想情況轉(zhuǎn)化為理想情況不就OK了!這就是圖像矯正(Image Rectification)技術(shù)。
圖像矯正是通過分別對兩張圖片用單應(yīng)(homography)矩陣變換(可以通過標(biāo)定獲得)得到的,的目的就是把兩個不同方向的圖像平面(下圖中灰色平面)重新投影到同一個平面且光軸互相平行(下圖中黃色平面),這樣就可以用前面理想情況下的模型了,兩個相機(jī)的極線也變成水平的了。
圖像校正示意圖
經(jīng)過圖像矯正后,左圖中的像素點(diǎn)只需要沿著水平的極線方向搜索對應(yīng)點(diǎn)就可以了(開心)。從下圖中我們可以看到三個點(diǎn)對應(yīng)的視差(紅色雙箭頭線段)是不同的,越遠(yuǎn)的物體視差越小,越近的物體視差越大,這和我們的常識是一致的。
圖像校正后的結(jié)果。紅色雙箭頭線段是對應(yīng)點(diǎn)的視差
上面講到的對于左圖的一個點(diǎn),沿著它在右圖中水平極線方向?qū)ふ液退钇ヅ涞南袼攸c(diǎn),說起來簡單,實(shí)際操作起來卻不容易。這是因?yàn)樯鲜龆际抢硐肭闆r下的假設(shè)。實(shí)際進(jìn)行像素點(diǎn)匹配的時候會發(fā)現(xiàn)幾個問題:
1、實(shí)際上要保證兩個相機(jī)完全共面且參數(shù)一致是非常困難的,而且計(jì)算過程中也會產(chǎn)生誤差累積,因此對于左圖的一個點(diǎn),其在右圖的對應(yīng)點(diǎn)不一定恰好在極線上。但是應(yīng)該是在極線附近,所以搜索范圍需要適當(dāng)放寬。
2、單個像素點(diǎn)進(jìn)行比較魯棒性很差,很容易受到光照變化和視角不同的影響。
4
基于滑動窗口的圖像匹配
上述問題的解決方法:使用滑動窗口來進(jìn)行匹配。如下圖所示。對于左圖中的一個像素點(diǎn)(左圖中紅色方框中心),在右圖中從左到右用一個同尺寸滑動窗口內(nèi)的像素和它計(jì)算相似程度,相似度的度量有很多種方法,比如 誤差平方和法(Sum of Squared Differences,簡稱SSD),左右圖中兩個窗口越相似,SSD越小。下圖中下方的SSD曲線顯示了計(jì)算結(jié)果,SSD值最小的位置對應(yīng)的像素點(diǎn)就是最佳的匹配結(jié)果。
滑動窗口匹配原理示意圖
具體操作中還有很多實(shí)際問題,比如滑動窗口尺寸。滑動窗口的大小選取還是很有講究的。下圖顯示了不同尺寸的滑動窗口對深度圖計(jì)算結(jié)果的影響。從圖中我們也不難發(fā)現(xiàn):
小尺寸的窗口:精度更高、細(xì)節(jié)更豐富;但是對噪聲特別敏感
大尺寸的窗口:精度不高、細(xì)節(jié)不夠;但是對噪聲比較魯棒
不同尺寸的滑動窗口對深度圖計(jì)算結(jié)果的影響
雖然基于滑動窗口的匹配方法可以計(jì)算得到深度圖,但是這種方法匹配效果并不好,而且由于要逐點(diǎn)進(jìn)行滑動窗口匹配,計(jì)算效率也很低。
5
基于能量優(yōu)化的圖像匹配
目前比較主流的方法都是基于能量優(yōu)化的方法來實(shí)現(xiàn)匹配的。能量優(yōu)化通常會先定義一個能量函數(shù)。比如對于兩張圖中像素點(diǎn)的匹配問題來說,我們定義的能量函數(shù)如下圖公式1。我們的目的是:
1、在左圖中所有的像素點(diǎn)和右圖中對應(yīng)的像素點(diǎn)越近似越好,反映在圖像里就是灰度值越接近越好,也就是下圖公式2的描述。
2、在 同一張圖片里,兩個相鄰的像素點(diǎn)視差(深度值)也應(yīng)該相近。也就是下圖公式3的描述。
能量函數(shù)
上述公式1代表的能量函數(shù)就是著名的馬爾科夫隨機(jī)場(Markov Random Field)模型。通過對能量函數(shù)最小化,我們最后得到了一個最佳的匹配結(jié)果。有了左右圖的每個像素的匹配結(jié)果,根據(jù)前面的深度計(jì)算公式就可以得到每個像素點(diǎn)的深度值,最終得到一幅深度圖。
雙目立體視覺法優(yōu)缺點(diǎn)
根據(jù)前面的原理介紹,我們總結(jié)一下基于雙目立體視覺法深度相機(jī)的優(yōu)缺點(diǎn)。
1
優(yōu)點(diǎn)
1、對相機(jī)硬件要求低,成本也低。因?yàn)椴恍枰馮OF和結(jié)構(gòu)光那樣使用特殊的發(fā)射器和接收器,使用普通的消費(fèi)級RGB相機(jī)即可。
2、室內(nèi)外都適用。由于直接根據(jù)環(huán)境光采集圖像,所以在室內(nèi)、室外都能使用。相比之下,TOF和結(jié)構(gòu)光基本只能在室內(nèi)使用。
2
缺點(diǎn)
1、對環(huán)境光照非常敏感。雙目立體視覺法依賴環(huán)境中的自然光線采集圖像,而由于光照角度變化、光照強(qiáng)度變化等環(huán)境因素的影響,拍攝的兩張圖片亮度差別會比較大,這會對匹配算法提出很大的挑戰(zhàn)。如下圖是在不同光照條件下拍攝的圖片:
不同光照下的圖像對比
另外,在光照較強(qiáng)(會出現(xiàn)過度曝光)和較暗的情況下也會導(dǎo)致算法效果急劇下降。
2、不適用于單調(diào)缺乏紋理的場景。由于雙目立體視覺法根據(jù)視覺特征進(jìn)行圖像匹配,所以對于缺乏視覺特征的場景(如天空、白墻、沙漠等)會出現(xiàn)匹配困難,導(dǎo)致匹配誤差較大甚至匹配失敗。
紋理豐富(左)和紋理缺乏場景(右)
3、計(jì)算復(fù)雜度高。該方法是純視覺的方法,需要逐像素計(jì)算匹配;又因?yàn)樯鲜龆喾N因素的影響,需要保證匹配結(jié)果比較魯棒,所以算法中會增加大量的錯誤剔除策略,因此對算法要求較高,想要實(shí)現(xiàn)可靠商用難度大,計(jì)算量較大。
4、相機(jī)基線限制了測量范圍。測量范圍和基線(兩個攝像頭間距)關(guān)系很大:基線越大,測量范圍越遠(yuǎn);基線越小,測量范圍越近。所以基線在一定程度上限制了該深度相機(jī)的測量范圍。
本公眾號后續(xù)繼續(xù)推出一系列關(guān)于深度相機(jī)原理和技術(shù)應(yīng)用文章,敬請關(guān)注。
注:轉(zhuǎn)載請注明來源,違者必究。
- 上一篇:激光三角測距法 2018/3/11
- 下一篇:TOF技術(shù)科普篇 2018/3/8