閆小宇,陸凡凡,葛蘆生
(安徽工業(yè)大學電氣與信息工程學院,安徽馬鞍山 243000)
計算機視覺是通過二維圖像認知三維世界的信息。立體視覺技術是計算機視覺中感知三維信息的重要技術,它可以模擬人類視覺對事物處理的方法,具有簡單、可靠、靈活、使用范圍廣等特點,可以進行非接觸性檢測。立體匹配作為立體視覺技術的核心,其原理是針對于不同視角的圖像尋找具有相同像素的點進行匹配,并計算視差。通過構建一個代價函數,對其最小化并估計像素點的視差,進而求取深度。近年來,立體匹配被廣泛應用于無人機巡檢、無人駕駛、虛擬現實和3D-SLAM 地圖重建等領域[1-3]。立體匹配大致可以分為4 個過程:初始代價計算、代價聚合、掃描線優(yōu)化、視差優(yōu)化,其中初始代價計算作為最基礎的步驟,對后續(xù)立體匹配和視差提取的精確性起到至關重要的作用。
立體匹配根據最優(yōu)化理論方法可以分為全局立體匹配算法和局部立體匹配算法。全局立體匹配算法是通過全局優(yōu)化理論方法估計視差,建立全局能量函數,通過最小化全局能量函數得到最優(yōu)視差值。經典全局立體匹配算法有動態(tài)規(guī)劃算法(Dynamic Programming,DP)[4]、置信傳播算(Belief Propagation,BP)[5]、圖割算法[6](Graph Cuts,GC)等,這些算法雖然能夠獲取圖像的視差信息,生成視差圖,但是基于全局的立體匹配算法計算代價耗時太大。
與全局立體匹配算法相比,基于局部立體匹配[7]算法計算代價耗時少、速度快、效率高,能夠快速恢復豐富紋理區(qū)域的視差。局部立體匹配算法是對像素周圍小區(qū)域進行約束,根據圖像基元不同可分為區(qū)域匹配、特征匹配及相位匹配。常用的立體匹配算法有AD-Census 算法[8]、灰度差絕對值(AD)、跨尺度代價聚合算法[9]等。
在實際的測距應用中,光照強弱、噪聲大小對代價計算會造成很大影響,一方面會使立體匹配和視差計算精度大幅度降低,另一方面會大幅度增加匹配時耗,這會影響測距準確性。
Lim 等[10]對于處于光照下的不同匹配代價計算進行研究發(fā)現,光照噪聲對于census 變換的影響較小,且census變換對光照有較好的魯棒性。光照對于計算像素灰度值匹配代價影響較大,如灰度差、絕對值之和(SAD)等。傳統(tǒng)的census 變換由于過度依賴于中心像素點,對噪聲的抗干擾能力較差。為解決這類問題,Hosni 等[11]將梯度信息與SAD 相結合,將匹配點與待匹配點的梯度和支持窗口內SAD 作為匹配代價。對于Census 變換算法,Chang 等[12]將中心像素點的像素值于其選取支持窗口內8 個點的像素值進行比較,產生一串比特值,雖然增強了匹配能力,但還是過度依賴于中心像素點。對于中心像素點的處理,呂倪祺等[13]通過將中心像素替換成支持窗口內像素值的加權平均值,并融合了AD 特征進行代價計算,對于單像素的匹配代價有很好的可靠性,但該算法比較復雜、計算量時耗較大。
鑒于雙目測距系統(tǒng)立體匹配耗時和精度要求,本文提出一種基于改進型AD-Census 立體匹配算法,其中灰度差絕對值(AD)算法對于重復紋理區(qū)域效果比Census 效果好,Census 算法在弱紋理區(qū)域比AD 算法效果好。實驗結果表明,本文提出的改進型AD-Census 立體匹配算法降低了對中心像素的依賴與算法計算量,提高了立體匹配速度,同時也滿足測距精度。
傳統(tǒng)的Census 變換是基于一種局部窗口的非參數變換。其基本思想是:選定一個長寬為奇數的匹配窗口,通過將領域窗口內的像素灰度值q與窗口的中心像素p的灰度值進行比較,將比較得到的布爾值映射到一個比特串中,最后用比特串的值作為中心像素p的Census 變換值Ccen,如式(1)所示。ξ的運算則由式(2)定義。
式中,ξ[·]為比較函數,(Ip)、(Iq)分別為像素點p和q點的灰度值,CCen(p)為p點的變換值,符號?為按位連接,Np表示p的領域。
根據式(1)、式(2)可知左右視場中各像素視場的Census 變換值,基于Census 變換的匹配代價計算方法是計算左右視場對應兩個像素的Census 變換值的Hamming 距離,如式(3)所示,計算方法如圖1所示。
Fig.1 Hamming distance diagram圖1 Hamming距離示意圖
從上述函數可以看出,傳統(tǒng)的非參數Census 變換對中心像素過于依賴,由于光線強弱,會有噪聲對中心像素產生干擾,因而得到的比特串發(fā)生很大改變,通過計算Hamming距離得到匹配代價的準確性將極大降低。
對于以上問題,本文提出一種改進型Census 變換算法,該算法以選定的正方形窗口呈現,窗口大小如式(4)所示。
建立X-Y 直角坐標系,將中心像素作為坐標原點,水平向右,豎向向上為X 軸和Y 軸的正方向。在窗口中選取8個參考點Mi,參考點的坐標表示為:
將選取的8 個像素參考點按坐標順序構成一個新的正方形m,將左上角第一個m0開始按下標順序排列,依次比較其像素點的灰度值。比較方式如圖2 所示,若后一個像素灰度值大于前一個則記為1,否則記為0。這8 個比較后的值串聯(lián)起來形成一個比特串,即為中心像素點p的變換碼CCen,如式(6)所示。
最后根據式(3)可得到在視差范圍[dmin,dmax]內不同d下的匹配代價。
Fig.2 Pixel comparison method圖2 像素點比較方式
本文提出的改進型Census 算法對于大支持窗口的匹配速度提升較大,克服了傳統(tǒng)算法對中心像素點的依賴,有助于測距場景的快速實現。
本文提出的改進型Census 變換和AD 變換融合的代價計算,同樣遵循立體匹配算法的4 個步驟,即代價計算[14]、代價聚合[15]、掃描線優(yōu)化[16]、視差優(yōu)化。
AD(Absolute Differences)算法即亮度或顏色差的絕對值,其原理是左右視圖像素點的3 個顏色分量之差的絕對值取平均,如果是灰度圖像,則為灰度的亮度差。由于傳統(tǒng)Census 對于重復紋理處理效果不理想,而AD 這類基于單像素亮度差的方法可在一定程度上緩解這種重復紋理的問題,因此選擇AD 與Census 相結合。AD 計算代價如式(7)所示。
式中,CAD(p,d)為AD 變換的初始代價值,R、G、B 為圖像的3個通道,Ii為像素點的灰度值。
將AD 算法和Census 算法對應的代價簡單相加并不合理,由于這兩種算法的結果尺度不一樣,AD 算法結果表示為亮度差,范圍為[0,255],而Census 算法是比特串對應位值不相同個數,范圍為[0,N](N 為比特串的位數),因此定義歸一化公式(8)將兩者結果歸一化到相同的[0,1]區(qū)間,這樣可以將歸一化后的AD 算法與Census 算法進行相加得到新的匹配代價如式(9)所示。
式中,ρ(c,λ)可以設置參數使函數值的區(qū)間為[0,1],c 為代價值,λ為控制參數,其中c 和λ都為正數。Ccen(p,d)為Census 變換后的代價,CAD(p,d)為AD 變換后的代價。
AD-Census 代價聚合是采用十字交叉域代價聚合的方式,十字交叉域是每個像素都會有一個十字臂,該像素的亮度和十字臂上的所有像素亮度值相近。十字臂構造是以該像素為中心往上下及左右延伸,當遇到亮度與該像素差別較大時延伸停止,且延伸是有限的。十字臂對中心像素上下左右4 個臂延伸到下一個點pl滿足一定規(guī)則(以左臂為例),如式(10)—式(12)所示。
式中,Dc(pl,p)是pl和p像素點間的顏色差異,τ1、τ2、L1、L2是給定閾值,Ds(pl,p)是pl和p的空間長度。式(10)表明像素點pl和中心像素點p之間的顏色差異要小于閾值τ1,且像素點pl和它臂上的前一個像素pl+(1,0)的差異也要小于閾值τ1,防止臂延伸穿過邊緣像素,式(11)、式(12)表明,為了讓弱紋理區(qū)域包含更多像素,要求臂長閾值L1較大。而當臂長超過閾值L2時,設定一個更嚴格的顏色閾值才能使臂長延伸到L1。
上臂、下臂、右臂延伸規(guī)則和左臂相同,十字交叉域的結果不但考慮到周圍像素與中心像素之間的距離關系,而且能夠使代價聚合效率提高。
當每個像素的十字臂構造成完成后,就可以構造像素的支持域如圖3 所示。中心像素點p其支持域是包含垂直臂上所有像素的水平臂。圖3 中q就是p垂直臂上的某個像素,p的支持域包含q及其水平臂上的像素集合。
Fig.3 Cross principle圖3 十字交叉原理
對于p的代價聚合,先將所有水平臂上的像素代價值累加存儲,再將每個像素的垂直臂進行累加迭代4 次,代價聚合方式如圖4 所示。第1 次和第3 次順序為先水平臂再垂直臂,第2 次和第4 次順序為先垂直臂再水平臂。以這種方式進行迭代可降低非連續(xù)區(qū)域的視差匹配錯誤。
Fig.4 Cost aggregation method圖4 代價聚合方式
掃描線優(yōu)化是為了進一步降低誤匹配并提高代價可靠性。掃描線優(yōu)化在選擇優(yōu)化路徑上可以是4 路徑、8 路徑、16 路徑的方式,路徑數越多效果越好,但是時耗也越多。綜合考慮后選擇使用左右上下4 路方向優(yōu)化,最后對4 路優(yōu)化代價取均值代替該像素點。視差優(yōu)化將錯誤視差剔除掉,提高視差精度及填補視差圖。對于誤差較大的點和被遮擋區(qū)域[17],使用一致性檢查[18]后進行剔除和視差填充,在提高視差精度方面可以采用子像素優(yōu)化技術,即對最優(yōu)視差代價值與其前后的代價值進行二次曲線擬合,將曲線極值對應的視差值作為子像素視差。經過以上4個步驟得到最終視差圖。
本文采用C++語言在Visual Studio2017 集成環(huán)境下進行開發(fā)實驗,驗證改進型AD-Census 變換算法的效果。在64 位的臺式機上進行,硬件配置:AMD Ryzen 5 3600X 6-Core Processor @3.80 GHz 處理器,16G 內存,2060 顯卡,顯存6G。進行如下實驗:①分別采用傳統(tǒng)型AD-Census 立體匹配算法和改進型AD-Census 立體匹配算法對應代價計算耗時進行對比實驗,使用Middlebury 數據集中的圖像對進行驗證;②將改進型AD-Census 立體匹配算法進行測距實驗。
通過實驗在Middlebury 數據集中使用Cones、Teddy、Venus、Tsukuba 圖像對進行代價計算算法耗時實驗比較。如圖5 所示,使用9x9 支持窗口得到視差圖,將本文提出的改進型AD-Census 算法得到的視差圖和傳統(tǒng)型AD-Census 算法以及真實的視差圖作比較,4 組圖像從上到下分別為Cones、Teddy、Jadeplant、Tsukuba,其中Cones 和Teddy 兩組圖像分辨率為450×375 像素,Jadeplant 和Tsukuba 的分辨率分別為1 318×994 像素、384×288 像素,視差搜索范圍為0-64 像素。傳統(tǒng)型AD-Census 立體匹配算法和改進型AD-Census 立體匹配算法代價計算耗時如圖6所示。
Fig.5 Stereo matching result of test image pair圖5 測試圖像對的立體匹配結果
從視差圖效果上看,本文算法得到的視差圖與傳統(tǒng)算法和真實視差很接近。仿真實驗中,較低像素圖片視差范圍為[0-64],隨著支持窗口的增大,基于傳統(tǒng)的AD-Census 算法代價計算可達到0.6s 左右,而本文提出的改進型AD-Census 算法代價計算耗時穩(wěn)定在0.2s左右。對于高質量像素圖片,視差范圍在[0-320],由于視差范圍和圖像像素的增加,隨著支持窗口的增大,改進型AD-Census 算法代價計算耗時穩(wěn)定在6.8s 左右,而傳統(tǒng)的AD-Census 算法代價計算隨著支持窗口的增大可達到16s 左右。由此可知本文提出的算法在速度上有很大優(yōu)勢。因此,對于連續(xù)視場支持大窗口進行匹配,本文提出的算法是一種速度相對較快的測距算法。
由本文提出的算法得到視差圖,并應用于雙目測距,根據測距精度驗證得到視差圖的精度。根據得到的最終視差d,結合雙目系統(tǒng)測量原理可知目標物深度Z 的表達式為:
Fig.6 Cost calculation time-consuming comparison圖6 代價計算耗時比較
其中,B為雙目攝像機的基線長度,f為雙目攝像機焦距,Z為目標物深度信息。
本次測距實驗所用的雙目攝像機型號為zed,采集圖像分辨率為1 280×720(像素)。標定圖案由8 列6 行方塊組成,每個方塊實際大小為20mm×20mm,角點數為7×5。兩攝像機平行放置,基線距離約為120mm,焦距2.1mm,圖像分辨率為1 280×720像素。
雙目測距系統(tǒng)實現可劃分為:圖像采集、立體標定、立體校正、立體匹配和測距。采集16 張不同角度的圖片采用[19]實現標定,將采集到的16 張圖片對導入MATLAB 工具箱[20]中可以得到攝像機結果。下面給出了得到的左、右攝像機和雙目攝像機外部參數的場景模擬圖。圖7 為攝像機外部參數場景圖,圖7(a)為左攝像機外部參數場景圖,7(b)為右攝像機外部參數場景圖。圖7(c)為左右攝像機外部參數場景圖。攝像機標定結果如表1所示。
Fig.7 External parameter scene graph圖7 外部參數場景圖
Table 1 Camera calibration result表1 攝像機標定結果
由得到的內外參數可以看出外參數T 第一個元素絕對值為119.360 與攝像機實際基線120mm 很接近,說明得到的參數是準確的。再根據標定得到的參數通過對采集到的圖像對進行校正,圖8(a)是校正之前采集的左右圖像,圖片背景墻有彎曲的現象。圖8(b)是校正之后左右圖像對,圖片背景墻彎曲現象消失,左右視圖的極線都相互平行,對應點的縱坐標一致。
通過本文提出的改進型AD-Census 立體匹配算法得到視差圖并計算視差,根據雙目測距模型,目標物的深度Z等于基線長度B 與攝像機焦距f乘積與視差d的比值。
Fig.8 Effect of picture before and after correction圖8 校正前后效果
在測距實驗中,將被目標物分別置于離光心800mm 到3 000mm 處。根據攝像機標定的各項參數和式(10)可得到被測目標物的深度。實驗結果如表2所示。
Table 2 Experimental results表2 實驗結果
由表2 可知,根據本文提出的改進型AD-census 立體匹配算法在測距實驗結果中測量距離800mm 到3 000mm以內相對誤差小于5%,滿足實驗要求,隨著測量距離的增加,相對誤差呈現增長趨勢。
本文提出改進型AD-Census 立體匹配算法,通過采用經典的AD-Census 匹配和改進型AD-Census 匹配算法的速度進行對比實驗,使用Middlebury 數據集中的圖像對進行驗證,再將改進型AD-Census 匹配算法進行測距實驗以驗證算法的精確性。由實驗可知,傳統(tǒng)的AD-Census 算法隨著支持窗口的不斷增大其代價計算時耗也在不斷增大,而本文提出的改進型AD-Census 算法,對于低像素圖形,隨著支持窗口的增加,其代價計算時耗穩(wěn)定在0.2S 左右,對于高像素圖形,其代價計算時耗穩(wěn)定在6.8S 左右而不會隨著支持窗口的增加而增加。因此,對于大窗口進行匹配,效果比傳統(tǒng)算法更有優(yōu)勢。
通過將本文算法計算得到的視差用于測距實驗,由于攝像機本身的工藝限制如基線和焦距的長度有限可得到被測目標物距離光心800mm 到3 000mm 以內相對誤差小于5%,滿足實驗精度要求。由此證明,本文提出的算法不僅在速度上得到了提升,而且得到了有效的視差,能夠滿足測距系統(tǒng)的要求。
光照和弱紋理等因素的存在給目標匹配精度帶來了很大影響,雖然極大提高了匹配速度,但像素點的誤匹配率較高。為了得到更高的測距精度,可以將算法作進一步優(yōu)化并選擇合適的目標匹配區(qū)域進行細劃分匹配。