摘 ?要:平整度檢測是瓷磚生產(chǎn)的一個(gè)關(guān)鍵環(huán)節(jié),為有效檢測鏡面瓷磚的平整度,文章提出了一種應(yīng)用機(jī)器視覺的檢測方法,設(shè)計(jì)點(diǎn)陣光源進(jìn)行投影照明使得表面的不平整信息可視化,采用光電傳感器觸發(fā)方式進(jìn)行圖像采集,結(jié)合“OpenCV圖像處理”課程內(nèi)容,設(shè)計(jì)窗口掃描法提取投影點(diǎn)陣,消除側(cè)傾對檢測結(jié)果的影響,使用方向統(tǒng)計(jì)的方法進(jìn)行平整度檢測。實(shí)驗(yàn)結(jié)果表明,該方法能有效檢測出鏡面瓷磚的平整度,同時(shí)檢測裝置結(jié)構(gòu)簡單,節(jié)省成本。
關(guān)鍵詞:平整度檢測;圖像采集;點(diǎn)陣提取;方向統(tǒng)計(jì)
中圖分類號:TP391.41 ? ? ?文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2020)23-0094-04
Research on Visual Inspection of Mirror Tile Surface Flatness
XIE Jian
(Hunan College of Information,Changsha ?410200,China)
Abstract:Flatness detection is a key link in tile production. In order to effectively detect the flatness of mirror tile,this paper proposes a detection method based on machine vision. Dot matrix light source was designed for projection illumination to visualize the surface roughness information,and the photoelectric sensor was used to trigger the image acquisition. Combined with “OpenCV Image Processing” course content,the window scanning method is designed to extract the projection lattice,eliminate the influence of roll on the detection results,and the direction statistics method is used for flatness detection. The experimental results show that this method can effectively detect the flatness of mirror tile,and the detection device is simple in structure and cost saving.
Keywords:flatness detection;image acquisition;lattice extraction;direction statistics
0 ?引 ?言
目前陶瓷產(chǎn)品在消費(fèi)市場備受青睞,人們對其品質(zhì)的重視程度也逐步提升,而陶瓷表面平整度就是影響品質(zhì)的重要因素之一。目前國內(nèi)的檢測裝置精度不高,國外的檢測裝置又過于昂貴并且維護(hù)成本高,所以企業(yè)大多采用人工檢測的方式對平整度進(jìn)行檢測,自動化檢測設(shè)備未大面積普及,這種現(xiàn)象在工業(yè)現(xiàn)代化發(fā)展中越來越不合時(shí)宜,因而自主研發(fā)檢測設(shè)備對國內(nèi)行業(yè)健康發(fā)展有重要意義。
檢測方案是筆者針對學(xué)校的專業(yè)課程“OpenCV圖像處理”而設(shè)計(jì)的一個(gè)綜合案例,旨在增進(jìn)學(xué)生對工業(yè)實(shí)際環(huán)境下圖像處理方案的設(shè)計(jì)過程的了解,應(yīng)用OpenCV庫進(jìn)行圖像處理算法的設(shè)計(jì),加深對知識點(diǎn)的理解。
1 ?檢測系統(tǒng)軟件功能設(shè)計(jì)
檢測系統(tǒng)軟件模塊由圖像采集、圖像預(yù)處理、投影點(diǎn)陣提取、平整度檢測、數(shù)據(jù)存儲5個(gè)功能模塊組成,如圖1所示。
圖像采集模塊:在生產(chǎn)環(huán)境中,瓷磚是在傳輸帶上運(yùn)動的,當(dāng)其運(yùn)動到指定的位置時(shí)觸發(fā)光電開關(guān)控制攝像頭進(jìn)行拍照,反應(yīng)迅速。
圖像預(yù)處理模塊:預(yù)處理的目的是生成點(diǎn)陣亮前景和暗背景的二值化圖像,以便將投影點(diǎn)陣中的光點(diǎn)完整的提取出來。
投影點(diǎn)陣提取模塊:用設(shè)計(jì)的窗口掃描法將各個(gè)亮點(diǎn)完整的提取出來,同時(shí)做消除傾斜處理,為后面的偏移計(jì)算做準(zhǔn)備。
平整度檢測模塊:首先根據(jù)偏移距離判斷瓷磚是否平整,若不平整再用方向統(tǒng)計(jì)方法判斷瓷磚具體的缺陷類型。
數(shù)據(jù)存儲模塊:通過數(shù)據(jù)庫將瓷磚檢測的相關(guān)結(jié)果保存,便于統(tǒng)計(jì)分析。
2 ?圖像采集
由于檢測瓷磚表面為鏡面,根據(jù)鏡面反射的特性,設(shè)計(jì)了點(diǎn)陣光源對瓷磚表面進(jìn)行投影。點(diǎn)陣光源整齊排列,若瓷磚表面平整,投影點(diǎn)陣整體仍保持規(guī)整,若瓷磚表面不平整,則其上的投影點(diǎn)陣就會發(fā)生扭曲,且表面起伏越大,點(diǎn)陣的扭曲變形得越厲害。通過平整瓷磚上的點(diǎn)陣投影與被檢測瓷磚上的點(diǎn)陣投影對應(yīng)點(diǎn)之間的距離偏差來檢測瓷磚的平整度。
為了使表面不平信息最大限度地突顯出來,對待檢測瓷磚、光源以及攝像頭三者的位置關(guān)系進(jìn)行了研究,經(jīng)過大量的采圖分析,當(dāng)光源置于瓷磚的斜上方進(jìn)行照射,攝像頭置于光線的出射方向進(jìn)行拍攝時(shí),所采集到的圖像效果最佳。
本系統(tǒng)采用光電傳感器進(jìn)行觸發(fā)采圖,即當(dāng)瓷磚運(yùn)動到采樣位置后,觸發(fā)該處的光電傳感器產(chǎn)生光電信號,控制攝像頭采圖,解決運(yùn)動瓷磚與圖像拍攝之間的同步問題,且能有效解決漏檢的問題。如圖2所示為采集的瓷磚點(diǎn)陣投影圖。
3 ?提取點(diǎn)陣質(zhì)心
在采集到瓷磚表面的點(diǎn)陣投影圖后,需要先對其進(jìn)行二值化預(yù)處理,將圖像中的點(diǎn)陣與背景區(qū)域分離,便于各點(diǎn)質(zhì)心的提取。如圖3所示為平整瓷磚點(diǎn)陣投影圖二值化后的結(jié)果。
3.1 ?提取計(jì)算質(zhì)心坐標(biāo)
為了計(jì)算表面的平整度,需要提取出各個(gè)點(diǎn),進(jìn)而計(jì)算各點(diǎn)的偏移。本文提出了窗口掃描算法來分割提取各個(gè)質(zhì)心點(diǎn)。首先根據(jù)經(jīng)驗(yàn)確定窗口的大小,使其能完全將一個(gè)亮點(diǎn)圍住同時(shí)與其他點(diǎn)沒有接觸。利用此窗口在圖像中進(jìn)行掃描,直到整個(gè)圖像掃描完,具體步驟為:
第一步:將窗口放在圖像上從左向右滑動,滑動步長為窗口寬度,每次滑動后檢查窗口所在邊上是否有灰度值為255的點(diǎn)。若有,則先記錄當(dāng)前窗口位置,然后以像素單位為步長向?qū)?yīng)邊進(jìn)行移動,直到所有邊上都沒有灰度值為255的點(diǎn),表明當(dāng)前亮點(diǎn)已經(jīng)全部在窗口內(nèi),此時(shí)計(jì)算亮點(diǎn)像素的質(zhì)心,然后將所有灰度值為255的點(diǎn)置為0,回到記錄的窗口位置。若沒有,則需判斷窗口內(nèi)是否有灰度為255的點(diǎn),有的話計(jì)算質(zhì)心并將其內(nèi)容清0。繼續(xù)滑動窗口,進(jìn)行相同的判斷及處理。
第二步:窗口移動到最右端后,需要將窗口移動到橫坐標(biāo)起始處,同時(shí)向下移動窗口高度的步長,繼續(xù)從左向右掃描,直至圖像掃描完全。
窗口掃描法相對常用的投影法魯棒性更強(qiáng),提取效果更好,部分代碼為:
vector
Point curPos(0,0);//掃描窗口左上角位置
while(curPos.y + CONST_H > srcImg.rows) {//掃描終止條件
//判斷窗口的邊是否存在灰度255的像素
int direction; //存在255像素邊的方向 0 僅右方 1 僅下方 2 右下方
bool bFlag = JudgeEdge(srcImg, scurPos.x, curPos.y, direction);
if(true == bFlag){ ?//存在 ?則將此像素所在點(diǎn)找到并求質(zhì)心
Point tempPt ;
tempPt.x = curPos.x + 1;
tempPt.y = curPos.y+ 1;
while(true == JudgeEdge(srcImg, tempPt.x , tempPt.y , direction) ){
if(0 == direction ){ tempPt.x++; }
else if(1 == direction) {tempPt.y++;}
else{tempPt.x++; tempPt.y++;}
}
//計(jì)算窗口內(nèi)亮點(diǎn)質(zhì)心點(diǎn)
Point pt = CalCenter(srcImg, tempPt);
vecSrc.push_back(pt);
//窗口內(nèi)像素值全置0
clearLightPoint(srcImg, tempPt);
}
else {
//判斷窗口內(nèi)是否有灰度值255的像素
if(true == JudgeInner(srcImg, curPos)){
//計(jì)算窗口內(nèi)亮點(diǎn)質(zhì)心點(diǎn)
Point pt = CalCenter(srcImg, tempPt);
vecSrc.push_back(pt);
//窗口內(nèi)像素值全置0
clearLightPoint(srcImg, tempPt);}
}
//移動窗口
if(curPos.x+CONST_W < srcImg.cols){
curPos.x = curPos.x+CONST_W;}
else{
curPos.x = 0;
curPos.y = curPos.y +CONST_H;
}
}
3.2 ?消除瓷磚側(cè)傾影響
瓷磚在傳輸帶上運(yùn)送時(shí),兩者之間可能會存在一些顆粒物,這些顆粒物使得瓷磚不再是水平擺放在傳送帶上,而是傾斜著擺放在傳送帶上。在這種情況下,若直接計(jì)算兩幅圖像對應(yīng)點(diǎn)的偏移量并進(jìn)行判斷就會出現(xiàn)錯(cuò)誤,所以在進(jìn)行上述計(jì)算前應(yīng)該盡量消除傾斜的影響。
算法思想為:先計(jì)算檢測瓷磚質(zhì)心點(diǎn)相對平整瓷磚各質(zhì)心點(diǎn)的平均偏移(X和Y方向),然后將檢測瓷磚的質(zhì)心坐標(biāo)分別減去平均偏移即可,部分代碼為:
int totalX =0, totalY=0;
int averX =0, averY= 0;
for(int i = 0 ; i < vecDst.size(); i++ ){ //計(jì)算平均偏移
totalX = abs(vecDst[i].x - vecSrc[i].x);
totalY = abs(vecDst[i].y - vecSrc[i].y);
}
averX = totalX / vecDst.size();
averY = totalY/ vecDst.size();
for(int i ?= 0 ; ?i < vecSrc[i].size(); i ++){//消除傾斜影響
vecSrc[i].x = vecSrc[i].x - averX;
vecSrc[i].y = vecSrc[i].y - averY;
}
4 ?平整度檢測
4.1 ?缺陷圖像點(diǎn)陣分布模式分析
目前常見瓷磚表面不平整缺陷的模式有四種,即:拱凸、凹陷、凸棱、以及翹角。通過模擬實(shí)驗(yàn)發(fā)現(xiàn)不同缺陷表面的圖像點(diǎn)陣有各自的排列規(guī)律。排列呈現(xiàn)拱凸或凹陷的情形時(shí),缺陷附近點(diǎn)陣會向凸起中心聚攏或以凹陷為中心向外擴(kuò)散,中心附近偏移較大,其他區(qū)域偏移較小;凸棱情形時(shí),在凸棱附近的點(diǎn)在垂直方向發(fā)生較大偏移,其他區(qū)域偏移較小;翹角情形時(shí),邊角附件的點(diǎn)有較大偏移,其他區(qū)域偏移較小。
4.2 ?平整度及缺陷判斷
定義點(diǎn)的偏移方向?yàn)椋阂岳硐朦c(diǎn)作為起始點(diǎn),且經(jīng)過偏移點(diǎn)的射線方向與X軸正軸的夾角大小。
根據(jù)上述不同缺陷模式下投影點(diǎn)陣的分布規(guī)律,可以分析出對應(yīng)點(diǎn)偏向角的分布規(guī)律。對于拱凸或者凹陷情形,各點(diǎn)偏向角以順時(shí)針方向遞增;對凸棱情形,各點(diǎn)偏向角在270或90度左右分布為主;對于翹角情形,各點(diǎn)偏向角在315、225、135、45度左右分布為主。
在考慮各點(diǎn)偏移量的基礎(chǔ)上,再結(jié)合方向統(tǒng)計(jì)法去區(qū)分具體缺陷類型,具有較好效果。算法思想為:
首先,統(tǒng)計(jì)出檢測圖像中各點(diǎn)偏移量大于閾值1的點(diǎn)的數(shù)目是否超過閾值2,若沒超過,認(rèn)為瓷磚平整;若超過,則認(rèn)為不平整,繼續(xù)判斷類型。
其次,計(jì)算偏移量大于閾值1的點(diǎn)的偏向角,若角度主要分布在270或90度附近則認(rèn)為是凸棱缺陷;若主要分布在315、225、135、45度附近則認(rèn)為是翹角缺陷。若兩種都不是,根據(jù)遞增方向判斷是拱凸還是凹陷缺陷,部分代碼為:
//計(jì)算各點(diǎn)偏角
vector
for(int i = 0; i < vecDst.size(); i ++){
if(power(vecSrc[i].y - vecDst[i].y, 2) + power(vecSrc[i].x - vecDst[i].x, 2) < CONST_THRESH){ vecAngle.push_back(0); }
else{
float ?angleVal = 0;
int DistY = vecSrc[i].y - vecDst[i].y;
int DistX = vecSrc[i].x - vecDst[i].x;
if(0 == DistX ){
if(DistY < 0 ){angleVal = 90;}
else{angleVal = 270;}}
else{ angleVal = (180 * atan(DistY/DistX))/M_PI;}
vecAngle.push_back(angleVal);}
}
5 ?檢測結(jié)果展示
如圖4所示為檢測軟件運(yùn)行界面,圖片左側(cè)為凸棱缺陷瓷磚投影點(diǎn)陣圖像二值化后的結(jié)果,圖右顯示檢測信息,包括時(shí)間、當(dāng)前缺陷類型、瓷磚序號、平整數(shù)目以及已檢測出缺陷數(shù)目等,方便實(shí)時(shí)查看。
6 ?結(jié) ?論
本文對基于機(jī)器視覺的鏡面瓷磚表面平整度檢測方法涉及的圖像采集、預(yù)處理、投影點(diǎn)陣提取、平整度檢測等過程進(jìn)行了詳細(xì)的描述,并根據(jù)設(shè)計(jì)完成平臺搭建,整體方案能有效地檢測出瓷磚的平整度。此案例應(yīng)用在了“OpenCV圖像處理”課程中,結(jié)合硬件裝置、軟件功能以及圖像算法的分析與設(shè)計(jì),加強(qiáng)了學(xué)生的實(shí)際應(yīng)用能力及圖像處理算法設(shè)計(jì)能力,鞏固了知識點(diǎn)的理解與運(yùn)用。
參考文獻(xiàn):
[1] SONKA M,HLAVAC V,BOYLE R.圖像處理、分析與機(jī)器視覺:第2版 [M].艾海舟,武勃,譯.北京:人民郵電出版社,2003.
[2] 張廣軍.機(jī)器視覺 [M].北京:科學(xué)出版社,2005.
[3] 陳勝勇,劉盛.基于OpenCV的計(jì)算機(jī)視覺技術(shù)實(shí)現(xiàn) [M].北京:科學(xué)出版社,2008.
[4] 肖艷煒,張?jiān)?改進(jìn)的二維Otsu自動分割算法及其應(yīng)用研究 [J].計(jì)算機(jī)工程與應(yīng)用,2007(7):243-245.
[5] 邱茂林,馬頌德,李毅.計(jì)算機(jī)視覺中攝像機(jī)定標(biāo)綜述 [J].自動化學(xué)報(bào),2000(1):47-59.
作者簡介:謝劍(1987.06—),男,漢族,湖南長沙人,就職于軟件學(xué)院,教師,初級職稱,碩士,研究方向:計(jì)算機(jī)應(yīng)用、圖像處理。