本發(fā)明涉及一種dm(data?matrix)碼識別技術,尤其是涉及一種基于l型虛邊定位的低質(zhì)量dm碼快速識別方法。
背景技術:
1、如今,dm碼已廣泛應用于工業(yè)自動化、倉庫管理、智能物流中心等多個領域場景。dm碼通常由尋找定位標識、時鐘定位標識和數(shù)據(jù)區(qū)域組成,圖1a給出了一個完整的dm碼(dm碼由數(shù)個黑module(譯為元素或模塊)和數(shù)個白module組成);圖1b給出了圖1a所示的dm碼的尋找定位標識,即l型實邊;圖1c給出了圖1a所示的dm碼的時鐘定位標識,即l型虛邊;圖1d給出了圖1a所示的dm碼的數(shù)據(jù)區(qū)域。
2、目前主流的dm碼識別方法都是基于l型實邊定位的識別方法。在l型實邊無干擾或干擾較小的情況下,基于l型實邊定位的識別方法對dm碼進行定位識別,已經(jīng)取得了令人印象深刻的效果。然而,在工業(yè)復雜生產(chǎn)環(huán)境中,受打印技術限制、打印材料和工藝精度不足以及產(chǎn)品之間接觸產(chǎn)生的劃痕的影響,會導致dm碼圖像產(chǎn)生低質(zhì)量的情況,比如l型實邊和l型虛邊存在毛刺和斷開。而基于l型實邊定位的識別方法考慮的dm碼圖像的質(zhì)量過于理想,且缺少對dm碼的l型實邊和l型虛邊受毛刺和斷開干擾問題的考慮,導致定位dm碼成功率急劇下降,這給dm碼識別帶來了很大的挑戰(zhàn)。因此,研究一種用于工業(yè)復雜生產(chǎn)環(huán)境下的低質(zhì)量dm碼識別方法是急需且有意義的。
技術實現(xiàn)思路
1、本發(fā)明所要解決的技術問題是提供一種基于l型虛邊定位的低質(zhì)量dm碼快速識別方法,其能夠快速準確地實現(xiàn)對工業(yè)復雜生產(chǎn)環(huán)境下含毛刺和斷開干擾的低質(zhì)量dm碼的識別。
2、本發(fā)明解決上述技術問題所采用的技術方案為:一種基于l型虛邊定位的低質(zhì)量dm碼快速識別方法,其特征在于包括粗定位、細定位和解碼三個階段,
3、所述粗定位階段的具體過程如下:
4、將待識別的低質(zhì)量dm碼圖像記為iorg;然后使用預訓練yolov5網(wǎng)絡對iorg進行粗定位,得到iorg中的一個包含完整的dm碼的粗略矩形區(qū)域rectcoarse的位置標記,位置標記包括rectcoarse的左上角像素和右下角像素在iorg中的坐標位置;再從iorg中提取出粗略矩形區(qū)域rectcoarse,作為dm碼粗略位置圖像,記為icoarse;
5、所述細定位階段的具體步驟如下:
6、步驟s1:對dm碼粗略位置圖像icoarse進行預處理,預處理包含依次進行處理的縮放、旋轉(zhuǎn)、邊界裁剪和斷開填補,旋轉(zhuǎn)處理使dm碼呈直立狀態(tài),斷開填補實現(xiàn)dm碼的所有黑module上的白色斷開處的填補,預處理得到填補圖像ifilled;
7、步驟s2:dm碼l型虛邊定位,具體過程為:
8、步驟s2.1:在填補圖像ifilled的水平方向上,統(tǒng)計每行中的黑連續(xù)段和白連續(xù)段,將第row行中的所有黑連續(xù)段和白連續(xù)段按連接段的先后順序構(gòu)成的集合記為sh(row);在填補圖像ifilled的豎直方向上,統(tǒng)計每列中的黑連續(xù)段和白連續(xù)段,將第col列中的所有黑連續(xù)段和白連續(xù)段按連接段的先后順序構(gòu)成的集合記為sv(col);其中,黑連續(xù)段由一個及以上的連續(xù)黑像素組成,白連續(xù)段由一個及以上的連續(xù)白像素組成,row∈[0,hfi),col∈[0,wfi),hfi表示ifilled的高,wfi表示ifilled的寬;
9、步驟s2.2:基于填補圖像ifilled的所有行中的所有連續(xù)段,利用兩級約束篩選策略定位得到所有選定單行虛邊,將所有選定單行虛邊構(gòu)成水平虛邊;基于填補圖像ifilled的所有列中的所有連續(xù)段,利用兩級約束篩選策略定位得到所有選定單列虛邊,將所有選定單列虛邊構(gòu)成豎直虛邊;再將水平虛邊和豎直虛邊構(gòu)成dm碼l型虛邊;其中,兩級約束篩選策略包含第一級通用約束篩選策略和第二級中心對稱約束篩選策略,利用兩級約束篩選策略定位得到選定單行虛邊和選定單列虛邊的具體過程如下:
10、第一級通用約束篩選策略:在填補圖像ifilled的水平方向上,令sh(row,j)表示sh(row)中的第j段連續(xù)段,令ch(row,j)表示sh(row,j)的顏色,ch(row,j)為0時說明sh(row,j)為黑連續(xù)段,ch(row,j)為1時說明sh(row,j)為白連續(xù)段,令lh(row,j)表示sh(row,j)的長度,其中,j∈[0,nh(row)),nh(row)表示sh(row)中的連續(xù)段的總段數(shù);令候選單行虛邊的起始段的索引為jst,令候選單行虛邊的終止段的索引為jed,然后確定ifilled中的候選單行虛邊,針對ifilled的第row行如果滿足如下所有通用約束,那么確定ifilled的第row行中有候選單行虛邊,通用約束如下:
11、l1.h1)起始段為黑連續(xù)段,起始段不為sh(row)中的第一段,即:ch(row,jst)=0,jst∈[1,nh(row));其中,ch(row,jst)表示起始段的顏色;
12、l1.h2)依次遍歷起始段之后的每段連續(xù)段,計算起始段與當前遍歷的連續(xù)段的長度比值,若長度比值在區(qū)間[βmin,βmax]內(nèi),則認為當前遍歷的連續(xù)段為候選單行虛邊的連續(xù)段,若長度比值不在區(qū)間[βmin,βmax]內(nèi),則不再遍歷后續(xù)的連續(xù)段;
13、l1.h3)終止段為黑連續(xù)段,終止段不為sh(row)中的最后一段,終止段和起始段之間至少有1段連續(xù)段,即:ch(row,jed)=0,jed∈[jst+2,nh(row)-1);其中,ch(row,jed)表示終止段的顏色;
14、在填補圖像ifilled的豎直方向上,令sv(col,i)表示sv(col)中的第i段連續(xù)段,令cv(col,i)表示sv(col,i)的顏色,cv(col,i)為0時說明sv(col,i)為黑連續(xù)段,cv(col,i)為1時說明sv(col,i)為白連續(xù)段,令lv(col,i)表示sv(col,i)的長度,其中,i∈[0,nv(col)),nv(col)表示sv(col)中的連續(xù)段的總段數(shù);令候選單列虛邊的起始段的索引為ist,令候選單列虛邊的終止段的索引為ied,然后確定ifilled中的候選單列虛邊,針對ifilled的第col列如果滿足如下所有通用約束,那么確定ifilled的第col列中有候選單列虛邊,通用約束如下:
15、l1.v1)起始段為黑連續(xù)段,起始段不為sv(col)中的第一段,即:cv(col,ist)=0,ist∈[1,nv(col));其中,cv(col,ist)表示起始段的顏色;
16、l1.v2)依次遍歷起始段之后的每段連續(xù)段,計算起始段與當前遍歷的連續(xù)段的長度比值,若長度比值在區(qū)間[βmin,βmax]內(nèi),則認為當前遍歷的連續(xù)段為候選單列虛邊的連續(xù)段,若長度比值不在區(qū)間[βmin,βmax]內(nèi),則不再遍歷后續(xù)的連續(xù)段;
17、l1.v3)終止段為黑連續(xù)段,終止段不為sv(col)中的最后一段,終止段和起始段之間至少有1段連續(xù)段,即:cv(col,ied)=0,ied∈[ist+2,nv(col)-1);其中,cv(col,ied)表示終止段的顏色;
18、第二級中心對稱約束篩選策略:在填補圖像ifilled的水平方向上,令th(row,j)表示sh(row,j)的終點像素的橫坐標值,令hh(row,j)表示sh(row,j)的起始像素的橫坐標值;然后從ifilled中的所有候選單行虛邊中篩選出選定單行虛邊,設定ifilled的第row行中有候選單行虛邊,則針對ifilled的第row行的候選單行虛邊如果滿足如下所有中心對稱約束,那么將ifilled的第row行的候選單行虛邊確定為選定單行虛邊,中心對稱約束如下:
19、l2.h1)起始段的終點像素位于ifilled的豎直中線的左側(cè),即:th(row,jst)<wfi/2;其中,th(row,jst)表示起始段的終點像素的橫坐標值;
20、l2.h2)終止段的起始像素位于ifilled的豎直中線的右側(cè),即:hh(row,jed)>wfi/2;其中,hh(row,jed)表示終止段的起始像素的橫坐標值;
21、l2.h3)完全位于ifilled的豎直中線的左側(cè)連續(xù)段的數(shù)量和完全位于ifilled的豎直中線的右側(cè)連續(xù)段的數(shù)量均大于或等于4段;
22、l2.h4)完全位于ifilled的豎直中線的左側(cè)連續(xù)段的數(shù)量與完全位于ifilled的豎直中線的右側(cè)連續(xù)段的數(shù)量的差值絕對值不超過2;
23、l2.h5)候選單行虛邊到ifilled的水平中線的距離大于ifilled的高的1/3,即:yh(row)-hfi/2>hfi/3;其中,yh(row)表示ifilled的第row行的行索引,符號“”為取絕對值符號;
24、在填補圖像ifilled的豎直方向上,令tv(col,i)表示sv(col,i)的終點像素的橫坐標值,令hv(col,i)表示sv(col,i)的起始像素的橫坐標值;然后從ifilled中的所有候選單列虛邊中篩選出選定單列虛邊,設定ifilled的第col列中有候選單列虛邊,則針對ifilled的第col行的候選單列虛邊如果滿足如下所有中心對稱約束,那么將ifilled的第col行的候選單列虛邊確定為選定單列虛邊,中心對稱約束如下:
25、l2.v1)起始段的終點像素位于ifilled的水平中線的上方,即:tv(col,ist)<hfi/2;其中,tv(col,ist)表示起始段的終點像素的橫坐標值;
26、l2.v2)終止段的起始像素位于ifilled的水平中線的下方,即:hv(col,ied)>hfi/2;其中,hv(col,ied)表示終止段的起始像素的橫坐標值;
27、l2.v3)完全位于ifilled的水平中線的上方連續(xù)段的數(shù)量和完全位于ifilled的水平中線的下方連續(xù)段的數(shù)量均大于或等于4段;
28、l2.v4)完全位于ifilled的水平中線的上方連續(xù)段的數(shù)量與完全位于ifilled的水平中線的下方連續(xù)段的數(shù)量的差值絕對值不超過2;
29、l2.v5)候選單列虛邊到ifilled的豎直中線的距離大于ifilled的寬的1/3,即:xv(col)-wfi/2>wfi/3;其中,xv(col)表示ifilled的第col列的列索引;
30、步驟s3:dm碼精確位置圖像獲取,具體過程為:
31、步驟s3.1:找出dm碼l型虛邊的水平虛邊中的中間單行虛邊和豎直虛邊中的中間單列虛邊;再基于中間單行虛邊上的兩個像素的橫坐標x1,x2和中間單列虛邊上的兩個像素的兩個縱坐標y1,y2,定位dm碼數(shù)據(jù)矩形區(qū)域rectdata,rectdata的左上角像素的坐標位置為(x1,y1),rectdata的右上角像素的坐標位置為(x2,y2),x1,x2,y1,y2的確定過程如下:
32、1)當中間單列虛邊位于ifilled的豎直中線的左側(cè),且中間單行虛邊位于ifilled的水平中線的下方或上方時,x1等于中間單行虛邊的起始段的起始像素的橫坐標,x2等于中間單行虛邊的終止段的起始像素的橫坐標;當中間單列虛邊位于ifilled的豎直中線的右側(cè),且中間單行虛邊位于ifilled的水平中線的下方或上方時,x1等于中間單行虛邊的起始段的終點像素的橫坐標,x2等于中間單行虛邊的終止段的終點像素的橫坐標;
33、2)當中間單行虛邊位于ifilled的水平中線的上方,且中間單列虛邊位于ifilled的豎直中線的右側(cè)或左側(cè)時,y1等于中間單列虛邊的起始段的起始像素的縱坐標,y2等于中間單列虛邊的終止段的起始像素的縱坐標;當中間單行虛邊位于ifilled的水平中線的下方,且中間單列虛邊位于ifilled的豎直中線的右側(cè)或左側(cè)時,y1等于中間單列虛邊的起始段的終點像素的縱坐標,y2等于中間單列虛邊的終止段的終點像素的縱坐標;
34、步驟s3.2:以dm碼數(shù)據(jù)矩形區(qū)域rectdata上靠近dm碼l型實邊的水平實邊的水平邊界為基準,向外擴展個像素寬度,得到一條新水平邊界;以dm碼數(shù)據(jù)矩形區(qū)域rectdata上靠近dm碼l型實邊的豎直實邊的豎直邊界為基準,向外擴展個像素寬度,得到一條新豎直邊界;以dm碼l型虛邊的水平虛邊中的中間單行虛邊為基準,向外擴展個像素寬度,得到另一條新水平邊界;以dm碼l型虛邊的豎直虛邊中的中間單列虛邊為基準,向外擴展個像素寬度,得到另一條新豎直邊界;兩條新水平邊界和兩條新豎直邊界定位的矩形區(qū)域作為dm碼精確位置矩形區(qū)域rectdmcode;其中,表示dm碼l型虛邊的水平虛邊中的中間單行虛邊中的所有黑連續(xù)段的平均長度,表示dm碼l型虛邊的豎直虛邊中的中間單列虛邊中的所有黑連續(xù)段的平均長度;
35、步驟s3.3:從ifilled中提取出dm碼精確位置矩形區(qū)域rectdmcode,作為圖像idmcoderect;然后對idmcoderect的四周各向外擴展5個像素寬度的白色邊界,得到dm碼精確位置圖像,記為iprecise;
36、所述解碼階段的具體過程如下:使用libdmtx方法對dm碼精確位置圖像iprecise進行解碼,得到dm碼的內(nèi)容rdata。
37、所述預訓練yolov5網(wǎng)絡的獲取過程如下:
38、步驟1.1:采集數(shù)張低質(zhì)量的dm碼圖像;然后使用labelimg工具對每張dm碼圖像進行dm碼標注,得到標注結(jié)果,標注結(jié)果包含dm碼的所屬類別和dm碼的粗略矩形區(qū)域的位置標記,位置標記包括dm碼的粗略矩形區(qū)域的左上角坐標和右下角坐標;再將所有dm碼圖像及每張dm碼圖像的標注結(jié)果構(gòu)成訓練數(shù)據(jù)集;
39、步驟1.2:對yolov5網(wǎng)絡的訓練參數(shù)進行調(diào)整,將類別數(shù)設置為1,將訓練輪次設置為300次,將初始學習率設置為0.05;
40、步驟1.3:使用訓練數(shù)據(jù)集和調(diào)整的訓練參數(shù),對yolov5網(wǎng)絡進行訓練,在訓練輪次到達后得到預訓練yolov5網(wǎng)絡。
41、所述步驟s1中,縮放處理的具體過程為:對dm碼粗略位置圖像icoarse進行縮放,得到縮放圖像iresized,iresized的高和寬對應為hrs和wrs,hrs=hcs×α,wrs=wcs×α;其中,hcs和wcs對應表示icoarse的高和寬,α表示縮放因子,α=max{hcs,wcs}lresized,max為取最大值函數(shù),lresized表示iresized的長邊的長度預設值,iresized的長邊為iresized的高hrs或?qū)抴rs。
42、所述步驟s1中,旋轉(zhuǎn)處理的具體過程為:使用canny方法,提取縮放圖像iresized的邊緣圖iedge;然后使用hough方法從iedge中找出所有滿足以下條件的白色直線,條件:由35個以上的連續(xù)像素組成一條白色直線;再統(tǒng)計所有白色直線與iedge的y軸正方向的夾角,夾角角度為iedge的y軸正方向沿順時針到白色直線旋轉(zhuǎn)的角度值,將出現(xiàn)次數(shù)最多的角度作為旋轉(zhuǎn)角度θ;最后根據(jù)旋轉(zhuǎn)角度θ和iresized中的中心像素的坐標位置,逆時針旋轉(zhuǎn)iresized得到dm碼呈直立狀態(tài)的直立dm碼圖像irotated,irotated的高和寬對應為hrt和wrt,hrt=hrs,wrt=wrs,irotated中的像素的坐標位置(xrt,yrt)與iresized中的像素的坐標位置(xrs,yrs)的映射關系為:其中,xc和yc對應表示iresized中的中心像素的橫坐標和縱坐標。
43、所述步驟s1中,邊界裁剪處理的具體過程為:將直立dm碼圖像irotated四周邊界的無效區(qū)域裁掉,得到裁剪圖像icropped,無效區(qū)域的單邊寬度為d個像素,
44、所述步驟s1中,斷開填補處理的具體過程為:先使用ostu方法對裁剪圖像icropped進行自動二值化操作得到二值圖,再使用先腐蝕再膨脹的形態(tài)學操作對二值圖中dm碼的所有黑module上的白色斷開進行填補,得到填補圖像ifilled。
45、與現(xiàn)有技術相比,本發(fā)明的優(yōu)點在于:
46、1)不同于現(xiàn)有技術基于l型實邊對dm碼進行定位,本發(fā)明方法提出了一種基于深度學習方法的粗定位和基于l型虛邊的細定位框架,以解決傳統(tǒng)方法基于l型實邊易受毛刺和斷開干擾問題,從而得到更準確的dm碼定位和識別結(jié)果。
47、2)本發(fā)明方法提出了一種兩級約束篩選策略,該策略在使用了通用虛邊約束篩選策略的基礎上,還結(jié)合了dm碼中心約束篩選策略,有效地提高了定位l型虛邊的精度。
48、3)本發(fā)明方法相較于主流dm碼識別方法,能夠得到更高的識別正確率和更低的識別耗時,更能適應工業(yè)生產(chǎn)環(huán)境下的實際應用。