李 健,孔令寅
(陜西科技大學(xué)電氣與信息工程學(xué)院,陜西西安710021)
隨著計(jì)算機(jī)視覺技術(shù)的不斷發(fā)展,雙目視覺成為了計(jì)算機(jī)三維測(cè)量領(lǐng)域中一個(gè)熱點(diǎn)研究技術(shù),其測(cè)量原理是利用空間同一點(diǎn)在兩個(gè)攝像機(jī)成像平面上的視差大小計(jì)算空間點(diǎn)的三維坐標(biāo)。要計(jì)算視差,必須知道該點(diǎn)在左右兩幅圖像上的二維坐標(biāo),左右圖像上在三維空間里的同一點(diǎn)稱為匹配點(diǎn)[1]。而立體匹配就是查找相應(yīng)的匹配點(diǎn)。但將三維空間場(chǎng)景投影為二維圖像后,由于受到場(chǎng)景中噪聲干擾、光照條件、景物物理特性和幾何形狀、攝像機(jī)特性以及畸變等諸多因素的影響,在不同視點(diǎn)下,同一景物的圖像會(huì)呈現(xiàn)出極大的差別,因此如何對(duì)圖像進(jìn)行準(zhǔn)確的立體匹配成為了雙目視覺三維測(cè)量研究領(lǐng)域中的重點(diǎn)和難點(diǎn)問題。
目前所提出的立體匹配算法有許多,主要分為兩大類:基于局部約束和基于全局約束。其中,基于局部約束的立體匹配算法又分為3類:區(qū)域匹配算法、特征匹配算法和相位匹配算法。區(qū)域匹配算法主要基于光度測(cè)量學(xué)中的不變性原理,將灰度相關(guān)程度作為匹配的判別依據(jù),結(jié)果得到的視差圖較為稠密[2]。該類算法最主要的缺點(diǎn)是由于窗口選擇函數(shù)的銳度變化不夠并且深度的不連續(xù)特征不易保留,因此對(duì)于無紋理區(qū)域的匹配結(jié)果常常不很理想;特征匹配算法主要基于幾何不變性的原理,對(duì)于區(qū)域匹配算法中存在的無紋理區(qū)域敏感和深度不連續(xù)等缺點(diǎn)進(jìn)行了完善[3],該類算法的優(yōu)點(diǎn)在于噪聲的不敏感性,可得到較為精確的匹配結(jié)果,缺點(diǎn)主要有兩個(gè):一是由于圖像中特征的稀疏性,該類算法得到的都是稀疏的視差圖,要得到稠密的視差圖需要進(jìn)行插值。二是特征提取精度將極大影響匹配的結(jié)果;相位匹配算法基于傅立葉平移定理,通過對(duì)時(shí)/空二頻域帶通濾波后的定位性基元信號(hào)進(jìn)行相位信息處理獲得像對(duì)間的視差[4]。相比上述兩類方法,該類方法更好地反映了信號(hào)結(jié)構(gòu)信息,對(duì)圖像中的高頻噪聲及畸變也能起到較好的抑制作用,獲得的視差是致密的具有亞像素級(jí)精度,其缺點(diǎn)主要有兩個(gè):第一,由于帶通信號(hào)輸出幅度過低因此產(chǎn)生了相位奇點(diǎn)問題;第二,因帶通濾波器波長與相位匹配的算法收斂范圍相關(guān)帶來的相位卷繞問題。
針對(duì)現(xiàn)有匹配方法影響匹配因素多,易出現(xiàn)誤匹配等問題,本文提出了一種基于OpenCV的立體匹配算法,并利用VC++進(jìn)行了實(shí)現(xiàn),最后通過實(shí)驗(yàn)對(duì)算法的匹配效果和精度進(jìn)行了驗(yàn)證。
目前,計(jì)算機(jī)視覺領(lǐng)域內(nèi)對(duì)于角點(diǎn)特征還沒有一個(gè)統(tǒng)一的數(shù)學(xué)定義,而角點(diǎn)特征的含義本身又較為模糊,因此各種有關(guān)角點(diǎn)特征檢測(cè)方法的文獻(xiàn)中對(duì)于角點(diǎn)特征的數(shù)學(xué)定義都有著不同的描述,由此也提出了各種不同角點(diǎn)特征檢測(cè)的數(shù)學(xué)方法。目前有關(guān)角點(diǎn)特征的定義有以下幾種[5-6]:角點(diǎn)特征是灰度梯度局部最大的像素對(duì)應(yīng)點(diǎn);角點(diǎn)特征是兩條及以上邊界的連接點(diǎn);角點(diǎn)特征表示了物體邊緣不連續(xù)變化的方向;角點(diǎn)特征處具有最大的一階導(dǎo)數(shù)值,并且H階導(dǎo)數(shù)值為0;角點(diǎn)特征處梯度的值不僅大,并且在梯度方向上速率變化也最快。換言之,角點(diǎn)特征處一般是二維空間內(nèi),圖像中灰度劇烈變化的位置,是和周圍相鄰點(diǎn)差異明顯的像素點(diǎn)[7]。
角點(diǎn)特征按照不同的結(jié)構(gòu)可分為以下幾類:“X”型、“K”型、“T”型、“Y”型、“V”型等。
本文使用投影儀將棋盤格投射到待測(cè)物體上,這里選擇具有規(guī)則幾何形狀的長方體木塊作為待測(cè)物體,如圖1所示,這樣就在待測(cè)物體表面人工添加了易于識(shí)別和檢測(cè)的角點(diǎn)特征,這里需要注意的是棋盤格圖像的分辨率要盡量和投影儀的分辨率一致,不一致則會(huì)對(duì)匹配的結(jié)果產(chǎn)生影響,另外,圖像的大小最好是完整覆蓋在被測(cè)物體上。
圖1 角點(diǎn)特征的添加
目前,角點(diǎn)特征的檢測(cè)方法主要有兩種:基于邊緣的角點(diǎn)特征檢測(cè)法和基于圖像灰度的角點(diǎn)特征檢測(cè)法。基于邊緣的角點(diǎn)特征檢測(cè)法由于過于依賴邊緣的提取,若提取出的邊緣線出現(xiàn)斷裂則會(huì)對(duì)最終角點(diǎn)特征的檢測(cè)帶來較大的影響。因此本文選擇基于圖像灰度的角點(diǎn)特征檢測(cè)法,該類方法中比較有代表性的算法有SUSAN算子、Harris算子、Moravec算子、Forstner算子。本文使用OpenCV庫函數(shù)CvGoodFeaturesToTrack對(duì)圖像中的角點(diǎn)特征進(jìn)行檢測(cè)[8],該函數(shù)利用的是Harris算子,計(jì)算簡(jiǎn)單有效,特別適用于點(diǎn)狀特征的提取,并且即便是存在視點(diǎn)變換,灰度變化,圖像旋轉(zhuǎn)和噪聲的影響,提取結(jié)果也是相對(duì)穩(wěn)定的。
首先,計(jì)算目標(biāo)圖像的一階導(dǎo)數(shù),即對(duì)于目標(biāo)圖像上的每一個(gè)點(diǎn),將其在x方向和y方向上的一階導(dǎo)數(shù)以及二者的乘積進(jìn)行計(jì)算,結(jié)果會(huì)得到三幅新圖像。三幅圖像中每個(gè)像素分別對(duì)應(yīng)的屬性值為對(duì)這三幅圖像先進(jìn)行高斯濾波處理,再計(jì)算原圖像上每個(gè)點(diǎn)對(duì)應(yīng)的興趣值。計(jì)算公式如式 (1)所示
由于Harris算子中特征點(diǎn)被定義為指定區(qū)域內(nèi)興趣值最大的像素點(diǎn),因此接下來需要對(duì)原圖像中指定區(qū)域內(nèi)興趣值最大的像素點(diǎn)進(jìn)行提取。一般情況下,可以設(shè)定一個(gè)指定大小的窗口 (如3×3大小),將每個(gè)像素點(diǎn)作為窗口的中心,若中心像素點(diǎn)的興趣值最大,那么該點(diǎn)即為特征點(diǎn)。
通常指定區(qū)域內(nèi)興趣值最大的像素點(diǎn)數(shù)量很多,這樣在后續(xù)進(jìn)行匹配計(jì)算時(shí),過多的匹配點(diǎn)會(huì)大大增加計(jì)算量。所以這里本文先將所有滿足條件的像素點(diǎn)進(jìn)行排序,再根據(jù)實(shí)際需求選擇若干個(gè)作為最終檢測(cè)結(jié)果。這種做法的好處是可以根據(jù)不同質(zhì)量圖片的需要定量的選擇特征點(diǎn),這樣所得到的點(diǎn)總是最好的。
用Harris算子進(jìn)行角點(diǎn)特征檢測(cè),所提取到的角點(diǎn)特征位置精度只能達(dá)到像素級(jí),這樣的精度會(huì)影響立體匹配的精確度,因此需要將提取到的角點(diǎn)特征位置精度進(jìn)一步精確到亞像素級(jí),本文使用OpenCV庫函數(shù)CvFindCorner-SubPix進(jìn)行亞像素級(jí)精度角點(diǎn)特征位置的計(jì)算[9],具體的計(jì)算原理如下。
當(dāng)一個(gè)向量和與其正交的向量點(diǎn)積為0,則角點(diǎn)特征滿足這種情況,如圖2所示。
假設(shè)圖2中點(diǎn)q的起始位置就在亞像素級(jí)角點(diǎn)特征實(shí)際位置的附近。對(duì)所有向量q-p進(jìn)行檢測(cè),如果點(diǎn)p在一個(gè)均勻區(qū)域中,那么點(diǎn)p處的梯度值是0。如果向量q-p與區(qū)域邊緣的方向相同,那么向量q-p正交于該邊緣p點(diǎn)處的梯度向量,上述兩種情況下,向量q-p與點(diǎn)p處的梯度向量點(diǎn)積為0。則在點(diǎn)p的周圍可以找出許多組梯度向量和其相關(guān)的q-p向量,將其點(diǎn)集設(shè)為0,再對(duì)獲得的方程組進(jìn)行求解,得到的解即是角點(diǎn)特征q位置的亞像素級(jí)精度值。
圖2 計(jì)算原理
確定了角點(diǎn)特征檢測(cè)方法以及亞像素精度位置的計(jì)算方法之后,接下來,就需要對(duì)左右兩幅圖上的角點(diǎn)特征進(jìn)行匹配了,本文提出的匹配算法描述如下:
步驟1 將左右兩幅圖像上檢測(cè)到的l行共n個(gè)角點(diǎn)特征 (l>0,n>0)的坐標(biāo)值保存到文件中。
步驟2 定義數(shù)組Lx[n]和Ly[n]存放左圖中n個(gè)角點(diǎn)特征的x坐標(biāo)值和y坐標(biāo)值,定義數(shù)組Rx[n]和Ry[n]存放右圖中n個(gè)角點(diǎn)特征的x坐標(biāo)值和y坐標(biāo)值。
步驟3 分別計(jì)算數(shù)組Ly和Ry中n個(gè)元素的最小值,即分別找出左圖和右圖中n個(gè)角點(diǎn)特征y坐標(biāo)的最小值,將最小值分別定義為Lymin和Rymin。
步驟4 確定左圖和右圖中每個(gè)角點(diǎn)特征所在的行。
(1)確定每行角點(diǎn)特征y坐標(biāo)的閾值,這里可以考慮選擇一個(gè)棋盤格上邊緣與下邊緣y坐標(biāo)的差值Δy作為參考,例如第一行可設(shè)為第二行可設(shè)為第三行可設(shè)為依此類推。當(dāng)然,具體閾值需要根據(jù)不同棋盤格大小、被測(cè)物體情況、圖象質(zhì)量情況等因素靈活選定。
(2)計(jì)算數(shù)組Ly中每個(gè)元素與Lymin的差值ΔLy和數(shù)組Ry中每個(gè)元素與Rymin的差值ΔRy。
(3)將左右兩幅圖中每個(gè)角點(diǎn)特征計(jì)算出的差值ΔLy和ΔRy與每行的閾值進(jìn)行比較,從而確定每個(gè)角點(diǎn)特征所在的行。定義數(shù)組Lkx[i]和Lky[i]存放左圖中第k行(0<k≤l)所有角點(diǎn)特征的x坐標(biāo)值和y坐標(biāo)值,定義數(shù)組Rkx[i]和Rky[i]存放右圖中第k行 (0<k≤l)所有角點(diǎn)特征的x坐標(biāo)值和y坐標(biāo)值,其中i的值取l行中角點(diǎn)特征數(shù)量的最大值。
步驟5 按角點(diǎn)特征的x坐標(biāo)值從小到大逐行對(duì)左圖和右圖中的角點(diǎn)特征坐標(biāo)進(jìn)行排序,再逐行把排序后的角點(diǎn)特征坐標(biāo)值重新存到對(duì)應(yīng)的數(shù)組Lx,Ly,Rx,Ry中,則左圖上坐標(biāo)為 (Lx[j],Ly[j])的角點(diǎn)特征和右圖上坐標(biāo)為 (Rx[j],Ry[j])的角點(diǎn)特征為一對(duì)匹配點(diǎn)。
這里本文在VS2008開發(fā)環(huán)境下利用VC++將本文提出的匹配算法編寫為程序,并通過實(shí)驗(yàn)對(duì)該算法進(jìn)行驗(yàn)證。具體實(shí)驗(yàn)過程如下:
(1)將拍攝得到的圖像對(duì),如圖1所示,經(jīng)過簡(jiǎn)單的處理和立體校正后分別對(duì)圖像對(duì)中角點(diǎn)特征進(jìn)行檢測(cè)并計(jì)算像素精度和亞像素精度角點(diǎn)特征的位置,為了便于觀察,這里將檢測(cè)到的角點(diǎn)特征用紅色的點(diǎn)在圖像對(duì)上進(jìn)行標(biāo)注,檢測(cè)結(jié)果如圖3所示,檢測(cè)到的角點(diǎn)特征數(shù)量為14個(gè)。
圖3 角點(diǎn)特征檢測(cè)結(jié)果
(2)利用本文立體匹配算法進(jìn)行特征點(diǎn)匹配,將左圖角點(diǎn)特征和右圖對(duì)應(yīng)匹配角點(diǎn)特征的坐標(biāo)值輸出到文件中保存,為了能更好的觀察匹配效果,本文將計(jì)算得到的匹配點(diǎn)對(duì)逐對(duì)用紅點(diǎn)在左圖和右圖中繪制出來,結(jié)果如圖4和圖5所示。
從最終的匹配結(jié)果不難看出,本文提出的立體匹配算法對(duì)于左右圖上14個(gè)檢測(cè)出的角點(diǎn)特征均能準(zhǔn)確進(jìn)行匹配,匹配效果較為理想。
為了驗(yàn)證本文提出的立體匹配算法的匹配精度,這里還利用棋盤格板進(jìn)行了三維測(cè)距實(shí)驗(yàn),測(cè)量棋盤格板到攝像機(jī)之間的距離 (即棋盤格板上角點(diǎn)特征Z坐標(biāo)的值)。并用本文提出的立體匹配算法與OpenCV中提供的傳統(tǒng)BM視差圖匹配算法分別進(jìn)行了立體匹配,最后對(duì)Z坐標(biāo)值進(jìn)行計(jì)算[10],結(jié)果如表1所示。這里的實(shí)際距離是使用卷尺測(cè)得的,測(cè)量的最小單位為毫米。
通過對(duì)比表1中的測(cè)量結(jié)果和誤差值可以看出使用本文提出的立體匹配算法測(cè)量得到的距離值較于傳統(tǒng)的視差圖匹配算法誤差更小,匹配精度更高。另外,從理論上講,亞像素精度的誤差應(yīng)低于像素精度。但第二次測(cè)量的結(jié)果則是亞像素精度的誤差高于像素精度,產(chǎn)生這種現(xiàn)象的原因可能是與兩次不同距離拍攝時(shí)環(huán)境因素不同造成的。
表1 測(cè)距實(shí)驗(yàn)結(jié)果與誤差
本文首先對(duì)現(xiàn)有的立體匹配算法進(jìn)行了分析,針對(duì)現(xiàn)有算法的不足,提出了一種基于OpenCV的立體匹配算法。先通過使用投影儀在被測(cè)物體表面人工添加棋盤格角點(diǎn)特征,再通過OpenCV庫函數(shù)對(duì)角點(diǎn)特征的位置進(jìn)行檢測(cè)和計(jì)算,最后以這些角點(diǎn)特征作為匹配時(shí)的特征點(diǎn),利用本文的立體匹配算法完成特征點(diǎn)的匹配,并通過實(shí)驗(yàn)進(jìn)行了算法驗(yàn)證,實(shí)驗(yàn)結(jié)果表明,該算法的匹配效果較為理想。最后進(jìn)行的三維測(cè)距實(shí)驗(yàn)說明該算法與傳統(tǒng)的視差圖匹配算法相比匹配精度高,誤差小,對(duì)于三維測(cè)量工作具有重要意義。
[1]Bleyer M,Gelautz M.Graph-cut-based stereo matching using image segmentation with symmetrical treatment of occlusions[J].Signal Processing:Image Communication,2007,22(2):127-143.
[2]GONG M,YANG Y H.Real-time stereo matching using orthogonal reliability-based dynamic programming[J].IEEE Trans on Image Processing,2007,16(3):879-884.
[3]DENG Y,YANG Q,LIN X,et al.Stereo correspondence with occlusion handling in a symmetric patch-based graph-cuts model[J].IEEE Trans on Pattern Analysis and Machine Intelligence,2007,29(6):1068-1079.
[4]Birchfield B,Natarajan B,Tomasi C.Correspondence as energybased segmentation[J].Image and Vision Computing,2007,25(8):1329-1340.
[5]CHEN Shengyong,LIU Sheng.Realization of computer vision based on OpenCV [M].Beijing:Science Press,2008(in Chinese).[陳勝勇,劉盛.基于OpenCV的計(jì)算機(jī)視覺技術(shù)實(shí)現(xiàn)[M].北京:科學(xué)出版社,2008.]
[6]BAO Wenxia,LIANG Dong,WANG Nian.Image matching algorithm based on graph cut theory and geometric constraints[J].Computer Engineering,2007,33(1):193-197(in Chinese).[鮑文霞,梁棟,王年.基于圖割理論和極幾何約束的圖像匹配算法 [J].計(jì)算機(jī)工程,2007,33(1):193-197.]
[7]LIU Tao,YU Zhongqing,MA Qianli.Target distance calculation based on parallel binocular vision[J].Qingdao University(Natural Science),2009,22(1):59-62(in Chinese).[劉濤,于忠清,馬千里.基于平行雙目視覺的目標(biāo)距離計(jì)算[J].青島大學(xué)學(xué)報(bào) (自然科學(xué)版),2009,22(1):59-62.]
[8]Gary Bradski,Adrian Kaebler.Learning OpenCV(Chinese version)[M].Beijing:Tsinghua University Press,2009(in Chinese).[Gary Bradski,Adrian Kaebler.學(xué)習(xí)OpenCV(中文版)[M].北京:清華大學(xué)出版社,2009.]
[9]HUA Shungang,ZENG Lingyi.Dense matching algotihm based on corner detection [J].Computer Engineering and Design,2007,28(5):1092-1095(in Chinese).[華順剛,曾令宜.一種基于角點(diǎn)檢測(cè)的圖像密集匹配算法 [J].計(jì)算機(jī)工程與設(shè)計(jì),2007,28(5):1092-1095.]
[10]LI Keguo,LI Dayun,TAO Xueheng.An improved acquired algorithm in binocular stereo vision technology[J].Development and Innovation of Machinery and Electrical Products.2008,21(5):31-35(in Chinese).[李克國,李大運(yùn),陶學(xué)恒.一種雙目立體視覺技術(shù)中三維坐標(biāo)點(diǎn)的改進(jìn)求取算法[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新,2008,21(5):31-35.]