潘創(chuàng) 劉乙奇 黃道平
(華南理工大學 自動化科學與工程學院,廣東 廣州 510640)
雙目立體視覺旨在模仿人的雙眼,根據(jù)目標在左右兩幅圖像中的位置偏差(即視差值)恢復目標的三維信息。隨著社會的不斷進步和需求的不斷提高,雙目立體視覺也隨之成為了當前研究的熱點和難點問題,數(shù)十年來大批學者對這一領域進行了深入的研究,取得了大量的成果。立體匹配是雙目視覺的關鍵步驟,匹配的精度和速度制約著雙目視覺系統(tǒng)的應用和發(fā)展。對于給定的兩幅圖像,因為相機的安裝位置不同,同一個目標在兩幅圖像中的位置并不相同,立體匹配就是確定同一個目標在兩幅圖像中的位置的過程。目前,立體匹配算法可分為局部匹配算法和全局匹配算法[1]。局部匹配算法考慮目標點局部鄰域內(nèi)的信息,匹配速度快,但精度較低;全局匹配算法通過建立一個能量函數(shù),將立體匹配轉(zhuǎn)化為能量函數(shù)的最小化問題,雖然匹配精度高,但計算復雜,實時性差,難以應用。因此,高效、準確的立體匹配算法仍然是一個很有價值的研究方向。
立體匹配大致可分為匹配代價計算、代價聚合、視差值計算和視差值精煉4個步驟[1],絕大部分立體匹配算法包含這4個步驟或其中幾個步驟。計算匹配代價是立體匹配的第一步,匹配代價的好壞對匹配精度有重要的影響?;叶?顏色差是最常用的匹配代價,這種匹配代價計算簡單,速度快,但對噪聲敏感,魯棒性差。為了提高魯棒性,學者們提出了很多不同的匹配代價計算方法,如基于Rank變換或Census變換[2]、互相關(NCC)[3]、互信息的匹配代價[4]、BT算法[5]等,這些方法屬于單一的匹配代價計算方法,很難適用所有問題。文獻[6- 7]將基于灰度/顏色、梯度、Census變換的匹配代價計算方法結合在一起,提高了匹配精度。文獻[8- 12]使用深度學習方法,提取圖像區(qū)域的高級特征用于計算匹配代價,這些特征魯棒性好,能有效地減小相機拍照環(huán)境變化帶來的不利影響。張展[13]定義了圖像的內(nèi)外相似度,根據(jù)內(nèi)外相似度計算匹配代價,可減少誤匹配點。王旭初等[14]提出了融合多尺度局部特征和深度特征的雙目立體匹配算法,提高了算法對遮擋區(qū)域的適應能力。
一般來說,單個像素點的匹配代價很容易受到干擾,匹配精度不高。局部匹配算法假設一個局部鄰域內(nèi),所有像素點有相同或相似的視差值,通過代價聚合,將周圍像素點的匹配代價融合在一起,從而提高匹配精度。但此假設在物體的邊緣位置以及傾斜平面、曲面等位置并不成立,使得最終的匹配精度不高。均值濾波是最簡單的代價聚合方法,可以用于匹配精度要求不高的場合。高質(zhì)量的代價聚合算法需要自適應調(diào)整濾波窗口的尺寸、形狀、權重等。Yoon等[15]提出了一種自適應聚合算法,該算法的匹配精度高,匹配效果甚至可以媲美全局算法,但隨著濾波窗口尺寸的增大,計算量會急劇增加,因此,出現(xiàn)了一些近似的算法[16- 18],以期減少計算量,但這些近似方法會同時降低匹配精度。Hosni等[19]用導向濾波器[20]聚合匹配代價,提高了邊緣位置的匹配精度,是當時匹配精度最高的代價聚合算法。局部匹配算法只考慮濾波窗口內(nèi)代價信息,當目標物體紋理較弱時,聚合效果差,難以滿足要求。為解決弱紋理問題,Yang[21]提出了一種基于最小生成樹(MST)的非局部匹配算法,聚合匹配代價計算方法簡單,速度快,但對于重復性紋理效果不好。Choi等[22]設計了一組導向濾波器和最小生成樹濾波器,對于每個像素點,根據(jù)該像素點局部鄰域內(nèi)的信息自動選擇合適的濾波器和濾波器參數(shù)。與局部匹配算法不同,全局匹配算法構造了一個能量函數(shù),將匹配問題轉(zhuǎn)化成一個能量函數(shù)最小化的問題,常用的優(yōu)化方法有置信度傳播(BP)[23]、圖割(GC)[24]、加權樹(TWR)[25]等。全局算法考慮了整幅圖像的信息,匹配精度比局部匹配算法高,但計算復雜,運算時間長,極大地限制了全局匹配算法的應用。
完成代價聚合后,絕大多數(shù)匹配算法都采用“贏者通吃”(WTA)方法計算視差值,但得到的視差圖仍有很多匹配錯誤的點,需要對視差圖做進一步的校正和優(yōu)化,如左右一致性檢驗、亞像素插值、置信度檢驗等,提高匹配精度。
結合物流行業(yè)的需求和特點,本文利用激光散斑增加包裹表面的紋理信息,以解決弱紋理區(qū)域“一配多”的現(xiàn)象,提高弱紋理區(qū)域的匹配精度。為提高匹配精度,根據(jù)激光散斑的特點,本文設計了基于梯度方向的匹配代價函數(shù);在代價聚合過程中,將導向濾波器和半全局匹配(SGM)[4]算法串聯(lián)使用,以提高算法適應傾斜平面的能力。散斑雖然能增加物體表面的紋理信息,但物體表面自身的紋理信息被過濾掉了,使得匹配算法在物體邊緣位置的匹配精度不高,因此,在代價聚合之后,本文設計了相應的置信度函數(shù),對可靠性低的視差值進行校正,以提高算法在邊緣位置的匹配精度。
弱紋理現(xiàn)象是物體表面有很多灰度/顏色相近的區(qū)域,在這些區(qū)域,左圖中目標點在右圖中存在多個對應點,對于不同的視差值,匹配代價相似,估計得到的視差值可信度不高。為了提高弱紋理區(qū)域的匹配精度,本文在物體表面投射散斑,人為地給物體表面增加紋理。散斑是激光干涉產(chǎn)生的隨機斑點,在物體表面不同的位置,散斑的形狀不同,可提高弱紋理區(qū)域不同位置的區(qū)分度。為了消除物體表面紋理信息對匹配效果的影響,本文使用紅外散斑和紅外相機。基于激光散斑的立體匹配算法流程圖如圖1所示。
圖1 基于激光散斑的立體匹配算法流程圖
散斑投射到物體表面,帶來了豐富的紋理信息,梯度信息也更為豐富,因此本文使用梯度計算匹配代價。盡管使用紅外相機可濾掉可見光,但陽光中的紅外成分仍然對散斑的亮度有影響,梯度大小因此也受到影響。相比于梯度大小,梯度方向受光照的影響小,因此本文使用梯度方向來計算匹配代價,即
(1)
式中,θgd,L、θgd,R分別是左圖和右圖的梯度方向角,p是左圖中的點,pd是p在右圖中視差為d的匹配點。
在時域?qū)D像做卷積可以很容易得到每個像素的梯度,但梯度方向的計算比較耗時。兩個向量夾角的余弦值可以通過向量的內(nèi)積獲得,計算簡單,因此本文使用梯度夾角的余弦值來計算匹配代價。在雙目視覺中,由于左右兩個相機的拍攝位置不同,同一個目標點在左右兩幅圖像中的灰度/顏色會發(fā)生變化,好的代價函數(shù)要能夠抑制這種變化。通常,為了消除明顯的錯誤匹配,大多數(shù)匹配代價函數(shù)都會使用截斷函數(shù)(如BT等)。余弦函數(shù)能很好地滿足這兩個需求。
采用式(1)計算匹配代價時僅僅考慮了像素點自身的梯度,容易受到干擾,造成大量的誤匹配。代價聚合假設一個局部鄰域內(nèi)的像素點有相同或相似的視差值,將鄰域內(nèi)所有像素點的匹配代價聚合起來,可以抑制噪聲的影響,減少誤匹配。均值濾波是最簡單的聚合方法,但在物體的邊緣聚合效果差,可應用于匹配精度要求不高的場合。導向濾波器[20]能夠保存物體的邊緣信息,匹配精度高,計算時間受鄰域尺寸的影響小,能夠滿足實時性的要求。本文使用導向濾波器進行代價聚合,即
(2)
εU)-1(Ik-μs)]
(3)
式中:R為參考圖,因要計算左圖的視差圖,因此使用左圖作為參考圖;Ip、Ik分別為參考圖在p、k點的顏色值;s為包含p、k點的窗口ws的中心,窗口大小為w×w;μs、σs分別為窗口ws內(nèi)所有像素點顏色值的均值和方差;U為單位矩陣;ε為平滑參數(shù);Cs(k,d)為使用SGM算法聚合后的匹配代價。
導向濾波器在聚合匹配代價時,對窗口鄰域內(nèi)不同像素的匹配代價賦予不同的權重,p、k點的顏色/灰度值接近時賦予較大的權重。在邊緣位置,如果p、k點屬于不同物體,顏色/灰度值差別大,則賦予的權重小。因此導向濾波器可以保留圖像的邊緣信息。然而,對于曲面和斜面,同一物體表面的像素點灰度值/顏色接近,但是視差值不同,鄰域窗口的尺寸越大,這種差別越大,導向濾波器的效果越差。為了彌補這一不足,本文在導向濾波器的前端增加了一個SGM[4]的代價聚合,與全局匹配算法類似,半全局匹配算法首先定義一個能量函數(shù)E(d),將求視差值的問題轉(zhuǎn)化成一個能量函數(shù)最小化的問題:
(4)
式中:Np為p的鄰域;P1、P2為懲罰因子,且P2>P1;T(·)為條件函數(shù),當條件為真時函數(shù)值為1,否則為0。式(4)的第一項為數(shù)據(jù)項,代表每個像素點的匹配代價;第二項和第三項為平滑項,使相鄰像素的視差值盡可能相同,小的懲罰因子P1使得能量函數(shù)能夠適應曲面或斜面帶來的影響。能量函數(shù)(4)的最小化是一個NP完全問題,常用的近似方法如BP、 GC等方法的計算量非常大,難以滿足實時性要求。SGM將能量函數(shù)的優(yōu)化問題轉(zhuǎn)化成多個一維動態(tài)規(guī)劃,即
(5)
Lr(p,d)=C(p,d)+min(Lr(p,d),
Lr(p-r,d-1)+P1,Lr(p-r,d+1)+P1,
(6)
式中,r為路徑數(shù),文獻[4]建議使用16條路徑。本文中SGM是匹配代價聚合中的一個步驟,只使用4條路徑,從而減少計算量。
匹配代價聚合后,對于每個像素點,使用WTA方法計算最優(yōu)視差值,即
(7)
為了提高匹配精度,本文還需要計算右圖的視差圖,計算方法與左圖的相同。得到右圖的視差圖后可以進行左右一致性校驗,檢測遮擋和誤匹配,提高邊緣位置的匹配精度。
使用聚合后的匹配代價計算的視差值仍然會存在很多匹配錯誤點,需要做進一步的處理來提高匹配精度。
(8)
(9)
則對視差值進行插值,即
(10)
為了使算法滿足實際應用中的實時性要求,本文使用梯度方向角的差值來計算匹配代價,因為直接使用梯度方向計算量會比較大,故文中使用梯度角的余弦值代替,對每個像素點只需進行兩次(x方向和y方向)減法、兩次加法即可得到梯度,歸一化之后對每個待匹配點進行一次乘法和減法即可得到匹配代價,計算復雜度為O(Nd),其中N為像素點的個數(shù),d為視差值的范圍。在代價聚合時,本文將導向濾波器和SGM算法串聯(lián)起來,導向濾波器通過串聯(lián)的均值濾波以及濾波窗口內(nèi)的方差即可達到雙邊濾波器的效果,其計算復雜度為O(N)。導向濾波器計算量的詳細分析見參考文獻[20]。半全局匹配SGM算法通過將多路徑的動態(tài)優(yōu)化過程分解成多個單路徑的優(yōu)化過程,極大地減少了計算量,計算復雜度為O(Nd),具體分析見參考文獻[4]。本文使用的SGM算法的復雜度為O(Nd),而且可以通過并行計算進行加速,因此可以達到較好的實時性。
本文使用激光散斑給物體表面增加紋理,可以提高匹配算法對弱紋理區(qū)域的處理能力。目前立體匹配的公共數(shù)據(jù)集中沒有帶散斑的驗證圖像,本文使用自行拍攝的圖像來驗證算法的有效性,算法中參數(shù)設定如下:{w,ε,P1,P2,}={19,0.01,0.3,0.6,0.2}。實驗中使用130萬像素的相機,物體的高度變化在50~1 000 mm,圖像處理器(GPU)加速之后,測量時間大約為0.7 s,基本達到實時測量的要求。
在匹配之前,首先對左右圖像進行校正,使得左右兩個相機的圖像平面共面行對準,即左右兩個相機的圖像平面在同一個平面上,并且同一個目標點在左右兩個相機的投影點行坐標相同,這樣匹配算法只需要在一個水平直線上尋找匹配點,大大減少計算量。本文使用Bougeut方法對左右圖像進行校正。這種方法同時旋轉(zhuǎn)左右圖像,使得目標點的投影畸變最小。圖像校正之后利用匹配算法得到視差圖。
圖2(a)所示是待匹配的圖像(將一個測量尺放在測試臺面上,散斑投射在物體表面和測量臺面),代價聚合之后得到的視差圖如圖2(b)所示。由于工作臺面以外的位置幾乎看不到散斑,因此很難正確估計這些位置的視差值,視差值的可信度低,而且由于遮擋的問題,測量尺左側部分的視差值估計也不準確。對視差圖進行后處理之后的視差圖見圖2(c),從圖中可以看出,經(jīng)過置信度檢驗后,測量臺面以外的區(qū)域的視差值都被置0,而臺面和物體的視差值很好地被保留了下來。為了進一步檢驗匹配效果,本文將原圖(綠色)和估計得到的視差圖(紅色)疊加顯示,如圖2(d)所示,原圖為綠色,視差圖為紅色,重疊的部分為黃色,將對比圖局部放大,可以看到測量尺視差圖左側邊緣位置與原圖邊緣位置基本重合,驗證了本文算法能很好地適應物體邊緣帶來的視差不連續(xù)問題。
為了定量評價本文提出的算法,利用得到的視差圖重構物體的三維坐標,計算物體的尺寸,對比物體的實際尺寸與測量尺寸,通過測量精度衡量算法的性能。實驗中選擇了多個不同尺寸的物體,以不同姿態(tài)放置在臺面的不同位置進行15次測量。
圖2 本文算法的實驗結果Fig.2 Experimental results of the proposed algorithm
圖3 傾斜平面的視差圖Fig.3 Disparity map of slant plane
通過雙目相機測量物體的實際尺寸時,還需要對相機進行標定和校正。本文采用棋盤格標定相機的內(nèi)外參數(shù),在工作區(qū)域內(nèi),將棋盤格擺放在不同的位置并以不同的姿態(tài)拍攝校正圖像,使用張正友標定法[26]進行標定。本文使用紅外相機拍攝圖像,在標定過程中,如果安裝環(huán)境中有自然光,只需調(diào)大相機的曝光時間,即可得到清晰的標定圖像;如果相機安裝在自然光很弱或者沒有自然光的地方,則使用紅外光源進行補光,完成相機標定。標定完成后,根據(jù)相機的內(nèi)外參數(shù)及視差圖重構物體的三維信息,獲得物體的三維尺寸。
實驗中,使用卷尺在物體的不同位置測量3次,以最大值為物體的真實尺寸;利用視差圖重構出的三維尺寸,本文用最大外接矩形的尺寸表示測量值。不同物體的實測結果如表1所示。從表中可以看出:深度方向最大測量誤差比較小,測量誤差在±3%以內(nèi),說明本文算法能比較準確地估計出物體的視差值;立體匹配中的遮擋問題使得很難準確估計物體的邊緣位置,導致臺面方向的測量誤差(X、Y軸誤差)相對深度方向大了很多,達到±5%左右;相對于凳子、測量板等物體,紙箱材質(zhì)比較軟,容易發(fā)生形變,導致的測量誤差也會更大一些。
表1 不同物體的實測結果Table 1 Measured results of different objects mm
本文利用激光散斑增加物體表面的紋理,可以有效降低算法的復雜度,散斑紋理簡單,因此簡單的匹配代價計算方法就可以取得比較好的效果,與基于灰度/顏色差、梯度的匹配代價相比,基于梯度方向的匹配代價在遮擋區(qū)域的可靠性更高。但散斑也會帶來一些不利因素,如本文使用紅外激光散斑和紅外相機,會濾除物體本身的紋理信息,增加了遮擋區(qū)域的匹配難度。一般情況下,散斑投射器安裝在物體正上方,由于遮擋問題,物體邊緣位置沒有散斑,如圖4所示,箱子上側邊緣和右側邊緣沒有散斑,增加了邊緣位置的匹配難度。另外,如果箱子放置在測量臺面的邊緣位置,相機會拍到箱子的側面,側面散斑效果差,也會降低匹配精度。
圖4 散斑效果不理想的圖像Fig.4 Image with low quality speckles
在實際測量中還發(fā)現(xiàn)一些其他問題,例如物體放置在測量臺面中央時測量結果更準確,垂直于視差方向的尺寸測量比較準確,而平行于視差方向的尺寸由于遮擋導致測量結果偏大。這些問題將在未來做進一步的研究。
本文通過激光散斑增加物體表面的紋理信息,提高了匹配精度,特別是對于弱紋理區(qū)域。根據(jù)散斑帶來的豐富紋理信息,本文使用梯度方向計算匹配代價,有效減小了光照變化帶來的不利影響,提高了匹配精度。代價聚合時,為了更好適應物體邊緣及斜面帶來的影響,本文融合了導向濾波器和SGM算法,提高了算法在這些區(qū)域的匹配精度。最后根據(jù)聚合后的匹配代價,本文提出了一種可靠性檢驗方法,有效地減少了遮擋帶來的錯誤匹配。本文根據(jù)相機的內(nèi)外參數(shù)重構物體的三維信息,利用測量精度衡量算法的性能。在實驗過程中,對于尺寸不易發(fā)生形變的物體,測量精度可以在±3%以內(nèi);對于材質(zhì)較軟、容易發(fā)生形變的物體,測量精度也可以達到±5%;在ThinkPadX250平臺上運行,測量時間大約0.7 s。本文提出的算法已經(jīng)在某物流公司調(diào)試,基本滿足客戶的需求,預計可以帶來可觀的經(jīng)濟效益。