李長(zhǎng)有,王 振,何開(kāi)振
(河南理工大學(xué) 機(jī)械與動(dòng)力工程學(xué)院,焦作 454000)
近年來(lái)隨著智能手機(jī)的快速發(fā)展,手機(jī)玻璃蓋板的需求日益增多,工廠對(duì)手機(jī)玻璃尺寸檢測(cè)效率和精度要求越來(lái)越高。機(jī)器視覺(jué)在非接觸測(cè)量方面有更高的效率和精度,能滿(mǎn)足相關(guān)需求。目前基于機(jī)器視覺(jué)的尺寸檢測(cè)方法已經(jīng)取得了一定的發(fā)展和成果。在國(guó)外,Song等人[1]提出了一種基于機(jī)器視覺(jué)的燈絲尺寸實(shí)時(shí)測(cè)量方法,實(shí)驗(yàn)結(jié)果表明該方法的最大測(cè)量誤差為0.21mm,滿(mǎn)足燈絲尺寸測(cè)量的要求。Kikuhito等人[2]針對(duì)復(fù)雜環(huán)境中的工件內(nèi)徑尺寸測(cè)量進(jìn)行研究,平均測(cè)量誤差達(dá)到0.5mm,Xiao等人[3]提出了一種基于機(jī)器視覺(jué)技術(shù)的在線(xiàn)尺寸精度測(cè)量方法,實(shí)現(xiàn)了紡紗過(guò)程中被紡工件的直線(xiàn)度和圓度的實(shí)時(shí)測(cè)量。在國(guó)內(nèi),左東祥等人[4]使用圖像形態(tài)學(xué)和灰度值特征,定位出剎車(chē)片外圍邊緣,尺寸測(cè)量誤差率為1%。謝紅等人[5]研究了圓孔的視覺(jué)檢測(cè)方法,實(shí)現(xiàn)一般工業(yè)零件的非接觸式測(cè)量。
上述文獻(xiàn)中尺寸檢測(cè)方法都是在圖像邊緣的基礎(chǔ)上進(jìn)行,邊緣的定位精度和正確性直接影響到尺寸的檢測(cè)精度[6],對(duì)于玻璃等透光、反光物體,邊緣提取的結(jié)果不理想,提取的邊緣出現(xiàn)虛假、丟失、錯(cuò)誤等問(wèn)題,例如,邊緣直線(xiàn)由多個(gè)線(xiàn)段錯(cuò)位組成使直線(xiàn)成了斜線(xiàn)、邊緣上有間隔的出現(xiàn)類(lèi)似波浪的紋路、直角出現(xiàn)丟失等。普通的邊緣處理方法無(wú)法從眾多虛假邊緣中識(shí)別并提取真實(shí)邊緣,零件的DXF圖形文件中記載了零件的實(shí)體數(shù)據(jù),可以作為先驗(yàn)知識(shí)指導(dǎo)圖像真實(shí)邊緣的提取。本文提出一種基于DXF數(shù)據(jù)的真實(shí)邊緣提取算法,處理有上述問(wèn)題的圖像邊緣,使處理后的邊緣圖像更符合實(shí)際情況,提高邊緣定位精度和正確性。
本文研究對(duì)象是手機(jī)玻璃蓋板,整個(gè)算法流程分為3個(gè)部分,首先使用高分辨率相機(jī)采集待測(cè)手機(jī)玻璃蓋板圖像,通過(guò)仿射變換校正目標(biāo)圖像,得到水平放置的手機(jī)玻璃蓋板圖像。使用Canny算法得到手機(jī)玻璃蓋板粗邊緣。其次按閉合輪廓將幾何圖形逐一提取出來(lái),并用與粗邊緣相同的像素點(diǎn)填充閉合輪廓,通過(guò)線(xiàn)掃描統(tǒng)計(jì)像素點(diǎn),計(jì)算填充輪廓邊緣的像素長(zhǎng)度。提取手機(jī)玻璃蓋板DXF圖形文件中的直線(xiàn)、圓弧等實(shí)體段數(shù)據(jù),將物理數(shù)據(jù)按比例轉(zhuǎn)換為像素?cái)?shù)據(jù),得到理論邊緣數(shù)據(jù),按照理論邊緣數(shù)據(jù)設(shè)置一定的區(qū)間,在數(shù)據(jù)區(qū)間內(nèi)的邊緣識(shí)別為真實(shí)邊緣。對(duì)于真實(shí)邊緣之外的虛假邊緣線(xiàn)段,予以消除;對(duì)于真實(shí)邊緣上丟失的部分,若其8鄰域內(nèi)其他像素點(diǎn)灰度值總和大于等于閾值、符合直角端點(diǎn)位置關(guān)系,在該部分補(bǔ)充與真實(shí)邊緣上其他部分相同的像素點(diǎn),得到完整的真實(shí)邊緣。最后對(duì)處理后的各輪廓填充圖像使用Canny邊緣提取算法得到邊緣圖像,將各邊緣圖像整合到一張圖像中形成完整的手機(jī)玻璃蓋板邊緣圖像。
工業(yè)現(xiàn)場(chǎng)環(huán)境復(fù)雜,采集到的工件圖像中含有椒鹽噪聲和高斯噪聲,本文采用自適應(yīng)中值濾波算法進(jìn)行濾波去噪[7]。
工業(yè)現(xiàn)場(chǎng)工件的擺放角度具有一定的隨機(jī)性,采集的圖像需要校正。對(duì)于采集到手機(jī)玻璃蓋板傾斜擺放的圖像,首先通過(guò)OTUS閾值法將目標(biāo)圖像與背景進(jìn)行分割[8],然后計(jì)算目標(biāo)圖像最小外接矩形,獲得中心坐標(biāo)C(x,y)和水平角度θ,求出旋轉(zhuǎn)矩陣M,最后由仿射變換[9]可以將目標(biāo)圖像旋轉(zhuǎn)水平。對(duì)圖像做仿射變換,需要先求出旋轉(zhuǎn)矩陣M,通過(guò)式(1)求得:
其中:α=S·cosθ,β=S·sinθ,C(x,y)是最小外接矩陣的中心坐標(biāo),S為放縮系數(shù),θ為矩形的旋轉(zhuǎn)角度。
旋轉(zhuǎn)角度θ為圖1中矩形長(zhǎng)與X軸的夾角,先求出θ角的對(duì)邊和鄰邊長(zhǎng)度,然后使用反三角函數(shù)求出角度。如式(2)所示:
圖1 矩形旋轉(zhuǎn)角度
在計(jì)算圖像最小外接矩形時(shí)其矩形偏轉(zhuǎn)角度是以X軸正方向?yàn)槠瘘c(diǎn),順時(shí)針為正,逆時(shí)針為負(fù)。在計(jì)算圖像旋轉(zhuǎn)矩陣時(shí),旋轉(zhuǎn)角度是以X軸正方向?yàn)槠瘘c(diǎn),順時(shí)針為負(fù),逆時(shí)針為正。式(2)計(jì)算出θ角度后,帶入式(1)中計(jì)算旋轉(zhuǎn)矩陣M,原圖像乘以旋轉(zhuǎn)矩陣M即可得到水平圖像,設(shè)置ROI區(qū)域?qū)⑹謾C(jī)玻璃蓋板圖像提取出來(lái)。圖2(a)為待矯正圖像,圖2(b)為旋轉(zhuǎn)校正后的圖像。
圖2 圖像校正
圖像邊緣提供了目標(biāo)物體的輪廓信息,這些信息為圖像的檢測(cè)與識(shí)別起到了主要的作用[10]。通過(guò)邊緣檢測(cè)得到待測(cè)區(qū)域的粗邊緣信息,常用的邊緣檢測(cè)算子有Robert算子、Sobel算子、Prewitt算子、Laplace算子、Canny算子。其中Canny邊緣檢測(cè)算子效果最好[11],本文采用Canny算子提取邊緣。圖3為Canny算子提取的手機(jī)玻璃蓋板邊緣圖像。
圖3 邊緣提取
圖4為圖3中手機(jī)玻璃蓋板邊緣的局部圖和與其對(duì)應(yīng)的原圖,從圖4中可以看到提取的邊緣出現(xiàn)虛假、錯(cuò)誤和丟失的問(wèn)題,圖4(a)中提取的直角出現(xiàn)丟失,圖4(b)部分邊緣由于光照不均和玻璃透光、反光等原因,邊緣局部由有間隔的小段線(xiàn)段組成,形成波浪紋,圖4(b)和圖4(c)中原本由一個(gè)線(xiàn)段組成的直線(xiàn),現(xiàn)在由多個(gè)線(xiàn)段錯(cuò)位組成。
圖4 Canny邊緣提取局部圖
DXF是用于AutoCAD和其他應(yīng)用程序之間數(shù)據(jù)交換的CAD數(shù)據(jù)文件格式。DXF文件從整體上來(lái)看可以分為7段[12]:HEADER、CLASSES、TABLES、BLOCKS、ENTITIES、OBJECTS、END OF FILE。每個(gè)段又包括多個(gè)組。每個(gè)組在文件中占兩行內(nèi)容:組值和組碼。DXF文件中用十進(jìn)制整數(shù)表示組碼,組碼包含組值的數(shù)據(jù)類(lèi)型等信息,組值的數(shù)據(jù)類(lèi)型一般有整型、浮點(diǎn)型或字符串型等。這7個(gè)組成段中BLOCKS段或ENTITIES段記錄了所有圖形實(shí)體對(duì)象的信息數(shù)據(jù),提取實(shí)體對(duì)象數(shù)據(jù)作為先驗(yàn)知識(shí),用于指導(dǎo)圖像真實(shí)邊緣的識(shí)別。讀取DXF圖形文件中圖形實(shí)體數(shù)據(jù)[13,14]的步驟為:
1)打開(kāi)DXF文件,按行讀取數(shù)據(jù),將讀出的數(shù)據(jù)暫時(shí)存入一個(gè)變量中。
2)判斷變量是否為BLOCKS、ENTITIES組值。
3)尋找BLOCKS、ENTITIES段中直線(xiàn)、圓弧等實(shí)體數(shù)據(jù),將數(shù)據(jù)按所屬類(lèi)別存儲(chǔ)起來(lái)并處理。
4)判斷該變量是否為字符串“EOF”。“EOF”是文件結(jié)尾的標(biāo)志。如果到達(dá)文件結(jié)尾則結(jié)束讀取過(guò)程。
使用DXF圖形文件中的實(shí)體數(shù)據(jù)指導(dǎo)圖像真實(shí)邊緣的提取,需要將實(shí)際的長(zhǎng)度轉(zhuǎn)化為圖像中的像素長(zhǎng)度,即物理參數(shù)轉(zhuǎn)化為計(jì)算機(jī)參數(shù)[4]。本文使用的相機(jī)的分率為3456×4608首先確定標(biāo)定板一個(gè)方格邊長(zhǎng)的實(shí)際尺寸d(單位:mm),然后利用機(jī)器視覺(jué)尺寸檢測(cè)系統(tǒng)采集標(biāo)定板的圖像并進(jìn)行處理,最后算出以像素為單位的尺寸D(單位:pixel),則轉(zhuǎn)換系數(shù)k=k/D,測(cè)得標(biāo)定系數(shù)k=0.028212。
2.3.1 閉合輪廓的提取和填充
圖3中的幾何要素過(guò)多無(wú)法一次處理所有邊緣,需要按幾何輪廓逐一處理。首先將圖3按閉合輪廓逐一提取出來(lái),其次用灰度值為255的白色像素點(diǎn)填充輪廓內(nèi)部,提取的部分輪廓填充后如圖5所示。
圖5 閉合輪廓填充
對(duì)各輪廓填充圖像的像素點(diǎn)進(jìn)行2次線(xiàn)掃描,在掃描結(jié)果上進(jìn)行真實(shí)邊緣的提取。第一次線(xiàn)掃描識(shí)別真實(shí)邊緣,第二次線(xiàn)掃描處理真實(shí)邊緣之外的虛假邊緣線(xiàn)段和真實(shí)邊緣上丟失的白色像素點(diǎn),然后再次提取邊緣,得到真實(shí)的輪廓邊緣。
2.3.2 真實(shí)邊緣的識(shí)別
對(duì)于填充后的閉合輪廓,第一次掃描統(tǒng)計(jì)每一行(列)灰度值為255的像素點(diǎn)個(gè)數(shù),即白色像素點(diǎn)的個(gè)數(shù)。統(tǒng)計(jì)公式為:
其中g(shù)(i,j)表示灰度值為255的像素點(diǎn),Tk為統(tǒng)計(jì)的白色像素點(diǎn)個(gè)數(shù)。
以圖5(c)為例,將各行(列)的像素統(tǒng)計(jì)值Tk,選取DXF圖形文件中記錄了圖5(c)所示圖形的左右兩邊直線(xiàn)長(zhǎng)度L,由轉(zhuǎn)換系數(shù)k=d/D,求出L對(duì)應(yīng)的像素長(zhǎng)度l=L/k。當(dāng)最右側(cè)線(xiàn)段的長(zhǎng)度Tk<l/2,為圖像真實(shí)邊緣之外的虛假邊緣,需要消除;在l/2<Tk<l+α之間,為圖像真實(shí)邊緣,若邊緣上有丟失的部分,需要補(bǔ)全丟失的邊緣像素點(diǎn),α為最大允許誤差;l≤Tk則不做處理。其他真實(shí)邊緣的識(shí)別同理。
2.3.3 直線(xiàn)的真實(shí)邊緣提取
第一次掃描確定真實(shí)邊緣、非真實(shí)邊緣后,第二次掃描采取從每一行的右端即列數(shù)最大的位置開(kāi)始,往左逐漸移動(dòng)。
對(duì)于圖像真實(shí)邊緣之外的虛假邊緣線(xiàn)段,線(xiàn)段上所有像素點(diǎn)的灰度值全部置為0,消除在幾何圖形輪廓外部突出的線(xiàn)段,例如在圖5(c)中最右側(cè)突出的線(xiàn)段。
對(duì)于圖像真實(shí)邊緣線(xiàn)段,搜索該線(xiàn)段上灰度值為0的像素點(diǎn),若有灰度值為0的像素點(diǎn),則遍歷其8鄰域內(nèi)灰度值為255的像素點(diǎn),當(dāng)白色像素點(diǎn)個(gè)數(shù)大于等于4個(gè),則該點(diǎn)為真實(shí)邊緣上的點(diǎn),將該點(diǎn)的灰度值賦為255,否則此點(diǎn)為圖像真實(shí)邊緣外的點(diǎn),不予賦值。如式(4)所示,其中h(i,j)為真實(shí)邊緣上灰度值為0的點(diǎn),V為某一像素點(diǎn)8鄰域內(nèi)像素灰度值的和。
圖6為模擬閉合輪廓填充后邊緣直線(xiàn)的局部,圖6(a)中的邊緣直線(xiàn)局部有部分白色像素點(diǎn)缺失,若對(duì)圖6(a)使用Canny邊緣提取算法得到圖像輪廓,輪廓邊緣直線(xiàn)會(huì)出現(xiàn)錯(cuò)層。圖6(b)為圖6(a)使用式(4)處理后的效果圖,灰色部分為補(bǔ)齊的像素點(diǎn)。對(duì)圖6(b)再次使用Canny邊緣提取算法,得到的邊緣直線(xiàn)筆直完整沒(méi)有錯(cuò)層。
圖6 直線(xiàn)邊緣處理原理圖
圖7(a)為手機(jī)玻璃蓋板內(nèi)輪廓邊緣直線(xiàn)局部圖,使用Canny邊緣提取后的圖像出現(xiàn)錯(cuò)層和波浪紋,如圖7(b)所示,對(duì)其使用直線(xiàn)的真實(shí)邊緣提取方法處理之后,使用Canny算法重新提取邊緣得到的圖像,如圖7(c)所示。
圖7 直線(xiàn)的真實(shí)邊緣提取
2.3.4 直角連接處的真實(shí)邊緣提取
圖8(a)是采集到的手機(jī)玻璃蓋板圖像的直角局部圖,圖8(b)顯示了其直角處灰度值有比較大的波動(dòng)。圖8(c)為Canny算子提取的圖像邊緣,其直角有一定丟失,直線(xiàn)局部有錯(cuò)層和波浪紋。對(duì)于直線(xiàn)的錯(cuò)層和波浪紋,根據(jù)直線(xiàn)的真實(shí)邊緣提取方法可以將其處理,但是遇到兩直線(xiàn)交點(diǎn)處缺失的直角則需要新的處理方法。
圖8 采集的玻璃局部圖像
圖9(a)為模擬四個(gè)角有缺陷的矩形,設(shè)矩形的外圍像素點(diǎn)灰度值為0。通過(guò)直線(xiàn)的真實(shí)邊緣提取方法可以將矩形邊緣直線(xiàn)上的丟失像素補(bǔ)充完整,但是對(duì)于直線(xiàn)交點(diǎn)處的像素點(diǎn),上述方法并不適用,如圖9(b)所示。圖9(b)中A,B,C,D四個(gè)角無(wú)法被上述方法補(bǔ)齊,分析四個(gè)角的共同特征是8鄰域內(nèi)灰度值為255的點(diǎn)只有3個(gè),V值為765。以這個(gè)共同特征點(diǎn)為依據(jù)消除直角鋸齒。
圖9 直角邊緣處理原理圖
對(duì)于圖9(b)中上端直線(xiàn)的左端點(diǎn)A(x,y),A下方的點(diǎn)(x+1,y)=255,且點(diǎn)A右下方點(diǎn)(x+1,y+1)=255,左下方點(diǎn)(x,y-1)=0,同時(shí)滿(mǎn)足上面3個(gè)條件的像素點(diǎn)為直線(xiàn)左端點(diǎn),可以將該點(diǎn)灰度值賦為255。同理對(duì)于點(diǎn)B,條件變?yōu)锽點(diǎn)下方點(diǎn)與左下方點(diǎn)灰度值為255,右下方點(diǎn)灰度值為0。矩形四角的判斷方式如圖10所示。
圖10 直角邊緣處理流程圖
圖8(c)中矩形的完整體經(jīng)過(guò)按閉合輪廓逐一提取、填充后,使用直線(xiàn)的真實(shí)邊緣提取方法和圖10所示的直角邊緣處理方法處理之后,原來(lái)矩形填充圖邊緣直線(xiàn)上錯(cuò)層線(xiàn)段、波浪紋等虛假邊緣被校正,缺失的直角被修復(fù)。重新提取邊緣后的直角局部如圖11所示。
圖11 直角邊緣處理效果圖
2.3.5 直線(xiàn)圓弧鏈接處的真實(shí)邊緣提取
當(dāng)與圓弧相交的直線(xiàn)長(zhǎng)度Tk,滿(mǎn)足l<Tk<l+α?xí)r邊緣沒(méi)有出現(xiàn)虛假、丟失、錯(cuò)誤等問(wèn)題,不做任何處理,如圖12(a)所示的圓弧與直線(xiàn)連接。圖12(b)為與圓弧相交的直線(xiàn)出現(xiàn)波浪紋等虛假邊緣,需要做一定的處理。對(duì)于直線(xiàn)與圓弧的交點(diǎn),需保證不偏離原有的連接弧度,在直線(xiàn)與圓弧的真實(shí)邊緣提取過(guò)程中加入偏移量β來(lái)保持原有的直線(xiàn)圓弧連接處的弧度。根據(jù)圖10可知,直線(xiàn)端點(diǎn)的判斷有4種情況,與圓弧連接的直線(xiàn)端點(diǎn)也可以用這4種情況判斷,判定之后將端點(diǎn)往直線(xiàn)中心縮進(jìn)β個(gè)像素,使連接處的弧度符合實(shí)際情況。多次實(shí)驗(yàn)后β取值為3。圖12(c)為處理之后的直線(xiàn)與圓弧的連接圖。
采集3組玻璃蓋板的圖像進(jìn)行真實(shí)邊緣提取,圖13中每一組第一張圖為玻璃蓋板邊緣輪廓全局圖,其余4張圖是第一張圖的局部圖。第一組圖像中圖13(a)是沒(méi)有經(jīng)過(guò)處理的玻璃蓋板邊緣圖,圖13(a)中邊緣有波浪紋、多重邊緣、直角丟失和錯(cuò)位線(xiàn)段等問(wèn)題。圖13(b)是圖13(a)經(jīng)過(guò)基于DXF數(shù)據(jù)的真實(shí)邊緣提取算法處理后的圖像。圖13(b)中直線(xiàn)消除了波浪紋和多重邊緣等虛假邊緣,補(bǔ)齊了真實(shí)邊緣上丟失的部分,校正了錯(cuò)層的直線(xiàn),使新的玻璃蓋板邊緣輪廓更加符合實(shí)際情況。第二組圖像圖13(c)中主要的問(wèn)題是邊緣直線(xiàn)由錯(cuò)層線(xiàn)段組成,直線(xiàn)不連貫,圖13(d)是處理線(xiàn)段錯(cuò)層之后的圖像,邊緣由成連貫的直線(xiàn)組成。第三組圖像圖13(e)中的邊緣出現(xiàn)的問(wèn)題和圖13(a)類(lèi)似,處理后的邊緣如圖13(f)所示,解決了波浪紋、直線(xiàn)錯(cuò)層、多余的邊緣和直角邊緣的缺失等邊緣問(wèn)題。
圖13 真實(shí)邊緣提取結(jié)果
由實(shí)驗(yàn)結(jié)果可知基于DXF數(shù)據(jù)的圖像真實(shí)邊緣提取方法對(duì)于規(guī)則的玻璃蓋板邊緣提取有很好的適用性,使提取的邊緣與實(shí)物更切合,減少了圖像采集和圖像處理過(guò)程中造成的邊緣提取誤差,提高了邊緣定位精度和正確性。
本文利用DXF圖形文件中實(shí)體數(shù)據(jù)的先驗(yàn)性,指導(dǎo)圖像處理提取圖像真實(shí)邊緣,消除真實(shí)邊緣之外的虛假邊緣和補(bǔ)全真實(shí)邊緣上丟失的部分,校正了錯(cuò)誤的邊緣,解決了在復(fù)雜環(huán)境下,傳統(tǒng)邊緣提取算法會(huì)造成玻璃等透光、反光物體圖像邊緣出現(xiàn)虛假、丟失、錯(cuò)誤等問(wèn)題。實(shí)現(xiàn)了圖像真實(shí)邊緣提取的目的,提高了邊緣的定位精度和正確性,對(duì)其他平面玻璃制品的視覺(jué)測(cè)量有一定借鑒意義。