方志強(qiáng) ,熊禾根 ,肖書浩 ,李公法
(1.武漢科技大學(xué)機(jī)械自動化學(xué)院,湖北 武漢 430081;2.武昌首義學(xué)院機(jī)電工程研究所,湖北 武漢 430064)
在目前工業(yè)發(fā)展的大環(huán)境下,機(jī)器視覺技術(shù)已經(jīng)得到廣泛的推廣,特別是在產(chǎn)品的尺寸測量[1-2]與外觀缺陷檢測[3]上,這一技術(shù)已成中堅(jiān)力量。從產(chǎn)品市場需求上看,高性能軟件設(shè)備大多引進(jìn)于國外,價格昂貴,如美國的Cognex、日本的Keyence 和的德國的Halcon;再加上技術(shù)壁壘和壟斷,后期維護(hù)困難等問題使得購買企業(yè)望而卻步。從軟件開發(fā)來看,很多需要基于平臺進(jìn)行第二次開發(fā),不能“開箱就用”,即不能直接提供給用戶終端使用。
從目前發(fā)展現(xiàn)狀來看,在發(fā)達(dá)國家中美國、日本和德國早已成為開發(fā)機(jī)器視覺的領(lǐng)先者,其機(jī)器視覺行業(yè)發(fā)展如此迅速離不開國外學(xué)者的科研投入,如在尺寸測量和檢測方面,文獻(xiàn)[4]設(shè)計(jì)了一種用于對大多數(shù)螺紋進(jìn)行自動測量和檢測的視覺系統(tǒng)。文獻(xiàn)[5]外國學(xué)者采用機(jī)器視覺檢測技術(shù)來測量管道末端的圓度值,可以判斷出該管道末端的質(zhì)量是否滿足要求。文獻(xiàn)[6]最近研究了對材料加工刀具的測量,通過機(jī)器視覺無損檢測系統(tǒng)可以檢測刀具是否斷裂以及斷裂長度等信息;國內(nèi)機(jī)器視覺的研究起步較晚,我國的專業(yè)學(xué)者在機(jī)器視覺方向也進(jìn)行了深入的探討和實(shí)踐,近些年來也得到了較快的發(fā)展。相應(yīng)地如文獻(xiàn)[7]通過分析曲面沖壓件的表面機(jī)理及形貌,采用交互式ROI 構(gòu)建及基于灰度值亞像素精度匹配的圖像差減法完整分割缺陷區(qū)域,提出基于多形狀特征的缺陷分類方法。文獻(xiàn)[8]通過圖像處理算法以及尺寸計(jì)算獲得石材磚的幾何尺寸,根據(jù)標(biāo)準(zhǔn)尺寸判斷石材磚的質(zhì)量品級是否合格;文獻(xiàn)[9]針對工廠中的實(shí)際需求,提出基于橢圓的曲率估計(jì)算法和曲率限定估計(jì)算法對燈泡的燈腳長度測量完成在線實(shí)時檢測判斷。因此在此背景下,針對工廠需求設(shè)計(jì)和開發(fā)一種基于單目視覺多種平面尺寸的規(guī)則工件測量系統(tǒng),以O(shè)penCV 和Qt 為開發(fā)平臺,利用C++編程實(shí)現(xiàn)對工件進(jìn)行實(shí)時測量和檢測;通過實(shí)驗(yàn)驗(yàn)證系統(tǒng)所采用的算法實(shí)際可行,能滿足一般工業(yè)檢測要求下的尺寸測量精度。
系統(tǒng)結(jié)構(gòu)主要由光照系統(tǒng)、檢測平臺、圖像采集、軟件設(shè)計(jì)4部分組成。硬件包括光源、工業(yè)相機(jī)、鏡頭、計(jì)算機(jī)等設(shè)備,其中相機(jī)采用Basler 工業(yè)相機(jī),圖像分辨率為2592×1944;軟件部分:基于visual studio 2013 平臺、Qt 界面設(shè)計(jì)類庫、OpenCV 視覺庫開發(fā)系統(tǒng)軟件。系統(tǒng)整體結(jié)構(gòu)設(shè)計(jì),如圖1(a)所示;系統(tǒng)實(shí)現(xiàn)尺寸的實(shí)時檢測包括兩個步驟:(1)測量模板設(shè)定;(2)自動運(yùn)行,其實(shí)時檢測流程簡圖,如圖1(b)所示。
圖1 系統(tǒng)設(shè)計(jì)Fig.1 System Design
測量系統(tǒng)軟件設(shè)計(jì)部分主要包括圖像采集、坐標(biāo)系轉(zhuǎn)換、測量任務(wù)設(shè)定、實(shí)時檢測4 個模塊,其工作流程,如圖2 所示。 圖像采集模塊對工業(yè)相機(jī)配置后進(jìn)行圖像采集;坐標(biāo)系轉(zhuǎn)換模塊為了獲得圖像坐標(biāo)系與世界坐標(biāo)系的轉(zhuǎn)換關(guān)系;測量任務(wù)設(shè)定模塊主要是通過圖像處理實(shí)現(xiàn)尺寸測量功能得到相關(guān)參數(shù)并保存,以及對工件進(jìn)行定位設(shè)定;實(shí)時檢測模塊經(jīng)測量任務(wù)設(shè)定完成后隨著相機(jī)抓拍圖像自動進(jìn)行尺寸測量和判斷。
圖2 測量軟件工作流程Fig.2 The Process of Measuring Software Work
視覺測量系統(tǒng)使用basler 工業(yè)相機(jī)進(jìn)行圖像采集,采用Basler官網(wǎng)提供的Pylon5 SDK 搭配OpenCV 開發(fā)采集圖像。相機(jī)和計(jì)算機(jī)之間通過Gige 進(jìn)行數(shù)據(jù)傳輸,對相機(jī)和計(jì)算機(jī)進(jìn)行IP 地址配置,讓相機(jī)和計(jì)算機(jī)處于同一網(wǎng)段內(nèi)并初始化相機(jī)。界面設(shè)計(jì)觸發(fā)控件來控制相機(jī)響應(yīng)時間,設(shè)計(jì)調(diào)節(jié)曝光時間進(jìn)度條來調(diào)節(jié)曝光時間。
相機(jī)配置后通過相機(jī)標(biāo)定和矯正準(zhǔn)確地獲得相機(jī)參數(shù),進(jìn)而確定世界坐標(biāo)系與圖像坐標(biāo)系的轉(zhuǎn)換關(guān)系。先采用文獻(xiàn)[10]棋盤標(biāo)定法對工業(yè)相機(jī)從多角度拍攝多幅棋盤進(jìn)行標(biāo)定,再結(jié)合最小二乘法完成坐標(biāo)系轉(zhuǎn)換。
3.2.1 坐標(biāo)系建立
取待測工件所在檢測平面為Owxwyw,zw軸垂直其平面豎直向上,則世界坐標(biāo)系可表示為:Owxwywzw。相機(jī)坐標(biāo)系表示為:Ocxcyczc,定義坐標(biāo)系原點(diǎn)為光軸中心Oc,zc軸平行于光軸。
3.2.2 坐標(biāo)系轉(zhuǎn)換參數(shù)描述
由相機(jī)標(biāo)定得到的內(nèi)參數(shù)矩陣M 和鏡頭畸變系數(shù)D 可表示為:
式中:fx、fy—X,Y 軸方向上的像素焦距;(u0,v0)—相機(jī)主點(diǎn)。
式中:k1,k2,k3—徑向畸參;p1,p2—切向畸參。由式(1)、式(2)可將目標(biāo)的像素坐標(biāo)(u,v)轉(zhuǎn)換成Ocxcyczc下的三維坐標(biāo)。過程如下:
式中:(u′,v′)—(u,v)標(biāo)定矯正后像素坐標(biāo);f—矯正函數(shù)。
式中:(xc,yc,zc)—目標(biāo)在 Ocxcyczc中的坐標(biāo)。設(shè)目標(biāo)在 Owxwywzw中的坐標(biāo)為(xw,yw,zw),將(xw,yw,zw)在 Ocxcyczc中表示,所構(gòu)成相機(jī)的外參矩陣為:
式中:r1=[r1xr1yr1z]T、r2=[r2xr2yr2z]T、r3=[r3xr3yr3z]T—xw,yw,zw軸在 Ocxcyczc中的旋轉(zhuǎn)矢量;t=[txtytz]T—Owxwywzw中的坐標(biāo)原點(diǎn)在Ocxcyczc中的平移向量。聯(lián)合式(3)~式(5),并考慮到目標(biāo)在平面內(nèi),令zw=0,化簡可得式(6):
式中:m=[r1xr1yr1zr2xr2yr2ztxtytz]T,tz≠0 由此,只求出 m 中 8個未知數(shù)便可知Owxwywzw與圖像坐標(biāo)系轉(zhuǎn)換關(guān)系;由于每個點(diǎn)提供2 個方程,因此將式(6)表示為Am=B,對Owxwywzw中n(n≥4)個坐標(biāo)已知點(diǎn),利用最小二乘法即得m:
由式(7)得到參數(shù)矩陣m 后,根據(jù)圖像坐標(biāo)可求解出目標(biāo)對應(yīng)的世界坐標(biāo)。
3.3.1 提取 ROI 區(qū)域
尺寸測量需先選中測量工具,通過鼠標(biāo)在工件檢測邊緣取點(diǎn)(直線選取 2 點(diǎn) P1,P2、曲線選取 3 點(diǎn) P1,P2,P3)創(chuàng)建 ROI 得到ROI 區(qū)域。其中半徑、平行距離、夾角的ROI 創(chuàng)建簡圖,如圖3(a)所示;以檢測直線為例,生成如圖3(b)所示的ROI 區(qū)域,其中左上角和右下角Rect 表示用來改變ROI 的大小,中間兩端Rect 用來改變ROI 的方向,箭頭表示沿cols 法向搜索邊界點(diǎn);當(dāng)ROI 發(fā)生改變時,在ROI 內(nèi)處理的結(jié)果也會相應(yīng)調(diào)整。
圖3 ROI 區(qū)域提取Fig.3 ROI Region Extraction
3.3.2 圖像處理和尺寸計(jì)算
確定檢測邊緣的ROI 后,在ROI 區(qū)域內(nèi)進(jìn)行圖像處理并對輪廓點(diǎn)進(jìn)行曲線擬合,借助擬合曲線做進(jìn)一步計(jì)算和處理實(shí)現(xiàn)尺寸測量的功能,其中得到擬合曲線的主要步驟如下:
步驟1:圖像灰度處理,將RGB 三通道變?yōu)閱瓮ǖ溃徊襟E2:運(yùn)用雙線性插值法求解ROI 內(nèi)像素點(diǎn)灰度值;步驟3:一階導(dǎo)數(shù)有限差分計(jì)算法向梯度值;步驟4:對梯度值進(jìn)行非極大值抑制處理確定邊界輪廓點(diǎn);步驟5:對ROI 內(nèi)有用信息輪廓點(diǎn)進(jìn)行曲線擬合。
(1)直線擬合
設(shè)圖像中第i 個像素點(diǎn)(xi,yi)到直線的離差為ri,用ρ(r)表示離差函數(shù),常見的最小二乘算法進(jìn)行直線擬合是以離差平方和為擬合判據(jù),使得Σρ(ri)最小。假設(shè)所求擬合直線可表示為y=a0+a1x,則參與擬合的n 個像素點(diǎn)到直線的離差平方和可表示為Σρ對等式右邊求 ai偏導(dǎo)且令一階偏導(dǎo)值為0,化簡可得矩陣形式:
由式(8)可得擬合直線參數(shù),盡管此最小二乘算法擬合速度快但對圖像中干擾點(diǎn)的魯棒性不夠,導(dǎo)致擬合精度不高。因此在此基礎(chǔ)上引入其他類型的M 估計(jì)(M-estimator)算法進(jìn)行穩(wěn)健估計(jì)。在OpenCV 庫中提供不同形式的估計(jì)函數(shù)。采用其中Huber研究的擬合函數(shù)代替離差函數(shù)ρ(r):
式中:C(C=1.345)—擬合參數(shù),取C=1。利用OpenCV 庫中的cv::fitLine 直線擬合函數(shù)對圖 3(b)中所示的有用邊界輪廓點(diǎn)進(jìn)行系數(shù)擬合得到擬合直線。
(2)圓半徑測量
圓半徑測量先采用RANSAC[11]算法剔除干擾點(diǎn)再結(jié)合最小二乘法進(jìn)行圓擬合得到圓半徑值,其擬合流程,如圖4 所示。
圖4 擬合流程Fig.4 The Process of Fitting
RANSAC 思想就是從采樣到的樣本數(shù)據(jù)集中估計(jì)模型參數(shù),利用所有樣本點(diǎn)對該模型進(jìn)行檢驗(yàn)并計(jì)算模型的支持度(內(nèi)點(diǎn)數(shù)量),最后通過迭代挑選出支持度最高的模型作為參數(shù)模型。圓半徑測量的算法步驟為:
(1)設(shè)置內(nèi)點(diǎn)所占百分比p(取為90%),以及隨機(jī)選取的所有樣本點(diǎn)均為內(nèi)點(diǎn)的概率值η0(取為0.85),并計(jì)算迭代次數(shù)n。
(2)利用提取曲線ROI 區(qū)域中隨機(jī)選取3 個不共線的采樣點(diǎn)建立圓模型并以此初步確定圓參數(shù)。
(3)計(jì)算ROI 內(nèi)提取的所有邊緣點(diǎn)到圓模型距離,將其與圓模型相對誤差小于閾值δ(取為0.02)所對應(yīng)的點(diǎn)視為內(nèi)點(diǎn),并計(jì)算該圓的支持度。
(4)上述步驟123 重復(fù)n 次,確定n 個模型中支持度最大模型作為最佳模型,并計(jì)算滿足模型的所有內(nèi)點(diǎn)。
(5)對內(nèi)點(diǎn)利用圓一般方程和最小二乘法進(jìn)行系數(shù)擬合,確定最終的RANSAC 擬合圓,從而得到圓半徑等相關(guān)參數(shù)值。
其中通過η0和p 以及確定圓參數(shù)至少需要的采樣數(shù)目k(取k=3)可確定最少迭代次數(shù)n:
(3)平行距離測量
在ROI 內(nèi)測量目標(biāo)的上下(左右)邊緣經(jīng)直線擬合后,兩條擬合直線間的平行距離為d,如圖5 中L 直線所示。
C0為 P1P2在 ROI 中與中間 rows 相交的點(diǎn),M1為 C0在 ROI中所對應(yīng)cols 與擬合直線line1 上的交點(diǎn),M2為M1投影在擬合直線line2 上的垂足點(diǎn)。由鼠標(biāo)點(diǎn)擊兩點(diǎn)確定的P1,P2和擬合直線line1 可求得M1坐標(biāo)。即距離d 可表示點(diǎn)M1到擬合直線line2的垂直距離。假設(shè)擬合直線line2 過定點(diǎn)(x0,y0),方向向量為(u,v),M1(x1,y1),M2(x2,y2),則有:
圖5 距離測量Fig.5 Distance Measurement
3.3.3 工件位置和角度定位
系統(tǒng)隨相機(jī)響應(yīng)抓拍工件平面圖像進(jìn)行自動檢測之前需要對工件進(jìn)行定位。為了盡量避免工件被傳送帶送到檢測位置時在ROI有效檢測區(qū)域內(nèi)發(fā)生較小的位置變化或波動而造成的誤差,故在ROI 區(qū)域提取時可人為適當(dāng)增大圖3(b)中所示的ROI 縱向面積并對工件使用定位工具定位。定位工具包括位置定位和角度定位。其中位置定位跟蹤水平和垂直移動,角度定位跟蹤旋轉(zhuǎn);當(dāng)工件發(fā)生位置和角度變化時,提取ROI 區(qū)域的點(diǎn)Pi都會以定位工具為參考重新計(jì)算,使檢測區(qū)域與工件的相對位置保存不變同時ROI 內(nèi)相關(guān)信息也會更新。一般地可利用直線工具得到某條直線并以其前后斜率值變化轉(zhuǎn)化為定位角度,再以一個特征點(diǎn)(交點(diǎn)、圓心點(diǎn)等)作為位置定位點(diǎn),并根據(jù)定位點(diǎn)前后位置變化得到x,y 方向的偏移量;其中交點(diǎn)可利用測角工具得到兩相交直線交點(diǎn)坐標(biāo)、圓心點(diǎn)可通過測圓工具或Hough 圓定位工具(通過矩形ROI 提取圓特征區(qū)域利用OpenCV 庫中的HoughCircles 函數(shù))獲得;特殊地當(dāng)工件有多個圓特征時,采用不同心的兩個Hough 圓定位快速定位,以其中一個圓心作位置定位點(diǎn),兩圓心之間連線斜率變化值作定位角度;假設(shè)圖3(a)中創(chuàng)建ROI 檢測區(qū)域的點(diǎn)P 在定位前坐標(biāo)為(Tx,Ty),P 定位后的坐標(biāo)為(Px,Py),定位點(diǎn)L 坐標(biāo)為(Lx,Ly),L 定位前后x,y 方向的偏移量為(ΔVx,ΔVy),定位角度為ΔθR,則有:
由此軟件開發(fā)的定位工具可根據(jù)工件特征選擇合適的定位工具搭配使用,利用(14)式完成定位計(jì)算。
由于實(shí)驗(yàn)條件有限,測試環(huán)境為室內(nèi),實(shí)驗(yàn)操作系統(tǒng)為Windows 10,在4GB 內(nèi)存的64 位操作平臺上運(yùn)行,其中實(shí)驗(yàn)平臺和設(shè)備以及測量目標(biāo),如圖6 所示。
圖6 實(shí)驗(yàn)設(shè)備和測量目標(biāo)Fig.6 Experimental Equipment and Test Targets
制作棋盤格,打印8×6 的棋盤格到A4 紙上。棋盤格方格大小為30*30mm。
圖7 相機(jī)獲取平面圖Fig.7 Camera Grabbing Plane Image
系統(tǒng)驅(qū)動相機(jī)抓取平面圖像,如圖7 所示。以第一個黑色棋盤格的右下角角點(diǎn)取為世界坐標(biāo)系的原點(diǎn)Ow,以O(shè)w為起點(diǎn),水平向右為xw的正向,垂直向下為yw的正向,軸豎直平面向上。對棋盤格中的24 個角點(diǎn)進(jìn)行亞像素級角點(diǎn)檢測和坐標(biāo)轉(zhuǎn)換計(jì)算,求得(7)式中矩陣參數(shù)如下:
m0=9.918,m1=0.040,m2=495.1,m3=0.001
m4=9.883,m5=436.0,m6=1.6×10-5,m7=3.1×10-5
為了檢驗(yàn)轉(zhuǎn)換參數(shù)的精確度,取圖7 中除標(biāo)定點(diǎn)以外的A、B、C、D 四個邊角點(diǎn)作為校驗(yàn)點(diǎn)。根據(jù)坐標(biāo)系的轉(zhuǎn)換關(guān)系由圖像坐標(biāo)計(jì)算出校驗(yàn)點(diǎn)在世界坐標(biāo)系中的位置,并用卡尺測量出A、B、C、D 角點(diǎn)在坐標(biāo)系Owxwywzw中的實(shí)際位置坐標(biāo);再將計(jì)算出的位置坐標(biāo)與實(shí)際測得的位置坐標(biāo)進(jìn)行比較,分別求出x、y 軸方向的相對誤差,其結(jié)果,如表1 所示。從表1 中可以直觀看出最大相對誤差0.47%(<±1%視為有效精度),最小相對誤差0%,說明坐標(biāo)轉(zhuǎn)換關(guān)系有效。
表1 坐標(biāo)轉(zhuǎn)換Tab.1 Coordinate Transformation
完成坐標(biāo)系轉(zhuǎn)換后開始檢驗(yàn)測量系統(tǒng)的精確性。系統(tǒng)在光照條件較暗情況下實(shí)驗(yàn)分別對不同尺寸類型的多幾何工件進(jìn)行平行距離測量、半徑測量、角度測量,如圖8 所示。圖8(a)為距離測量,即對工件1 兩種不同位置進(jìn)行測量;圖8(b)為半徑測量,對四個不同位置圓孔的工件2 進(jìn)行半徑測量檢測;圖8(c)為角度測量,對常用三角尺的三個夾角進(jìn)行角度測量。圖8(d)的是同時對工件2 進(jìn)行多種尺寸測量。
圖8 尺寸測量Fig.8 Size Measurement
從表2 中可以看出,工件1 距離測量的最小相對誤差為0.28%,最大相對誤差為0.84%;從表3 中不難發(fā)現(xiàn),工件2 的最小相對誤差為0.00%,最大相對誤差為0.83%;從表4 中可以得出,三角尺的最小相對誤差為0.07%,最大相對誤差為0.47%。綜合測量結(jié)果,尺寸誤差在0.10mm 以內(nèi),角度誤差在0.3°以內(nèi),相對誤差在±1%以內(nèi),基本滿足一般工業(yè)要求。經(jīng)計(jì)時,發(fā)現(xiàn)整個測量過程耗時均在150ms 以內(nèi)。通過分析,系統(tǒng)的測量誤差主要由測量儀器操作、相機(jī)標(biāo)定、工件加工偏差或磨損、以及光照不均等因素造成,由于本系統(tǒng)是在工件與平臺背景色差較大條件下進(jìn)行的,因此為減少噪聲對圖像處理的干擾可根據(jù)工件顏色人為布置平臺背景顏色(一般取黑色或白色)來增大色差提高測量精確度。
表2 距離測試Tab.2 Distance Test
表3 半徑測試Tab.3 Radius Test
表4 角度測試Tab.4 Angle Test
系統(tǒng)模擬生產(chǎn)線上工件到達(dá)指定檢測區(qū)域,通過改變其工作位置進(jìn)行檢測。以檢測工件2 的平行距離為例,考慮到工件本身特征優(yōu)先采用兩個Hough 圓定位。系統(tǒng)先對測量任務(wù)中的測量工具和定位工具進(jìn)行相關(guān)參數(shù)設(shè)定和保存,分別如圖9(a)、(b)所示。任務(wù)設(shè)定完成后系統(tǒng)隨著相機(jī)抓取平面圖像進(jìn)行自動檢測運(yùn)行,如圖9(c)所示。圖9(d)所示的是使用定位工具,此時改變工件的位置,系統(tǒng)依然可以正確測量,并根據(jù)真實(shí)值所設(shè)定的誤差范圍進(jìn)行檢測判斷;圖9(e)所示的是在沒有使用定位器情形下改變工件位置使其超出ROI 檢測區(qū)域,使工件檢測不到或測量值超出誤差允許范圍致其檢測結(jié)果顯示為失敗。
圖9 實(shí)時檢測Fig.9 Real-Time Detection
開發(fā)的基于單目視覺多種平面尺寸的規(guī)則工件測量系統(tǒng)盡管還沒有達(dá)到千分尺等儀器的測量精度,但對精密度要求不是很高的工業(yè)應(yīng)用,系統(tǒng)的精確度基本滿足檢測要求;系統(tǒng)設(shè)計(jì)的亮點(diǎn)主要體現(xiàn)在三方面:(1)多種平面尺寸測量。軟件開發(fā)的三種測量工具可對工件使用一種工具也可同時使用幾種工具進(jìn)行測量;(2)簡約性。系統(tǒng)軟件部分不需要用戶再進(jìn)行第二次開發(fā),直接搭建相關(guān)硬件平臺就可以使用,而且QT 界面操作方便、快捷;(3)軟件底層設(shè)計(jì)靈活性。系統(tǒng)的匯編語言采用C++語言,運(yùn)用面向?qū)ο蟮乃枷耄酶呒塁++的Class 類進(jìn)行各功能之間的融合,后期可以在此基礎(chǔ)上開發(fā)更多其他功能的工具,如正在開發(fā)的零件計(jì)數(shù)、工件字符識別等功能。通過實(shí)驗(yàn)分析,測量原理和算法是實(shí)際可用的,后期將系統(tǒng)實(shí)踐于實(shí)際工業(yè)環(huán)境中。系統(tǒng)的設(shè)計(jì)和軟件開發(fā)對視覺測量的廣泛應(yīng)用有一定的研究價值和實(shí)際意義。