杜晨瑞,李英祥
(成都信息工程大學 通信工程學院,成都 610225)
近年來隨著計算機視覺領域的迅猛發(fā)展,基于視覺的三維重建已經成為一個非常熱門的方向,雙目視覺作為其中一種重要的分支也越來越得到大家的關注.立體匹配是從雙目視覺到三維重建中的一個非常關鍵的步驟,對重建效果影響巨大.根據Sharstein 等[1]提出的雙目立體匹配理論框架,立體匹配主要分為以下4 個步驟:匹配代價計算、匹配代價聚合、視差計算以及視差精化.當前主要的立體匹配算法又可以根據在匹配代價計算后是否采用代價聚合分為全局和局部立體匹配算法.全局立體匹配算法的核心思路是在計算匹配代價后,構建一個全局的能量函數(shù),通過全局優(yōu)化理論方法最小化能量函數(shù)估計視差.全局立體匹配算法匹配精度高,但其運行速度慢且算法復雜度較高.局部立體匹配算法充分利用像素點周圍的局部信息,通過代價聚合來估計視差,得到視差的局部最優(yōu)解.相比于全局立體匹配算法,精度稍低,但運行速度快且算法復雜度較低.
現(xiàn)有的局部立體匹配算法主要關注于改進代價計算和代價聚合兩部分來提高算法精度.常見的匹配代價計算方法有基于像素的匹配代價如灰度絕對值(Adsolute Differences,AD)、灰度差平方(Squared Differences,SD)等;基于窗口的匹配代價如灰度差絕對值和(Sum of Absolute Difference,SAD)、歸一化互相關(Normalized Cross Correlation,NCC)等;以及基于非參數(shù)變換[2]的匹配代價如Census、Rank 等.一般來說,基于像素和窗口的代價計算方法對噪聲和光照變化非常敏感,Census變換對光照變化不敏感,但在重復紋理區(qū)域效果較差,因此融合多種代價計算方法也成為一種常用的手段.Hosni 等將SAD 和梯度信息結合作為性的代價計算方法;Mei 等[3]結合灰度差絕對值和Census 變換進行代價計算,在弱紋理區(qū)域和重復紋理結果區(qū)域都取得了很好的結果;Zhu 等[4]提出將AD、梯度信息和Census變換結合,提高了匹配精度.
代價聚合的方法主要分為自適應窗口和自適應權重的方法.Yoon 等[5]首先提出使用雙邊濾波器進行代價聚合,提出了自適應權重的算法,該算法的主要思想視為匹配窗口中每一個像素賦予一個權重,而權重通過其到窗口中心點的顏色差和距離得到,但算法復雜度較高,且運行速度較慢.Hosni 等[6]提出使用引導濾波替代雙邊濾波進行代價聚合,該算法整個計算過程都是線性的,計算效率大幅提高,在保持運行速度的情況下具有良好的匹配精度.Zhu 等[7]優(yōu)化Census 變換策略,并講動態(tài)規(guī)劃引入到代價聚合中,有效的提升了代價聚合的效率.
為在保持運行速度的前提下,提高視差精度,本文提出了一種改進的基于跨尺度引導濾波的立體匹配算法.首先融合SAD 和改進的Census 變換兩種代價計算方法,然后采用基于跨尺度的引導濾波進行代價聚合,在進行視差計算時,并沒有采用常用的贏者通吃(Winner-Take-All,WTA)方法,而是通過制定一個判斷準則判斷圖像中每一個像素點的最小聚合代價對應的視差值是否可靠,當判斷為視差不可靠時,對像素點構建自適應十字交叉窗口,并基于自適應窗口修正該像素點對應的視差值,最后進行視差精化得到最終的視差圖.實驗表明,相比于當前的局部立體匹配算法,本文所提出的算法可以獲得更高精度的視差圖.
由He 等[8]提出的引導濾波算法,是一種能夠實現(xiàn)邊緣保留特性的濾波方法.
設I為引導圖像,p為待濾波圖像,q為濾波后圖像,引導濾波基于如下假設:在以各個像素為中心的窗口 ωk內,q由I線性轉換得到:
式(1)中,ωk表示以像素k為中心、以r為半徑的方形窗口;ak和bk表示線性系數(shù),在窗口ωk內為固定值.
在窗口 ωk內,通過最小化噪聲能量求解線性參數(shù)ak和bk:
式(3)中,ε表示一個正則化系數(shù).εa2k作為平滑項,防止線性系數(shù)ak過大,通常有ε >0 .正則化系數(shù)ε 對線性系數(shù)ak有懲罰作用,當ε 取值越大,懲罰作用越強,濾波后圖像q 越平滑;當ε 取值越小,懲罰作用越弱,濾波后圖像q 邊緣保留越完整.
式(3)的解為:
式(4)、(5)中,μk和 σ2k分別表示引導圖像I在窗口ωk內的均值和方差;| ω|表 示窗口 ωk內的像素數(shù);pk表示待濾波圖像p在窗口 ωk內的均值.
本文算法由代價計算、跨尺度引導圖濾波以及視差計算三部分組成.核心算法流程如圖1所示.首先對原始圖像進行降采樣,得到多尺度圖像,并對每一尺度圖像對計算其匹配代價,構建多尺度原始代價空間;然后基于引導濾波對多尺度原始代價空間進行代價聚合,并加入正則式項,優(yōu)化相鄰尺度的一致性問題;最后以處理后的代價空間為基礎計算視差,根據視差判斷準則,對不可靠視差進行優(yōu)化.
圖1 算法流程圖
代價計算的目的是量化左右圖像對應像素之間的相似程度,在設計代價計算方法時面對的主要問題是像素級的相似性判斷對光照變化、噪聲等非常敏感,非常容易誤匹配.一般的計算方法有SAD、Census 和歸一化互相關等,同時多種代價計算方法融合也是很常用的方法.本文采用的基于顏色通道的SAD 和census融合的代價計算方法.
假設左圖中的一個像素點為pi,坐標為(x,y),相對應的右圖中的像素點為坐標為(x-d,y),其中d 為視差.以像素點pi為 中心,半徑為r的矩形窗位ωi,分別計算CAD(pi,d)和Ccensus(pi,d)的值.
式(6)、(7)中I(ωi)表示在矩形框ωi中,包含的像素點的平均值,N為矩形框的像素點個數(shù).Ilc(ωi)和Irc(ωi)用于區(qū)分單一顏色通道和左右圖像.
在計算Ccensus(pi,d)時,采用在左圖像對應的灰度圖像中計算矩形窗內像素的平均值,并依次比較矩形窗中像素點與平均值,得到二進制編碼cenl(pi),然后根據同樣的方法計算右圖的cenr(pi).通過計算兩個二進制編碼串的Hamming 距離,得到Ccensus(pi,d).其計算公式如下:
SAD-census 聯(lián)合匹配代價的定義為:
其中,ρ (C,λ)是關于C的函數(shù):
其中,λcensus和 λAD參數(shù),其主要目是通過該函數(shù)將兩類代價值控制在[0,1],使代價不會因為某一項發(fā)生較大的突變.
傳統(tǒng)的匹配代價聚合方法主要考慮原始圖像,即在最細的尺度進行研究.其聚合代價可以視為一個加權最小二乘問題[9],即
式(11)中(i,d)為 中心像素pi在視差為d時的聚合代價,K(i,j)為其鄰域像素pj的支持權重,Zi=為歸一化常數(shù),ωi為中心像素i的支持窗口.z為待計算的聚合代價.
為了融合多尺度的信息,充分利用粗尺度信息提高弱紋理和無紋理區(qū)域的匹配精度,Zhang 等[10]通過對圖像下采樣獲取多尺度信息,提出了跨尺度模型來聚合多尺度匹配代價,在優(yōu)化目標中添加廣義L2 正則化項,使匹配代價在相鄰尺度上具有一致性,即:
式(12)中上標s為下采樣尺度空間,S為下采樣的最大次數(shù).γ為正則化因子.
代價聚合得到的代價空間,同時包含了對應像素之間的相似度信息和對應像素鄰域之間的相似度信息.在計算每個像素點的視差值時,傳統(tǒng)算法一般采用贏者通吃(WTA)的策略簡單地選擇最小匹配代價對應的視差值作為該像素對應的視差值.
然而,考慮到最小匹配代價對應的視差值不一定等于真實視差值.WTA 策略并不是一個好的選擇視差的策略.根據聚合后的代價空間信息,可以對視差的可靠性進行判斷.一個常用的視差可靠的判斷依據[11]如下:
式(13)、(14)中對于任意像素pi,Ci,1表示最小匹配代價,Ci,2表 示次最小匹配代價.Cd越小,則在一定程度上說明匹配的視差值越可靠.當設定一個閥值Cth,可以和容易判斷當前像素點的最小的匹配代價對應的視差值是否可靠.
對于不可靠的視差值還需要進一步的處理.一般來說某個區(qū)域梯度變化的不規(guī)則通常會導致其和噪聲具有高相似性,從而導致引導濾波將其誤認噪聲.所以本文采用基于梯度相似性的自適應窗口來處理不可靠視差值,如圖2所示.
圖2 基于梯度相似性的自適應窗口
從圖像左上角開始,按照從上到下、從左到右的順序搜索視差不可靠像素點,對于搜索到的每一個像素點pi=(xi,yi),以像素pi為中心從垂直和水平兩個方法構建自適應窗口.根據圖像的區(qū)域梯度結構自適應地確定臂長,令四個方向上的臂長分別為hli、hri、vui和vbi.以hri為例,使用x方向上的Sobel 算子對像素i右側的像素進行梯度相似性檢測,其目的是在相鄰像素梯度相似的情況下找到最大的水平右臂長.設像素pi的水平右像素點為pi+j=(xi+j,yi),j=1,2,3,···,N,則有:
式(15)、(16)中,L表示最大臂長;Gx(j)表示像素點pi+j在x軸方向上的梯度值;?表示梯度相似性的判定閥值.
確定hli、hri、vui和vbi四個方向上的臂長后,水平部分Hi和垂直部分Vi定義如下:
像素點pi的 自適應窗口Ui定義如下:
由于自適應窗口Ui中的像素梯度結構相似,可以認為它們是位于相同的區(qū)域內,所以具有相同的視差值.選擇窗口Ui中的像素匹配代價和最小的視差值,作為窗口Ui中的每個視差不可靠像素的結果時差之,即
處理完成后,將窗口Ui中的所有視差不可靠像素標記為可靠像素,繼續(xù)搜索下一個視差不可靠像素進行處理,直到所有視差不可靠的像素點全部處理.
為驗證本文算法的有效性,在Clion 集成開發(fā)環(huán)境中結合圖像處理開源庫OpenCV,使用C++實現(xiàn)了算法.實驗環(huán)境為:Ubuntu16.04 系統(tǒng),Intel i7-4720HQ,內存8 GB.采用學術界公認的立體匹配算法測試平臺Middlebury[12]進行測評.該網站提供了4 組標準色彩立體匹配圖以及其對應的真實視差圖,分別為:Tsukuba(384 像素×288 像素),Venus(434 像素×383 像素),Teddy(450 像素×375 像素),Cones(450 像素×375 像素).通過將實驗結果視差圖與真實視差圖比較并量化匹配誤差,從而客觀地對算法效果進行評價.其中實驗中參數(shù)設置如下:Cth=0.7,? =1.0.
圖3中為在Middlebury2006 標準立體圖像數(shù)據集中的實驗結果.圖3(a)為各組標準圖像對的原始左圖像,圖3(b)為各組標準圖像對的真實視差圖,圖3(c)為單尺度引導濾波算法(GF)[6]的視差圖,圖3(d)為跨尺度引導濾波算法(S-GF)[10]的視差圖,圖3(e)為本文算法的視差圖.以上幾種算法與本文算法相關性較大,具有很高的可比性.由對比結果可以看出,本文算法對4 對標準圖像對都有一定程度的精度提升.
表1為本文算法與其他局部立體匹配算法的定量結果對比.其中n-occ 為非遮擋區(qū)域誤匹配像素百分比,disc為深度不連續(xù)區(qū)域誤匹配像素百分比,all 是全部區(qū)域誤匹配像素百分比.通過它們的均值可以得出4 組標準圖像對的平均錯誤率(Average Percent of Bad Pixels,Avg PBM).從表1數(shù)據可以看出,本文算法同GF 算法相比精度提高了0.81 個百分比,同S-GF 算法相比提高了0.2 個百分點.本文算法盡管在Tsukuba 精度上有所降低,但在Venus,Teddy 和Cones 的匹配精度上有了顯著提高.
參數(shù)Cth為判斷像素點視差是否可靠的判定閥值,參數(shù) ?為構建基于梯度的自適應十字交叉窗口時,判斷梯度結構相似性的閥值.這兩個參數(shù)對視差計算得到視差圖的精度都起到了非常大的影響.對于參數(shù)Cth而言,其越小判斷像素點視差值是否可靠的標準越嚴格,越大則判斷標準越放松.對于參數(shù) ?而言,其越小則構建的十字交叉窗口越小,越大則構建的十字交叉窗口越大.十字交叉窗口的大小會直接影響匹配精度.為得到最高的匹配精度,需要通過實驗確定合理的 ?值.為得到最高的匹配精度,需要通過實驗確定合理的Cth和?值.在保持其他實驗條件和參數(shù)不變的情況下,對Cth從[0.3,1]之間的取值進行了實驗,計算匹配誤差,實驗結果如圖4所示.在保持其他實驗條件和參數(shù)不變的情況下,對 ?從[0.2,2]之間的取值進行了實驗,計算匹配誤差,實驗結果如圖5所示.
圖3 標準圖像對不同方法下的視差圖對比
表1 不同算法誤匹配像素百分比
圖4 不同C th 取值下的誤匹配率
圖5 不同? 取值下的誤匹配率
從圖4、圖5可以看出,對于Venus 數(shù)據,誤匹配率受參數(shù)Cth和 ? 值得影響不明顯.而對于其他3 組圖像數(shù)據,當Cth=0.7,? =1.00時,得到的視差圖精度最好.
為提高視差圖精度同時保持較快的運行速度,本文提出了一種改進的跨尺度引導濾波算法.首先融合SAD 和Census 變換兩種代價計算方法,然后采用基于跨尺度的引導濾波進行代價聚合,在進行視差計算時,并沒有采用常用的贏者通吃(Winner-Take-All,WTA)方法,而是通過制定一個判斷準則判斷圖像中每一個像素點的最小聚合代價對應的視差值是否可靠,當判斷為視差不可靠時,對像素點構建基于梯度相似性的自適應窗口,并基于自適應窗口修正該像素點對應的視差值,最后進行視差精化得到最終的視差圖.實驗結果表明,通過達到精度和速度的平衡.在接下來的研究中,會基于GPU 平臺重構代碼,實現(xiàn)并行運算進一步提高算法運行速度.