陳紅,王代強(qiáng)
貴州民族大學(xué)機(jī)械電子工程學(xué)院
圖像測(cè)量技術(shù)作為一種新興的非接觸測(cè)量技術(shù),突破了人為接觸式測(cè)量的限制,實(shí)現(xiàn)了工業(yè)產(chǎn)品質(zhì)量的自動(dòng)檢測(cè),解決了人工檢測(cè)工作量繁重和成本高等問題,具有廣闊發(fā)展前景。
隨著制造技術(shù)和測(cè)量技術(shù)要求的不斷提高,視覺測(cè)量技術(shù)的高精度化、高速化及高效率化成為圖像測(cè)量技術(shù)的重要發(fā)展方向。測(cè)量條件不變的情況下,提高圖像質(zhì)量能直接提高測(cè)量精度,而影響圖像采集質(zhì)量的因素有很多,如傳感器的性能(分辨率)、鏡頭的畸變程度和環(huán)境光源的選擇等[1]。通常情況下,測(cè)量精度主要取決于相機(jī)分辨率,但高分辨率相機(jī)價(jià)格昂貴,所以在硬件成本固定的情況下,從圖像處理的角度進(jìn)一步提高測(cè)量精度具有重要研究意義[2]。
在固定的硬件條件下,提高測(cè)量精度須考慮影響測(cè)量精度的諸多因素,如標(biāo)定精度[3]、鏡頭畸變[4]、檢測(cè)精度[5]和外界環(huán)境光源[6]等。鏡頭畸變作為典型的系統(tǒng)誤差,是影響測(cè)量精度的主要因素之一,有效完成相機(jī)鏡頭畸變校正并降低畸變對(duì)測(cè)量精度的影響是重要研究對(duì)象之一。一般的輪廓檢測(cè)精度為一個(gè)像素級(jí),但在低成本條件下,整像素級(jí)別的輪廓檢測(cè)并不能滿足實(shí)際測(cè)量需求,所以,通過亞像素技術(shù)將檢測(cè)精度提升至亞像素級(jí)別也是重要研究對(duì)象之一。
本研究主要基于OpenCV[7]搭建實(shí)時(shí)在線高精度視覺測(cè)量系統(tǒng),為了改善圖像分辨率對(duì)測(cè)量精度的限制,在硬件成本固定的條件下進(jìn)一步提高測(cè)量精度。本實(shí)驗(yàn)采用成本低廉的普通高清微型USB攝像頭作為視覺傳感器,利用定制棋盤格標(biāo)定板對(duì)相機(jī)進(jìn)行標(biāo)定[8],通過提取標(biāo)定板上的特征點(diǎn)坐標(biāo),計(jì)算與理想狀態(tài)下的圖像坐標(biāo)位置偏差,求解畸變參數(shù)。將輪廓提取的實(shí)際檢測(cè)結(jié)果進(jìn)行亞像素化,使其精確到小于一個(gè)像素,提高被測(cè)物輪廓提取的精確度,從而提高測(cè)量的精準(zhǔn)度。通過對(duì)標(biāo)定板、1元硬幣、1角硬幣三個(gè)被測(cè)物的最外圍輪廓進(jìn)行測(cè)量發(fā)現(xiàn),最大測(cè)量誤差為0.082mm,最大相對(duì)誤差為0.430%,滿足大多數(shù)機(jī)械加工行業(yè)實(shí)時(shí)在線檢測(cè)及測(cè)量?jī)x器要求。
如圖1所示,在計(jì)算機(jī)視覺領(lǐng)域中,一般有四個(gè)基本坐標(biāo)系:世界坐標(biāo)系(OwXwYwZw)、相機(jī)坐標(biāo)系(OcXcYcZc)、成像平面坐標(biāo)系(O1xy)和像素坐標(biāo)系(O0uv)。
圖1 坐標(biāo)系
空間點(diǎn)Pw(Xw,Yw,Zw)通過剛體變換轉(zhuǎn)換為相機(jī)坐標(biāo)系下的點(diǎn)Pc(Xc,Yc,Zc),通過透視投影到成像平面坐標(biāo)系下的點(diǎn)P01(x,y),再根據(jù)原點(diǎn)平移、尺度伸縮將其轉(zhuǎn)化為像素坐標(biāo)系下的點(diǎn)P00(u,v)。這就完成了某點(diǎn)從世界坐標(biāo)系轉(zhuǎn)化到像素坐標(biāo)系的過程,即相機(jī)標(biāo)定過程,具體轉(zhuǎn)換細(xì)節(jié)為[9,10]
(1)
式中,fx=f/dx,fy=f/dy,f為相機(jī)焦距,dx,dy為像元尺寸;(u0,v0)為主點(diǎn)坐標(biāo);R為3×3的正交旋轉(zhuǎn)矩陣;T為3×1的平移矩陣;0T=[0 0 0];(fx,fy,u0,v0)為相機(jī)的內(nèi)參數(shù);(R,T)為相機(jī)的外參數(shù)。
產(chǎn)生鏡頭畸變的原因不只是透鏡的固有失真,鏡頭的精度和質(zhì)量也對(duì)鏡頭畸變有一定程度的影響,任意鏡頭都存在工藝誤差以及組裝誤差。鏡頭畸變一般包括徑向畸變、切向畸變以及薄棱鏡畸變[10]。因?yàn)楸±忡R畸變區(qū)別于徑向畸變和離心畸變,對(duì)成像的影響極小,通常忽略不計(jì),所以只考慮徑向畸變和離心畸變。
徑向畸變主要是由透鏡表面曲率引起的,是一種沿透鏡半徑方向分布的畸變。一般來說,越靠近邊緣,光線越容易彎曲,畸變也就越嚴(yán)重,其數(shù)學(xué)模型為
(2)
離心畸變的誤差來源于透鏡的安裝精度,因?yàn)闊o(wú)法保證所有透鏡光心都可以嚴(yán)格共線,所以這種誤差在引入徑向畸變同時(shí)還會(huì)引入切向畸變。其數(shù)學(xué)模型為
(3)
現(xiàn)行的畸變校正方法主要是將非線性畸變參數(shù)當(dāng)作相機(jī)的參數(shù)之一,利用標(biāo)定板對(duì)相機(jī)進(jìn)行標(biāo)定,通過提取標(biāo)定板上的相關(guān)特征點(diǎn),計(jì)算與理想狀態(tài)下圖像坐標(biāo)位置的偏差,從而求解畸變系數(shù)。但引入過多的非線性系數(shù)會(huì)影響模型的穩(wěn)定性,所以本系統(tǒng)采用適應(yīng)大多數(shù)相機(jī)的畸變模型,僅考慮徑向畸變的前三項(xiàng)與切向畸變前兩項(xiàng)?;兂C正模型為
(4)
式中,(x,y)為理想的無(wú)畸變歸一化成像平面坐標(biāo);(xd,yd)為畸變后的歸一化成像平面坐標(biāo);(k1,k2,k3)為徑向畸變系數(shù);(p1,p2)為切向畸變系數(shù);r為圖像像素點(diǎn)到圖像中心的距離,即r2=x2+y2。
綜上,通過內(nèi)參數(shù)(fx,fy,u0,v0)及畸變系數(shù)(k1,k2,p1,p2,k3)就可以確定唯一的相機(jī)模型。
實(shí)驗(yàn)搭建的實(shí)時(shí)在線高精度視覺測(cè)量系統(tǒng)采用普通高清微型USB攝像頭,視角為120°,最大分辨率為1280×720。采用12×9方格系列的棋盤作為標(biāo)定板,其外形尺寸為100mm×100mm,格子邊長(zhǎng)為6mm,圖案尺寸為72mm×54mm,精度為±0.005mm。利用藍(lán)色為背景色增大色差,減少噪聲對(duì)圖像處理的干擾,從而提高檢測(cè)精度,搭建的測(cè)量硬件系統(tǒng)如圖2所示。
圖2 硬件系統(tǒng)
本系統(tǒng)基于OpenCV開發(fā)完成,主要包括圖像采集、相機(jī)標(biāo)定、畸變校正、輪廓提取和尺寸測(cè)量等內(nèi)容,該系統(tǒng)的軟件流程如圖3所示。
圖3 軟件系統(tǒng)
3.2.1 相機(jī)初始化
該部分主要包括圖像采集和相機(jī)標(biāo)定等內(nèi)容。首先將攝像頭按圖2方式固定,調(diào)節(jié)焦距使成像達(dá)到最佳效果,任意擺放標(biāo)定板獲取圖像。采集圖像部分首先對(duì)攝像頭的分辨率和幀數(shù)率進(jìn)行配置,分辨率關(guān)系測(cè)量精度的高低,幀速率的大小影響測(cè)量系統(tǒng)的實(shí)時(shí)性,本次實(shí)驗(yàn)將圖像分辨率設(shè)置為1280×720,幀數(shù)率為30fps。通過“空格”鍵將當(dāng)前圖像保存到工程目錄下“.image_data”文件夾中,共獲取20張不同位置的標(biāo)定板圖像,按“q”鍵退出圖像采集。獲取圖像時(shí),盡量使圖像周邊光線分布均勻,保證拍攝的棋盤格不存在缺失部分,采集的標(biāo)定圖像如圖4所示。
圖4 標(biāo)定圖像
相機(jī)標(biāo)定是通過對(duì)已知標(biāo)定物成像,根據(jù)物像關(guān)系建立數(shù)學(xué)模型,反解相機(jī)內(nèi)外參數(shù)[11],得到對(duì)針孔攝像機(jī)主要參數(shù)的估計(jì),是視覺測(cè)量和計(jì)算機(jī)視覺等諸多應(yīng)用的重要環(huán)節(jié)。該部分代碼實(shí)現(xiàn)具體可參考文獻(xiàn)[7]。
對(duì)相機(jī)的非線性標(biāo)定過程為:首先讀取“.image_data”文件夾中的圖片,并利用OpenCV的cvtColor()函數(shù)將其轉(zhuǎn)化為灰度圖;findChessboardCorners()函數(shù)提取每張圖片的角點(diǎn)坐標(biāo),cornerSubPix()函數(shù)將角點(diǎn)坐標(biāo)細(xì)化為亞像素坐標(biāo),使其精確到小于1個(gè)像素;再通過calibrateCamera()函數(shù)計(jì)算相機(jī)內(nèi)外參數(shù)及畸變系數(shù);最后將獲得的相機(jī)參數(shù)寫入到“result.yaml”文件中,從而完成相機(jī)的非線性標(biāo)定。相機(jī)參數(shù)如表1所示,表中數(shù)據(jù)只保留2位小數(shù)。
表1 相機(jī)參數(shù)
3.2.2 測(cè)量模塊
該部分主要包括畸變矯正、輪廓提取和尺寸測(cè)量等內(nèi)容。其過程為:通過讀取“result.yaml”中的相機(jī)內(nèi)參數(shù)與畸變系數(shù),利用OpenCV的undistort()函數(shù)對(duì)當(dāng)前攝像頭進(jìn)行校正。平面直線的校正結(jié)果如圖5所示,圖5a為畸變?cè)瓐D,圖5b為根據(jù)相機(jī)參數(shù)矯正圖。
(a)畸變?cè)瓐D (b)矯正圖
若直接對(duì)彩色圖像進(jìn)行輪廓提取會(huì)出現(xiàn)大量噪聲,因此需對(duì)圖像進(jìn)行降噪和灰度化[12]。OpenCV提供了大量降噪方法,本文采用高斯濾波GaussianBlur()函數(shù)進(jìn)行降噪,采用 cvtColor()函數(shù)進(jìn)行圖像灰度化處理,采用Canny算法進(jìn)行邊緣檢測(cè),通過Canny()函數(shù)實(shí)現(xiàn)。為了更好地檢索輪廓,對(duì)圖像邊緣進(jìn)行形態(tài)學(xué)運(yùn)算,以此增強(qiáng)輪廓的連續(xù)性和消除不必要的小區(qū)域[2],采用了形態(tài)學(xué)的閉運(yùn)算對(duì)Canny()函數(shù)檢測(cè)的邊緣圖像進(jìn)行處理,使用dilate()函數(shù)進(jìn)行“膨脹”,erode()函數(shù)進(jìn)行“腐蝕”,經(jīng)過形態(tài)學(xué)運(yùn)算之后,物體邊緣會(huì)變得密實(shí)清晰,從而便于后續(xù)輪廓檢索。Canny()檢測(cè)邊緣圖像及形態(tài)學(xué)運(yùn)算后結(jié)果如圖6所示。
圖6 邊緣檢測(cè)
輪廓提取部分主要采用插值亞像素邊緣檢測(cè)方法[13-15],結(jié)合OpenCV中的findContours()函數(shù),將獲取的像素輪廓精確到小于一個(gè)像素,提高輪廓的檢測(cè)精度。首先用分解的核函數(shù)sepFilter2D()對(duì)圖像做卷積,獲取水平和垂直兩個(gè)方向上的梯度;通過findContours()函數(shù)獲得被測(cè)對(duì)象的像素輪廓;再將新的輪廓邊緣點(diǎn)定義為相鄰幾個(gè)梯度模差值的最大值,通過計(jì)算梯度方向上相鄰三點(diǎn)梯度模的值進(jìn)行插補(bǔ),從而得到亞像素輪廓[13]。
得到被測(cè)物輪廓后,用minAreaRect()函數(shù)獲得包覆輪廓的最小斜矩形,從而得到矩形的四個(gè)頂點(diǎn)。通過計(jì)算該矩形中點(diǎn)的距離獲得被測(cè)物體的像素尺寸。如圖7所示,假設(shè)找到的輪廓為圓O,通過minAreaRect()函數(shù)可以得到矩形ABCD,分別求出矩形四邊的中點(diǎn)midAB、midBC、midCD、midDA,從而獲得midAB到midCD,midBC到midDA的像素距離(單位pixel),最后可以通過像素密度(像素與實(shí)際尺寸之間的比例值)求出輪廓的真實(shí)尺寸。
圖7 輪廓檢測(cè)
將被測(cè)物放置在藍(lán)色背景布上,按“n”鍵獲取當(dāng)前圖像,并對(duì)當(dāng)前圖像進(jìn)行測(cè)量。測(cè)量前需利用標(biāo)定板尺寸計(jì)算像素密度,對(duì)標(biāo)定板的最外圍輪廓進(jìn)行檢索,計(jì)算像素距離。已知標(biāo)定板最外輪廓實(shí)際距離為100mm×100mm,像素距離除以實(shí)際距離像素密度,因此,實(shí)驗(yàn)的像素密度寬高為5.02042(pixel/mm)×5.04317(pixel/mm)。
對(duì)標(biāo)定板(100mm×100mm)、1元硬幣(25mm×25mm)和1角硬幣(19mm×19mm)的最外圍輪廓在任意位置分別測(cè)量5次,測(cè)量數(shù)據(jù)如表2所示。
表2 測(cè)量數(shù)據(jù)
設(shè)測(cè)量的結(jié)果為m,真實(shí)值為M,絕對(duì)誤差為abs_error,相對(duì)誤差為r_error,則絕對(duì)誤差和相對(duì)誤差的計(jì)算關(guān)系為
(5)
對(duì)表2中任意5次測(cè)量數(shù)據(jù)求均值,使其作為被測(cè)對(duì)象的測(cè)量結(jié)果,并通過式(5)計(jì)算絕對(duì)誤差和相對(duì)誤差,以此反映誤差的大小與測(cè)量的可信程度。測(cè)量結(jié)果及誤差如表3所示(僅保留3位小數(shù))。
表3 測(cè)量結(jié)果
分析表3測(cè)量結(jié)果可知,三種被測(cè)對(duì)象的最大絕對(duì)誤差為0.082mm,最大相對(duì)誤差為0.430%。實(shí)驗(yàn)數(shù)據(jù)表明,通過多次測(cè)量取平均值作為測(cè)量結(jié)果可以在一定程度上降低測(cè)量誤差。對(duì)比文獻(xiàn)[4]利用曲率矯正提高測(cè)量精度的方法,本系統(tǒng)的絕對(duì)誤差相對(duì)較小,與文獻(xiàn)[16]的測(cè)量數(shù)據(jù)比較,本系統(tǒng)的相對(duì)誤差較小。
本文利用成本低廉的普通USB攝像頭,基于開源計(jì)算機(jī)視覺庫(kù)(OpenCV)實(shí)現(xiàn)單目相機(jī)的高精度測(cè)量。通過增大色差、減少噪聲對(duì)圖像處理的干擾、矯正鏡頭畸變以及亞像素技術(shù)等手段提高檢測(cè)精度,從而提高測(cè)量精度。通過計(jì)算三個(gè)被測(cè)對(duì)象的絕對(duì)誤差和相對(duì)誤差值,證明了基于OpenCV搭建的實(shí)時(shí)在線高精度視覺測(cè)量系統(tǒng)可以滿足大多數(shù)機(jī)械加工行業(yè)實(shí)時(shí)在線檢測(cè)及測(cè)量?jī)x器要求。