閆小宇,陸凡凡,葛蘆生
(安徽工業(yè)大學(xué)電氣與信息工程學(xué)院,安徽馬鞍山 243032)
計(jì)算機(jī)視覺(jué)是通過(guò)建立二維圖像與三維世界之間的信息關(guān)系來(lái)模擬人類視覺(jué)對(duì)事物處理的方法,其對(duì)三維信息的感知離不開立體視覺(jué)技術(shù),具有簡(jiǎn)單、可靠、靈活、使用范圍廣等特點(diǎn),被越來(lái)越多地用于非接觸性檢測(cè)。立體匹配在近年被廣泛用于無(wú)人機(jī)巡檢、無(wú)人駕駛和3D-SLAM地圖重構(gòu)等領(lǐng)域[1-3],其可分為初始代價(jià)計(jì)算、代價(jià)聚合、掃描線優(yōu)化、視差優(yōu)化4 個(gè)步驟,初始代價(jià)計(jì)算為最基礎(chǔ)的步驟,對(duì)后續(xù)立體匹配和視差提取起重要作用。全局立體匹配和局部立體匹配算法是目前最常用的立體匹配算法。經(jīng)典全局立體匹配算法有動(dòng)態(tài)規(guī)劃(dynamic programming,DP)[4]、置信傳播(belief propagation,BP)[5]、圖割[6](graph cuts,GC)等算法,這些算法得到的視差圖效果好,但耗時(shí)長(zhǎng)。與之相比,局部立體匹配算法計(jì)算代價(jià)耗時(shí)少、速度快、效率高,能夠快速恢復(fù)豐富紋理區(qū)域的視差[7]。常見(jiàn)的局部立體匹配算法有AD-Census 算法[8]、絕對(duì)誤差(absolute differences,AD)、跨尺度代價(jià)聚合算法[9]等。
在實(shí)際測(cè)距應(yīng)用中,光照、噪聲對(duì)代價(jià)計(jì)算的影響較大,一方面使立體匹配和視差計(jì)算的精度大幅降低;另一方面大幅增加匹配時(shí)耗,影響測(cè)距的準(zhǔn)確性。Lim 等[10]對(duì)光照下不同匹配代價(jià)計(jì)算,發(fā)現(xiàn)光照、噪聲對(duì)Census變換的影響較小,而對(duì)計(jì)算像素灰度值的影響較大,如絕對(duì)誤差和(sum of absolute differences,SAD)等。傳統(tǒng)Census 變換對(duì)中心像素點(diǎn)的依賴性過(guò)大,對(duì)噪聲的抗干擾能力較差。為解決這類問(wèn)題,Hosni等[11]將梯度信息與SAD 相結(jié)合,將選取匹配梯度和支持窗口內(nèi)的SAD 作為匹配中心像素代價(jià)值。對(duì)于Census 變換算法,Chang等[12]將Census變換的中心像素點(diǎn)與支持窗口內(nèi)選取的8個(gè)像素點(diǎn)進(jìn)行比較,增強(qiáng)了匹配能力,但未擺脫中心像素點(diǎn)。對(duì)于中心像素點(diǎn)的處理,呂倪祺等[13]將中心像素替換成支持窗口內(nèi)像素的加權(quán)平均值,并與AD 特征代價(jià)計(jì)算相結(jié)合,相對(duì)于單像素的匹配代價(jià),其可靠性較高,但復(fù)雜度高、計(jì)算耗時(shí)較嚴(yán)重。鑒于此,為改善雙目測(cè)距系統(tǒng)的立體匹配耗時(shí)和精度,提出一種改進(jìn)型SAD-Census 立體匹配算法,實(shí)驗(yàn)表明該算法不僅提高了圖像對(duì)的立體匹配速度,也提高了匹配精度。
傳統(tǒng)Census 變換是選定一個(gè)長(zhǎng)寬為奇數(shù)的支持窗口,比較領(lǐng)域支持窗口內(nèi)的像素點(diǎn)q對(duì)應(yīng)的灰度值與支持窗口的中心像素點(diǎn)p對(duì)應(yīng)的灰度值,形成比特串,并將其當(dāng)作中心像素點(diǎn)p的Census 變換值CCen,如式(1)。其中比較函數(shù)由式(2)定義。式中:I(p),I(q)分別為像素點(diǎn)p和q點(diǎn)的灰度值;CCen(p)為p點(diǎn)的變換值;符號(hào)?為按位連接;Np為p的領(lǐng)域。根據(jù)式(1),(2)可知左右視場(chǎng)中各像素視場(chǎng)的Census 變換值,Census 變換的匹配代價(jià)計(jì)算是計(jì)算出左右視場(chǎng)內(nèi)2 個(gè)像素點(diǎn)對(duì)應(yīng)Census 變換值的Hamming 距離,計(jì)算方法如圖1。圖中L,R 分別為左右視圖;u,v為像素點(diǎn)坐標(biāo);d為視差值。Hamming距離計(jì)算公式如式(3)。
圖1 Hamming距離Fig.1 Hamming distance
SAD 算法是將左右視場(chǎng)中對(duì)應(yīng)的像素點(diǎn)求差取絕對(duì)值之后進(jìn)行累加,SAD 是一種左右視場(chǎng)塊之間的相似度評(píng)估函數(shù),如式(4)。
式中:IL(x,y),IR(x,y)分別為位于左右視場(chǎng)像素點(diǎn)(x,y)的灰度值;用o,h遍歷支持窗口W內(nèi)的每個(gè)像素,每進(jìn)行一次遍歷,視差d就會(huì)發(fā)生改變,以此來(lái)尋找對(duì)應(yīng)的最小SAD值,此時(shí)的像素點(diǎn)為匹配點(diǎn)。
傳統(tǒng)Census 變換對(duì)中心像素過(guò)于依賴,由于光照、噪聲易對(duì)中心像素造成干擾,影響比特串的值,通過(guò)計(jì)算Hamming 距離得到的匹配代價(jià)準(zhǔn)確性會(huì)大大降低。對(duì)此,提出一種改進(jìn)型Census 變換算法,以選定的正方形為支持窗口,窗口大小a= 2n- 1,n≥2,n∈N。
建立XOY直角坐標(biāo)系,中心像素為坐標(biāo)原點(diǎn),水平向右、豎向向上分別為X軸和Y軸的正方向。在支持窗口中選取8個(gè)參考點(diǎn)Mi,參考點(diǎn)的坐標(biāo)如式(5)。
按式(6)順序構(gòu)成一個(gè)新的正方形m,從左上角第一個(gè)m0開始依次比較其像素點(diǎn)的灰度值,若后一個(gè)像素點(diǎn)的灰度值大于前一個(gè)則記為1,否則記為0。得到一個(gè)字節(jié)的比特串,將其作為中心像素點(diǎn)p的變換碼CCen,如式(6)。
根據(jù)式(3)可得到視差在[dmin,dmax]范圍內(nèi)的匹配代價(jià)。改進(jìn)型Census算法只選取中心像素周圍的8個(gè)參考點(diǎn),大大降低了代價(jià)計(jì)算量,較大提升了支持窗口的匹配速度,克服了傳統(tǒng)算法對(duì)中心像素點(diǎn)的依賴導(dǎo)致誤匹配等問(wèn)題,可快速實(shí)現(xiàn)測(cè)距場(chǎng)景。改進(jìn)型Census變換和SAD算法融合的代價(jià)計(jì)算同樣遵循立體匹配算法的4個(gè)步驟,即代價(jià)計(jì)算[14]、代價(jià)聚合[15]、掃描線優(yōu)化[16]、視差優(yōu)化,最終得到視差圖。
SAD算法和改進(jìn)型Census變換算法的結(jié)果尺度不統(tǒng)一,SAD算法的結(jié)果為灰度值差,范圍在[0,255];改進(jìn)型Census變換算法結(jié)果為比特串對(duì)應(yīng)位的個(gè)數(shù),范圍在[0,K](K為比特串的位數(shù))。故定義歸一化式(7),將兩者結(jié)果歸一化到[0,1]區(qū)間,將歸一化的改進(jìn)型Census變換算法與SAD算法相加,得到新的匹配代價(jià),如式(8)。
式中:ρ(C,λ)為歸一化指數(shù)函數(shù),可設(shè)置參數(shù)使函數(shù)值的區(qū)間為[0,1];C為代價(jià)值,λ為控制參數(shù),C和λ均為正數(shù);CCen(p,d)為Census 變換后的代價(jià);CSAD(p,d)為SAD 變換后的代價(jià);對(duì)于λCen與λSAD經(jīng)反復(fù)測(cè)試最終分別設(shè)定為10,30。
SAD-Census 代價(jià)聚合是十字交叉域代價(jià)聚合的方式。構(gòu)造十字臂是以某像素為中心往上下及左右延伸,待匹配像素亮度與十字臂上像素的亮度相近,且亮度差別較大時(shí)停止延伸。十字臂對(duì)中心像素上下左右4個(gè)臂延伸到下一個(gè)點(diǎn)pl需滿足一定規(guī)則(以左臂為例),如式(9)~(11)。
式中:Dc(pl,p)為pl和p像素點(diǎn)間的顏色差異;τ1,τ2,L1,L2為給定閾值;Ds(pl,p)為pl和p的空間長(zhǎng)度。
上臂、下臂、右臂的延伸規(guī)則和左臂相同,對(duì)于十字交叉域的結(jié)果,不但考慮到了周圍像素與中心像素之間的距離關(guān)系,而且能夠提高代價(jià)聚合效率。構(gòu)造完每個(gè)像素的十字臂,就可構(gòu)造像素的支持域,如圖2。中心像素點(diǎn)p的支持域是包含垂直臂上所有像素的水平臂。圖2中q是p垂直臂上的某個(gè)像素,p的支持域包含q及其水平臂上的像素集合。
圖2 十字交叉原理Fig.2 Criss-cross principle
對(duì)于p的代價(jià)聚合,先將所有水平臂上的像素代價(jià)值累加存儲(chǔ),再將每個(gè)像素的垂直臂累加迭代4次,代價(jià)聚合方式如圖3。第一次和第三次順序?yàn)橄人奖墼俅怪北?,第二次和第四次順序?yàn)橄却怪北墼偎奖郏@樣的迭代方式可降低非連續(xù)區(qū)域的視差匹配錯(cuò)誤。
圖3 代價(jià)聚合方式Fig.3 Cost aggregation method
掃描線優(yōu)化是為了進(jìn)一步降低誤匹配和提高代價(jià)的可靠性,在選擇優(yōu)化路徑上可以是4 路徑、8 路徑、16 路徑,路徑數(shù)越多效果越好,但時(shí)耗也越多。綜合考慮選擇左右上下4 路方向的優(yōu)化路徑,取4 路優(yōu)化代價(jià)的均值代替該像素點(diǎn)。視差優(yōu)化是將錯(cuò)誤視差剔除,以提高視差精度及填補(bǔ)視差圖。對(duì)于誤差較大的點(diǎn)和被遮擋區(qū)域[17]使用一致性檢查[18]后進(jìn)行剔除和視差填充,在提高視差精度方面可采用子像素優(yōu)化技術(shù),即對(duì)最優(yōu)視差代價(jià)值與其前后的代價(jià)值進(jìn)行二次曲線擬合,將曲線極值對(duì)應(yīng)的視差值作為子像素視差。
采用C++語(yǔ)言在Visual Studio2017集成環(huán)境下進(jìn)行開發(fā)實(shí)驗(yàn),驗(yàn)證改進(jìn)型SAD-Census變換算法處理弱紋理圖片的有效性。實(shí)驗(yàn)在64 位臺(tái)式機(jī)上進(jìn)行,硬件配置為AMD Ryzen 5 3600X 6-Core Processor @3.80 GHz處理器、16 GB內(nèi)存、2060顯卡、顯存6 GB。實(shí)驗(yàn)分三部分:采用改進(jìn)型SAD-Census變換算法處理弱紋理圖片;分別采用傳統(tǒng)Census 變換、SAD 算法、AD-Census 算法與改進(jìn)型SAD-Census 算法獲取對(duì)應(yīng)代價(jià)計(jì)算耗時(shí),測(cè)試Middlebury 數(shù)據(jù)集中的圖像,并將4 種算法與Middlebury 平臺(tái)對(duì)應(yīng)的真實(shí)視差圖進(jìn)行比較;采用改進(jìn)型SAD-Census算法對(duì)目標(biāo)物體進(jìn)行測(cè)距。
為驗(yàn)證Census 算法在弱紋理區(qū)域的處理優(yōu)勢(shì),分別采用SAD,Census 與SAD-Census 算法進(jìn)行代價(jià)計(jì)算,且采用同一種代價(jià)聚合方式得到視差圖,結(jié)果如圖4。由圖4 可看出:在框內(nèi)的弱紋理區(qū)域,SAD 算法有明顯的無(wú)效視差區(qū)域;傳統(tǒng)Census變換算法優(yōu)于SAD算法;本文算法整體表現(xiàn)最好,表明本文算法是有效的。
圖4 4種算法處理圖像的有效性結(jié)果Fig.4 Effectiveness results of image processing of four algorithms
圖5 為使用11×11 支持窗口得到的視差圖。4 組圖像從上到下分別為Cones,Teddy,Jadeplant,Tsukuba;低像素的3 組圖像Cones,Teddy 和Tsukuba 分辨率分別為450×375,450×375,384×288,視差搜索范圍為[0,64]像素;高像素Jadeplant圖像分辨率為1 318×994,視差搜索范圍為[0,320]像素。
圖5 測(cè)試圖像對(duì)的立體匹配結(jié)果Fig.5 Stereo matching results for test image pairs
由圖5 可知,與真實(shí)視差圖比較,本文算法得到的視差圖大部分區(qū)域與真實(shí)視差圖接近,其邊緣與深度不連續(xù)區(qū)域的匹配正確。采用本文算法與其他3 種算法對(duì)Middlebury 數(shù)據(jù)集中的Cones,Teddy,Venus,Tsukuba圖像進(jìn)行代價(jià)計(jì)算耗時(shí),結(jié)果如圖6。
圖6 4種算法的代價(jià)計(jì)算耗時(shí)Fig.6 Cost calculation time of four algorithms
由圖6 可知:對(duì)于AD-Census 算法,隨支持窗口的增加,其代價(jià)計(jì)算時(shí)耗越來(lái)越遠(yuǎn)超本文算法;傳統(tǒng)Census 變換和SAD 算法在小支持窗口內(nèi)代價(jià)計(jì)算耗時(shí)比本文算法的少,但支持窗口增大至某一值時(shí),兩算法代價(jià)時(shí)耗多于本文算法,隨支持窗口的繼續(xù)增大,時(shí)耗越來(lái)越超出本文算法;對(duì)于低像素小視差范圍的圖像,本文算法的代價(jià)時(shí)耗穩(wěn)定在0.2 s;對(duì)于高像素大視差范圍的圖像,本文算法的代價(jià)時(shí)耗穩(wěn)定在6 s。將4種算法與Middlebury平臺(tái)對(duì)應(yīng)的真實(shí)視差圖進(jìn)行匹配測(cè)試,誤匹配像素比E計(jì)算公式如下。
式中:G為圖像含有的像素總數(shù);d1(x,y)為位于(x,y)下得到的實(shí)際視差值;d2(x,y)為對(duì)應(yīng)的真實(shí)視差值;σd為視差閾值,設(shè)置為1。
若E大于1,則該匹配點(diǎn)是錯(cuò)誤的。采用4 種算法對(duì)4組圖像進(jìn)行評(píng)估,得到的誤匹配率如圖7。由圖7可看出:本文算法的誤匹配率最低,SAD算法的最高;在Teddy 視差圖中本文算法誤匹配率相比于SAD 算法降低17%,在Jadeplant 視差圖中本文算法與Census 變換相比誤匹配率下降10%;AD-Census變換的誤匹配率也較低,但速度遠(yuǎn)低于本文算法。由此可見(jiàn),本文算法得到的視差圖優(yōu)于單獨(dú)使用Census算法和SAD 算法得到的視差圖,匹配精度和效果有較大提高。
圖7 4種算法的誤匹配率Fig.7 Error matching rate of four algorithms
綜上可看出,相對(duì)于AD-Census 變換、Census 算法和SAD 算法,改進(jìn)型SAD-Census 變換算法在支持大窗口匹配時(shí)不僅速度上有較大優(yōu)勢(shì)、匹配精度上也有較大提升,對(duì)連續(xù)視場(chǎng)支持大窗口進(jìn)行匹配本文算法是一種速度快、精度高的測(cè)距算法。
將本文算法得到的視差圖用于雙目測(cè)距實(shí)驗(yàn),根據(jù)測(cè)距精度驗(yàn)證視差圖的精度。由雙目系統(tǒng)測(cè)量原理知目標(biāo)物深度Z=Bf/d。B為雙目攝像機(jī)的基線長(zhǎng)度,f為雙目攝像機(jī)焦距。測(cè)距所用的雙目攝像機(jī)型號(hào)為zed,采集的圖像分辨率為1 280×720。標(biāo)定圖案由8 列6 行方塊組成,每個(gè)方塊實(shí)際大小為20 mm×20 mm,角點(diǎn)數(shù)為7×5。平行放置兩攝像機(jī),基線距離約120 mm、焦距2.1 mm。雙目測(cè)距系統(tǒng)通過(guò)圖像采集、立體標(biāo)定、立體校正、立體匹配和測(cè)距等步驟實(shí)現(xiàn)測(cè)距。對(duì)采集的16 張不同角度圖像采用張法[19]來(lái)實(shí)現(xiàn)攝像機(jī)的標(biāo)定,將采集的16張左右圖片對(duì)導(dǎo)入Matlab工具箱中得到攝像機(jī)外部參數(shù)場(chǎng)景圖,如圖8。圖中XYZ表示世界坐標(biāo),Z0Y0C0表示攝像機(jī)坐標(biāo),可準(zhǔn)確模擬出攝像機(jī)與空間圖像的位置關(guān)系。
圖8 攝像機(jī)外部參數(shù)場(chǎng)景圖Fig.8 Scene diagram of camera external parameters
攝像機(jī)內(nèi)部參數(shù)標(biāo)定結(jié)果如表1。由表1可知:平移向量中第一個(gè)元素絕對(duì)值為119.360,與攝像機(jī)實(shí)際基線120 mm 接近,說(shuō)明標(biāo)定的參數(shù)結(jié)果準(zhǔn)確。根據(jù)標(biāo)定結(jié)果對(duì)采集的圖像對(duì)進(jìn)行校正,結(jié)果如圖9。由圖9可知:校正前圖片背景墻有彎曲,校正后圖片背景墻彎曲消失,左右視圖的極線相互平行,對(duì)應(yīng)點(diǎn)的縱坐標(biāo)一致,實(shí)現(xiàn)了校正圖像及降維的要求。
圖9 校正前后的效果Fig.9 Effect before and after correction
表1 攝像機(jī)標(biāo)定結(jié)果Tab.1 Camera calibration results
將被測(cè)目標(biāo)物置于離光心800~3 000 mm 處,根據(jù)攝像機(jī)標(biāo)定的各項(xiàng)參數(shù)與深度公式可得被測(cè)目標(biāo)物的深度,結(jié)果如表2。由表2可知,測(cè)量距離在800~2 950 mm 時(shí),隨測(cè)量距離的增加,改進(jìn)型SADCensus變換算法的測(cè)距結(jié)果與真實(shí)距離的相對(duì)誤差呈增長(zhǎng)趨勢(shì),但均小于5%,滿足精度要求。
表2 測(cè)距實(shí)驗(yàn)結(jié)果Tab.2 Ranging experimental results
針對(duì)傳統(tǒng)Census 變換算法對(duì)中心像素點(diǎn)依賴性過(guò)大、代價(jià)計(jì)算耗時(shí)長(zhǎng)的不足,提出一種改進(jìn)型SADCensus變換算法,且進(jìn)行實(shí)驗(yàn)驗(yàn)證。結(jié)果表明:對(duì)于低像素圖像,隨支持窗口的增大本文算法代價(jià)計(jì)算時(shí)耗穩(wěn)定在0.2 s,對(duì)于高像素圖像,代價(jià)計(jì)算時(shí)耗穩(wěn)定在6 s;傳統(tǒng)Census變換、SAD、AD-Census算法代價(jià)計(jì)算時(shí)耗隨支持窗口的不斷增大而增加,本文算法對(duì)于支持大窗口的匹配更有優(yōu)勢(shì);在被測(cè)目標(biāo)物距離光心800~2 950 mm時(shí),采用本文算法得到的結(jié)果相對(duì)誤差均小于5%,滿足精度要求。