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