陶 洋,田家旺
(重慶郵電大學 通信與信息工程學院,重慶 400065)
立體匹配算法是雙目視覺從二維走向三維的重要途徑,是雙目立體視覺中核心步驟之一.立體匹配的目標是從左右視點采集到的圖像中找到對應的同名點,從而求得左右視角中同名點之間的視差.結合雙目測量的基礎理論,可以進一步完成基于雙目視覺的測量任務,例如測距、定位和三維重建等.按照匹配算法的輸出結果,立體匹配可以分為稠密匹配和稀疏匹配兩種.稠密匹配算法為圖像中所有像素點完成匹配.而稀疏匹配算法則是只匹配提取出的部分特征點.相對來說,稠密匹配算法獲得的視差信息更為豐富.稠密立體匹配算法可以分為基于深度學習、局部、全局、半全局4種類別.隨著深度學習的發(fā)展,基于深度學習的立體匹配算法近年來逐漸增多,能夠取得較高的視差圖精度.MC-CNN[1]是基于深度學習立體匹配算法的開山之作,作者通過一個5層的卷積網(wǎng)絡學習初始匹配代價,然后使用半全局立體匹配完成后續(xù)計算,取得了當時的最佳性能.全局立體匹配都基于如圖割[2]、動態(tài)規(guī)劃[3]等算法,都引入圖像的全局信息,通過最小化全局能量函數(shù)求取視差圖,效果較好,但與前者相同,計算量巨大,實時效果較差,難以在邊緣CPU設備上部署.基于局部信息的匹配算法以像素所在的局部窗口信息作為相似性測度依據(jù),這類方法中窗口尺寸和形狀均會影響匹配效果,匹配效果較差.半全局匹配算法(Semi-Global Matching,SGM)[4]綜合了全局和半全局的優(yōu)點,在盡可能保留算法精度的同時大大減少了計算復雜度,在工程上得到較多的應用.
在半全局立體匹配算法匹配精度的研究方面,Zabih R[5]提出的Census變換被廣泛應用于匹配代價計算,該方法結構簡單,但對局部窗口中心像素的依賴較強,對噪聲敏感.王陽萍[6]等人使用加速魯棒特征(Speed Up Robust Features,SURF)檢測遙感立體像對中潛在的匹配點,用來修改不同聚合方向上的路徑權重,提高了在弱紋理與視差不連續(xù)區(qū)域的匹配精度,但增加SURF步驟的同時,也帶來了新的計算負擔.黃彬[7]等人在Census變換階段引入權重,準確選擇中心點的參考像素值,并且使用多尺度聚合策略,將引導濾波作為代價聚合核函數(shù),匹配精度有所提高,但算法復雜度大幅增加,不利于并行實現(xiàn).Zhao C[8]等用Census窗口周圍像素代替中心像素進行變換,使其更加魯棒,得到了不錯的視差效果.但實際場景中的光照等因素更為復雜,基于Census變換的代價計算方式仍需改進.
在半全局立體匹配算法的效率研究方面,Hermann S[9]提出了分層迭代的半全局立體匹配算法,有了較大的速度提升.Rothermel M[10]等人與Hermann S的策略類似,并且使用先前的視差推導當前每個像素的動態(tài)視差搜索范圍,進一步提高了匹配效率,但在CPU平臺上的運行效率仍然很低,匹配一幀需要8秒.Li Y[11]在分層迭代算法基礎上結合多線程及原生128位指令集解決攝影測量影像的立體匹配效率問題,但移植性較差,原因在于每種平臺的指令集有所差別.Shrivastava S[12]擴展了傳統(tǒng)SGM的流水線架構,通過松弛依賴約束以并行方式處理多個像素,提高了算法效率,但精度損失嚴重.Lu Z[13]等使用下采樣及視差跳躍的策略,并且在聚合時對水平路徑加權,但算法引入了一個新的路徑權重參數(shù),增加了代價聚合的計算量.
綜上所述,現(xiàn)階段的半全局立體匹配算法在精度和效率方面均有較大進步,但并未將精度和效率進行很好的權衡,在邊緣CPU平臺上,需要高精度的同時,也需要高效的計算,尤其是在大尺寸圖像和大視差搜索范圍情況下.因此,本文提出一種基于改進匹配代價和分層策略的半全局立體匹配.該算法將樸素Census變換與中心對稱Census變換結合,共同構成變換序列,將AD代價與兩序列的漢明距離融合作為初始的匹配代價.減少對中心像素依賴的同時擴充了代價的區(qū)間,增加了代價的區(qū)分能力,可以在一定程度上提高算法在戶外場景中的匹配精度.其次,算法采用分層迭代的思想進行匹配,通過上層低分辨率圖像的匹配結果限制當前層高分辨率圖像中像素的視差搜索范圍,使得其搜索范圍不至于過大從而減少大量的無效計算,既可提高精度,也可提高效率.最后使用OpenCV中提供的統(tǒng)一指令集以及多核并行的方式實現(xiàn)算法計算加速,從而進一步實現(xiàn)硬件資源的高效利用,提高立體匹配的計算效率.
本算法的流程如圖1所示,輸入為極線校正后的雙目立體圖像對,算法根據(jù)輸入的原始圖像尺寸,自動確定金字塔的層數(shù)N,用于指導后續(xù)分層迭代,并且初始化第1層的視差搜索范圍,然后進入到分層迭代步驟.在每一層的匹配中,首先在預處理階段,對原始輸入圖像進行下采樣,得到當前層待匹配的左右圖像.在代價計算階段,使用融合的Census變換結合AD變換作為初始代價,采用4路徑代價聚合優(yōu)化視差值,視差計算采用WTA算法選擇視差空間中目標像素的最小匹配代價值所對應的視差值,對圖像中全部像素點進行上述計算后,得到粗略的視差圖.通過視差唯一性約束、子像素優(yōu)化、左右一致性檢查、空洞填充、中值濾波等步驟對視差圖進行優(yōu)化處理,獲得較為準確的視差圖.
在進行當前層的匹配之前,需要對圖像進行預處理.根據(jù)當前的金字塔層號L,對原始圖像進行下采樣,得到用于當前層需要完成匹配的左右圖像.在每一層進行下采樣之前,需要完成高斯濾波預處理,去除原始圖像中的噪聲.
傳統(tǒng)的Census變換僅用錨點像素與周圍鄰域像素做比較,導致Census變換嚴重依賴于中心像素,當圖像受噪聲、光照等外界條件干擾時,中心像素的亮度值可能嚴重失真,使得該像素的Census變換結果難以準確反映該點處的真實情況,影響最終精度.因此,本文在預處理階段使用高斯濾波消除噪聲,并且使用中心對稱Census變換[14](Center-Symmetric Census Transform,CSCT)中8組像素的比較結果作為補充,中心對稱Census變換能夠減少對中心像素的依賴,捕獲窗口內(nèi)距離較遠像素點之間的亮度關系.
融合的Census變換首先在局部5×5窗口內(nèi)進行樸素Census變換,得到變換的描述序列CensusStr(r,c),該序列一共24位.其次,采用CSCT的思想,選取如圖2所示的8個位置,為樸素Census變換序列補充8個變換代價位,使得變換的結果增長至32位,加強變換的魯棒性.
圖2 p1-p8位置圖Fig.2 p1-p8 Position map
p1~p8每個位置的像素均與其關于(r,c)中心對稱位置的像素比較亮度值大小關系,8個像素按序計算后得到字符串CSCTStr(r,c),此步驟可以用式(1)表示:
(1)
式中:?表示按位連接;pi為圖2中8個位置中的第i個位置的像素亮度值;p′i為pi關于位置(r,c)的中心對稱點的像素亮度值;ξ(pi,p′i)為比較函數(shù);CSCTStr(r,c)為變換結果.綜上,融合的Census變換序列定義如式(2)所示:
MergeStr(r,c)=(CensusStr(r,c)?8)+CSCTStr(r,c)
(2)
式中:?為左移運算符;MergeStr(r,c)為對點(r,c)位置的像素做融合Census變換的結果序列.則兩個像素點之間的匹配代價可以表示為式(3):
COSTCT=H(MergeStr(x),MergeStr(y))
(3)
式中:MergeStr(x)、MergeStr(y)為像素點x和y進行融合Census變換后得到變換序列;H為計算兩個變換序列之間Hamming距離的函數(shù);COSTCT是像素x和像素y之間的匹配代價值.由于CensusStr為24位,CSCTStr為8位,故MergeStr序列的長度為32位,所以對兩個MergeStr序列計算Hamming距離的結果在0~32之間,包括0和32共33個數(shù)值,用1個字節(jié)即可存儲該代價值.
Census變換可以很好的處理兩張圖像整體亮度不一致的情況,并且在弱紋理區(qū)域仍然魯棒,但缺點在于難以處理重復紋理區(qū)域.中心對稱Census變換減少了對中心像素的依賴,可在一定程度上抑制噪聲的影響.AD代價對亮度很敏感,在弱紋理區(qū)域表現(xiàn)較差,但是對重復紋理區(qū)域效果較好.AD變換代價的計算方法如式(4)所示:
COSTAD=|I(x)-I(y)|
(4)
式中:I(x)、I(y)為像素x和像素y的亮度值;| |為取絕對值運算符;COSTAD為亮度差絕對值代價計算結果.
基于上述分析,本文融合匹配代價是一種結合了融合Census變換與AD變換的代價計算函數(shù),可表達為式(5):
COST=(COSTCT+COSTAD?3)?2
(5)
根據(jù)式(5)可知,本算法中匹配代價的取值范圍在0至32之間,僅用1個字節(jié)即可存儲,在一定程度上節(jié)約了算法的空間開銷.
由于初始代價的計算只考慮了錨點像素局部的相關信息,對噪聲非常敏感,因此僅通過代價計算得到初始代價來獲取視差圖,將難以取得理想的效果.為了獲得較好的匹配效果,半全局立體匹配算法依舊采用全局立體匹配算法的思路,即全局能量最優(yōu)的策略.定義如式(6)中所示的全局能量函數(shù):
(6)
式中:E(D)為視差圖D的能量函數(shù);C(p,Dp)為點p的匹配代價值;q為p的鄰域Np中的像素;Dp、Dq分別的p點、q點在視差圖D中的視差值;T(x)為判斷函數(shù),條件x成立為1,不成立則為0;P1、P2為懲罰項,P1小于P2,用于相鄰像素視差相差1個像素的情況下的懲罰,P2則用于相鄰像素視差相差超過1個像素的情況下懲罰.式(6)的最優(yōu)化問題是一個NP完全問題,在實際中,半全局立體匹配算法采用了動態(tài)規(guī)劃的思想逼近式(6)的最優(yōu)解.半全局立體匹配算法對代價空間上的每個元素都考慮從多個方向(4、8、16個方向,本文中固定為4)進行聚合,然后將所有方向的聚合結果相加得到最后的匹配代價值,像素p在視差為d時,沿著某條路徑r的路徑代價聚合計算方法如式(7)所示:
(7)
(8)
本文采用分層迭代的匹配策略,通過上一層的視差圖限制當前層像素的搜索范圍,即每個像素的視差搜索范圍都是不同的.所以在式(7)中,Lr(p-r,d±k)有可能不存在,若Lr(p-r,d±k)不存在,則把該項作為正無窮處理.當k=-1,k=0,k=1均不存在時,式(7)便簡化為式(9):
L′r(p,d)=C(p,d)+P2
(9)
式中:L′r(p,d)為新的聚合代價.
較小的懲罰項能夠讓算法更好的處理視差變化小的區(qū)域,較大的懲罰項能夠讓算法更好的處理視差變化大、非連續(xù)的區(qū)域,因為圖像中灰度變化大的區(qū)域往往是圖像邊緣,其視差非連續(xù)的可能性大,所以,為了更好的處理視差非連續(xù)區(qū)域的匹配情況,P2往往根據(jù)相鄰像素的灰度差值動態(tài)調整,如式(10)所示:
(10)
式中:P1_init、P2_init為初始懲罰參數(shù);p(x)為像素x的亮度值;p(x-r)為像素x在路徑r上的前一個像素的亮度值.
經(jīng)過代價聚合,使用WTA算法得到每個像素較為粗糙的視差值,即對于任意像素p,遍歷像素p在三維聚合代價空間中的有效視差范圍,選出其中最小聚合代價所對應的視差值,即為像素p較為粗糙的視差值.在視差計算部分,采用二次曲線內(nèi)插的方法得到子像素精度,對剛剛選出的粗糙視差值所對應的代價值及其前后兩個視差代價值進行二次曲線擬合,二次曲線底部極值點所對應的視差值即確定為子像素的視差值.
經(jīng)過視差計算步驟得到的視差圖仍然存在較大的誤差,因此需要進一步優(yōu)化視差圖以提高其精度,本文的視差優(yōu)化步驟包括左右一致性檢查、視差空洞填充以及中值濾波.
左右一致性檢查的作用是找出視差圖中的誤匹配點、遮擋點等異常匹配點.通常先計算得到右側視差圖,如果左右視差圖對應像素點視差值的差值小于給定的閾值,則認為該點的視差是正確的,反之則認為該點視差是異常的,并予以剔除.計算右側視差圖常采用的辦法是交換左右圖像,重新進行一次立體匹配,這種方法運行效率不高.實際上,右側代價空間的每個代價值可以通過左側對應位置像素點的視差情況推導得到,推導關系如式(11)所示:
dispRight(r,c,d)=dispLeft(r,c+d,d)
(11)
式中:dispRight(r,c,d)為右側代價空間中坐標為(r,c)視差為d時的代價值;dispLeft(r,c+d,d)為左側代價空間中坐標為(r,c+d)視差為d時的代價值.但這種方法適用于固定視差搜索范圍的情況,本算法中每一層匹配的每一個視差的視差搜索范圍都不相同,所以本文采用如下策略:先根據(jù)左側視差圖全部像素的視差搜索范圍更新得到右側視差圖中每個像素位置的視差搜索范圍,并限制右側每個像素的視差搜索范圍在0至64之間,以保證不會出現(xiàn)較高的搜索時間開銷.得到右圖每個像素的視差搜索范圍后,再用式(11)計算得到右視差圖,同時使用二次曲線擬合,得到更為精細的子像素視差,最后完成左右一致性檢查.得到當前層視差圖后,根據(jù)當前層視差圖估計下層待匹配像素的視差搜索范圍,開始下一層的匹配.
2.6.1 分層迭代匹配策略
本文算法采用了SURE[10]算法中提出的思想,采用從粗到精的分層迭代匹配策略,通過限制每個像素的視差搜索范圍,達到大幅度減少視差搜索時間,提升搜索效率的目的.但本文未固定層數(shù),算法根據(jù)原始待匹配圖像的寬度自動確定層數(shù),高層的匹配結果不僅能為下層像素的搜索提供粗略的位置,而且能夠限制下層像素的搜索范圍,提高算法整體效率和結果的可靠性.在處理最上層的匹配時,由于沒有更上層的視差結果提供初值,所以,將最上層的初始視差搜索范圍設置為最上層的圖像寬度.
在視差填充過程中,采用標志位標記像素點.估計下層視差范圍時,根據(jù)像素點的標志位進行估計:若像素點是由填充算法估計得到的,則將其下層的搜索范圍擴至最大為64個像素,否則,在以其為中心的5×5局部窗口中,搜索最大視差值和最小視差值對下層搜索范圍進行估計,并限制下層像素的視差搜索范圍最大為64.
2.6.2 多核并行策略
本文所提算法在4核4線程的Intel(R)Core(TM)i3-9100T CPU @ 3.10GHz所支持的硬件平臺上開發(fā),算法任務與算法數(shù)據(jù)均并行處理,在算法任務的并行實現(xiàn)中,將待處理任務按行和視差進行分塊,4個線程并行處理.
在算法的數(shù)據(jù)并行實現(xiàn)環(huán)節(jié),使用OpenCV中的統(tǒng)一指令集.OpenCV統(tǒng)一指令集旨在提供一個各類計算架構的統(tǒng)一編程模型,將程序開發(fā)與計算機底層的SIMD指令集相分離.OpenCV統(tǒng)一指令集對外提供相同的調用接口,但在程序編譯期會自動選擇目標硬件平臺最優(yōu)的SIMD指令.本文中具體的硬件平臺支持AVX256指令集,可支持256位的向量化運算.
需要注意的是,在視差計算函數(shù)的向量化設計中,主要問題是要找到向量中的最小值及其下標,在OpenCV統(tǒng)一指令集中,沒有集成相關方法,所以使用SSE原生指令集中的_mm_minpos_epu16函數(shù),該函數(shù)只能進行128位的向量運算,返回向量中的最小值及其下標.所以,視差計算部分,一次可以同時進行8個視差值的處理.
其次,在進行左右一致性檢查時,本文算法并非交換左右圖像重新進行匹配,而是先根據(jù)左側視差圖的視差搜索范圍推算出右側像素點的視差搜索范圍,然后右側全部像素點根據(jù)自身的搜索范圍及視差關系,在左圖的三維代價空間中確定對應代價值,填充右圖的三維代價空間.最后在三維代價空間內(nèi)使用WTA、子像素優(yōu)化確定右圖像素點的視差值.
每個像素點的搜索范圍使用有符號整型在內(nèi)存中連續(xù)存儲,如:像素1的最小視差,像素1的最大視差,像素2的最小視差,像素2的最大視差…像素n的最小視差,像素n的最大視差.這樣的存儲方式便于使用向量進行算法優(yōu)化,而后續(xù)的填充右圖三維代價空間步驟中,計算時所需的數(shù)據(jù)在內(nèi)存中并不連續(xù),即使強行進行向量化運算,性能也難以提升.所以,本文僅對第一步(根據(jù)左側視差圖的視差搜索范圍推算出右側像素點的視差搜索范圍)進行加速.
先將右圖視差搜索范圍中的最小值初始化為32767,最大值初始化為-32768.后續(xù)的向量化運算只需取出左側像素的當前視差,與右圖的最大最小范圍進行對比,取最小值、最大值再存入右圖的視差范圍即可.由于視差范圍在內(nèi)存中是小大視差交叉存儲,所以取出小大視差時,需要解交叉取出,此步驟可以使用cv::v_load_deinterleave方法完成,該方法接受一個16位的指針p及向量a和b,該方法從p處取出16個整數(shù)值,奇數(shù)位元素依次放入向量a,偶數(shù)位元素依次放入向量b.在向量化計算完畢后,使用cv::v_store_interleave交叉存入內(nèi)存,該方法接受一個16位的指針p以及向量a和b,a和b中的元素交叉存入地址p開始的內(nèi)存中.
本文算法在Visual Studio 2017環(huán)境下,使用C++語言開發(fā),使用了OpenCV4.5.2 開源圖像處理庫,操作系統(tǒng)為Windows10×64,內(nèi)存為12GB,所使用的處理器為4核4線程的Intel(R)Core(TM)i3-9100T CPU @ 3.10GHz.
首先對算法的改進部分進行消融實驗,驗證各部分的有效性;其次,在KITTI 2012[15]和KITTI 2015[16]兩個公開的基準數(shù)據(jù)集上評估所提算法的誤匹配率,并且與一些基于SGM的立體匹配算法進行對比,最后把不同優(yōu)化程度的本文算法在實驗平臺上進行運行效率測試.
在消融實驗中,基準算法采用Census-SGM,實驗變量為高斯濾波預處理、代價計算方式、分層迭代匹配3個條件,為防止“視差填充”方法對上述3個條件產(chǎn)生視差圖的影響,在有視差填充和無視差填充時分別做了實驗.實驗評價指標采用非遮擋區(qū)域誤匹配率(Percentage of erroneous pixels in non-occluded areas,Out_Noc)和全部區(qū)域誤匹配率(Percentage of erroneous pixels in total,Out_All),誤匹配率閾值設為3Pixels,在KITTI 2012訓練集和KITTI 2015訓練集上分別評估,結果如表1所示.
表1 消融實驗數(shù)據(jù)表Table 1 Ablation experiment data table
實驗1、2,實驗3、4,實驗5、6,實驗7、8,這4組對照,每組內(nèi)兩個實驗只有代價計算方式不同,其他條件均相同,本文改進的代價計算方式都比傳統(tǒng)代價計算方式的誤匹配率低.尤其在實驗1、2中,無視差填充時,在KITTI 2015上的Out_Noc最大差值為15.71個百分點.在有視差填充時,實驗7、8的誤匹配率相差雖然不大,但使用改進代價計算的實驗8仍然效果較好.
實驗1、3,實驗2、4,實驗5、7,實驗6、8,在這4組對照內(nèi),前者不使用分層迭代匹配方式,后者使用分層迭代匹配,其余條件均相同.使用了分層迭代匹配的算法精度均明顯高于直接匹配的精度.
實驗1、5,實驗2、6,實驗3、7,實驗4、8,這4組對照,組內(nèi)兩個實驗分別不采用和采用高斯濾波進行預處理,有高斯濾波預處理的算法誤匹配率要明顯低于同組無高斯濾波預處理的結果,說明在預處理步驟中,加入高斯濾波可以有效提升匹配精度.
綜合來看,實驗8的誤匹配率比其他實驗均低,說明將改進的代價計算結合高斯濾波預處理及分層迭代的匹配方式,可以有效提高算法的匹配精度.
在KITTI 2012和KITTI 2015數(shù)據(jù)集上與最新的一些基于SGM的立體匹配算法進行對比,評價指標使用Out_Noc與Out_All,誤匹配率閾值使用3Pixels,在KITTI 2012測試集和KITTI 2015測試集上的對比結果如表2、表3所示.
表3 KITTI 2015對比實驗數(shù)據(jù)表Table 3 KITTI 2015 comparative experiment data table
RSSGM(Road Scene SGM)、RESGM(Resource Efficient SGM)和LRSGM(Low Resource SGM)側重于降低SGM算法的復雜度和內(nèi)存開銷,使其能夠實時計算.為了節(jié)省硬件資源,LRSGM提出了一個多階段的四周期分時流水線架構,采用圖像降采樣和視差跳躍策略,RESGM同樣使用降采樣和視差跳躍.同時增加了路徑加權、亞像素插值等進一步提升了匹配精度.然而,RESGM算法在KITTI 2012非遮擋區(qū)域和全部區(qū)域的誤匹配率分別為6.66%和7.60%,分別比本文方法高1.94和1.55個百分點.RSSGM提出了一種Census變換的變體,并在SGM中引入圖像的邊緣信息來處理真實道路場景的復雜光照變化,該方法在KITTI 2012非遮擋和全部區(qū)域的誤匹配率分別比本文方法高了3.99和4個百分點.DRSGM(Dependency Relaxation SGM )擴展了傳統(tǒng)SGM的流水線架構,通過松弛依賴約束以并行方式處理多個像素,提高了算法效率,但精度損失嚴重.CSGM4采用4路徑聚合,遞歸地執(zhí)行一維雙邊濾波來建立各路徑之間的信息交互,在兩個數(shù)據(jù)集中都獲得了較低的誤匹配率.在KITTI2012數(shù)據(jù)集的非遮擋區(qū)域和全部區(qū)域上,本文方法比CSGM4的誤匹配率分別低了0.46和0.57個百分點.而在KITTI2015數(shù)據(jù)集上,本文方法比CSGM4的誤匹配率分別高出了0.07和0.61個百分點.在代價計算階段,CSGM4采用了9×9窗口大小的Census變換,生成了81位的比特串,而本文使用的代價計算方法僅用了32位的比特串,代價的區(qū)分度比CSGM4低,并且空間開銷更小.非遮擋區(qū)域的視差點全部由匹配算法得出,無視差填充方法的影響,在非遮擋區(qū)域,二者誤匹配率僅相差0.07個百分點,更能說明本文算法生成的視差圖質量較高.
可以看出,RSSGM、RESGM、LRSGM以及DRSGM雖然提高了SGM的效率,但以準確性為代價.CSGM4在KITTI 2015數(shù)據(jù)集上的誤匹配率雖然比本文算法低,但在代價計算階段采用了更大的窗口尺寸,帶來更大的空間開銷.本文方法采用了改進的代價計算方式以及分層迭代匹配策略,在KITTI 2012和KITTI 2015兩個公開的基準數(shù)據(jù)集上都獲得了較理想的誤匹配率.圖3展示了本文方法在KITTI 2015訓練集上的部分視差圖和相應的誤差圖,從上至下依次為原圖(左)、本文算法生成的視差圖和誤差圖,從圖3(a)~圖3(d)依次為KITTI 2015訓練集中編號71、128、142、171的圖像.
本文還在KITTI 2015訓練集上和其他基于SGM的改進算法進行了比較,評價指標依然采用Out_Noc與Out_All,即視差圖在非遮擋區(qū)域誤匹配率和全部區(qū)域誤匹配率,對比結果如表4所示.
表4 KITTI 2015訓練集對比數(shù)據(jù)表Table 4 KITTI 2015 training set comparison data table
ReS2tAC-CUDA方法基于GPU實現(xiàn),有較高的并行度,采用窗口大小為9×7的Census變換結合漢明距離作為初始代價,但在全部區(qū)域上的誤匹配率比本文高1.5個百分點.ROSGM(Region Optimized SGM,ROSGM)采用優(yōu)化策略,在局部范圍內(nèi)搜索最小代價作為代表,僅對這些最小代價進行2路徑的聚合,運行效率大大提高,但在最終視差圖的誤匹配率上比本文高了1.15和1.07個百分點.
根據(jù)優(yōu)化程度,分為未經(jīng)優(yōu)化的本文算法、僅使用并行優(yōu)化的本文算法以及完全加速的本文算法(并行+分層)3種進行算法效率的驗證.實驗使用Middlebury 2014立體匹配數(shù)據(jù)集中的全尺寸Teddy圖像進行算法效率評估,該圖片的分辨率為1800×1500,最大視差為256個像素.在實驗中,3種算法除效率優(yōu)化程度不同以外,其他參數(shù)均保持一致;視差圖后處理采用左右一致性檢查、小連通域剔除以及3×3中值濾波;最大視差搜索范圍分別設置為64、128、256,以驗證算法在不同視差下的運行效率.
實驗中計時方式為:算法完成100次匹配操作,計算平均耗時.為了得到較為準確的對比結果,實驗中僅統(tǒng)計各算法在匹配階段的時間消耗,如內(nèi)存空間的申請、釋放以及對象初始化等時間消耗均未進行統(tǒng)計.時間、空間效率測試結果如表5、圖4和圖5所示.
表5 效率實驗數(shù)據(jù)表Table 5 Efficiency test data table
圖4 時間開銷Fig.4 Running time
圖5 空間開銷Fig. 5 Memory requirement
需要說明的是,完全加速的本文算法的視差搜索范圍會根據(jù)輸入圖像尺寸自動調整,所以雖然指定了3種視差搜索范圍,但實際匹配時不會使用.
從表5可以看出,在搜索范圍為64時,完全加速的本文算法較未經(jīng)優(yōu)化的本文算法,效率提升6.5倍左右,在搜索范圍為128時,效率提升12.2倍左右,在搜索范圍為256時,效率提升23.6倍左右,提升的倍數(shù)與視差范圍有關,理論上,視差搜索范圍越大,本文算法的優(yōu)勢越明顯.
表5中,僅使用并行優(yōu)化的本文算法在視差為64時,時間效率比完全加速時高,但其匹配結果是不完整的.原因在于,僅使用并行優(yōu)化時,其搜索范圍最大只有64,而測試圖片Teddy的最大搜索范圍是256,所以算法沒有對視差大于64的區(qū)域進行處理.在視差64、128與256這3種情況下得到的視差圖如圖6所示.
圖6 3種視差得到的視差圖Fig.6 Disparity map obtained by three kinds of disparity
從空間開銷來看,未經(jīng)優(yōu)化的算法與僅使用并行優(yōu)化的算法,空間開銷相同,與視差范圍成正相關,完全優(yōu)化(并行+分層)的本文算法由于與視差范圍無關,僅與圖像寬度有關,所以內(nèi)存開銷無變化,并且明顯小于其他兩種算法.
利用融合的代價作為立體匹配的初始代價,提高了代價的區(qū)分能力;在預處理階段使用高斯濾波處理待匹配圖像,可有效提高后續(xù)計算準確度;采用分層迭代匹配、多核并行及AVX256指令集的計算策略,可以有效提高邊緣CPU設備執(zhí)行立體匹配算法的效率,并且可以在一定程度上降低內(nèi)存開銷.實驗結果表明,本文所提的匹配算法在KITTI 2012和KITTI 2015基準數(shù)據(jù)集上的誤匹配率可以達到4.72%和6.04%.使用Middlebury數(shù)據(jù)集中的全尺寸圖像測試效率,在256視差條件下,所提算法在完全優(yōu)化時的運行效率是未優(yōu)化時算的23.6倍,并且在視差圖的誤匹配率方面可以達到主流經(jīng)典算法的水平.這對立體匹配算法在邊緣CPU設備上的應用具有現(xiàn)實意義.