本發(fā)明屬于圖像處理與識別領域,涉及一種二維碼的定位識別方法,特別涉及一種datamatrix二維碼的識別方法。
背景技術:
::datamatrix二維碼(dm碼)是二維碼的主要成員之一,廣泛應用于工業(yè)制造領域以及民用領域。dm碼由美國國際資料公司(idmatrix)發(fā)明,是一種矩陣式二維條碼,它是現有二維條碼中尺寸最小,密度最大,25mm2的面積可以編碼30個數字,尤其適合于小零件的標識與直接印刷在實體上。dm碼廣泛使用于商品的防偽、統籌標識,雖然dm碼的標準已經公開,但在國內研究的并不多。目前國內使用的dm碼識別底層算法主要還是從國外進口,國外的產品識別率雖然高,但價格比較昂貴,且識別的原理沒有公開,因此有必要自主研發(fā)一種dm碼識別算法,以解決目前國內dm碼識別依賴進口的現狀,具有很高現實意義。在二維碼識別領域,條碼的定位與識別是難點,也是重點。關于條碼的圖像處理與定位,國內有些學者已經做過一些有益的研究,有采用紋理特征區(qū)域篩選的,有直接采用霍夫直線檢測的,有采用神經網絡方法的,他們有各自的適用范圍及優(yōu)缺點。目前國內現有的dm碼識別技術的適用范圍受限,對于某些背景復雜,有噪聲的圖像,識別率不高,或者時間消耗較長,不能滿足實際應用的實時性,特別在嵌入式dm碼識別的實時性要求。技術實現要素:本發(fā)明要解決的技術問題在于,針對現有技術的上述缺陷,提出一種datamatrix二維碼的識別方法,圖像適應能力較強,識別率高,并且速度快。本發(fā)明解決其技術問題所采用的技術方案是:提供一種datamatrix二維碼的識別方法,包括:dm碼粗定位的步驟,其具體包括圖像邊緣計算處理、二值化處理、池化處理、濾波處理、連通域標記處理以及候選圖案切割處理;dm碼精定位的步驟,其具體包括迭代法二值化處理、robert算子邊緣計算處理、霍夫直線檢測處理、“l(fā)”邊直線篩選處理、虛邊定位處理、虛邊標志與模塊計算處理;以及dm碼識別的步驟,其具體包括網格數據獲取處理和數據解碼處理。其中,所述的圖像邊緣計算處理是采用自定義邊緣檢測算子對原圖像進行邊緣檢測,自定義邊緣檢測算子為:其中,還包括:對原圖進行金字塔變換,取第二層圖像作為dm碼粗定位的圖像輸入。其中,所述的池化處理是采用n×n的矩形區(qū)域,其中有大于等于t個白點,該區(qū)域池化為255,否則為0。其中,所述的圖像濾波處理是求取當前點的八個鄰域,如果有其中一個點為255,且當前點為255時,則置該當前點為255,否者為0。其中,所述的霍夫直線檢測處理的核心計算代碼為r=(x*costable[θ]+y*sintable[θ])>>n,即通過查表、整型乘法與移位操作實現,其中,r為極徑,θ為極角,x,y為坐標值。其中,所述的網格數據獲取處理采用了把定位到的x,y坐標分別在其左右、上下偏移1~2個像素,共有設定9個標志×標志的網格數據陣列送入解碼模塊解碼,一旦某個陣列能解碼就輸出結果。其中,所述的網格數據獲取處理是獲取網格數據之前是對粗定位的圖像進行迭代法二值化的;并且,把用迭代法求得的二值化閾值基礎上加與減一個數值,作為不能解碼的候選閾值;進一步地,把自適應二值化法二值化圖像,作為不能解碼的另一候選閾值。其中,還包括:在當前識別不成功時,更換候選區(qū)域進行再次嘗試,直到成功解碼或已經切割設定個數。其中,所述候選圖案切割處理是切割下一個近似正方形且邊緣信息豐富的最大連通域。本發(fā)明的有益效果在于,首先通過圖像邊緣計算、二值化、池化、濾波、連通域標記與候選圖案切割等處理,完成dm碼的粗定位;接著,通過對切割的圖案進行迭代法二值化、robert算子邊緣計算、霍夫直線檢測、“l(fā)”邊直線篩選、虛邊定位以及虛邊標志與模塊計算等處理,完成dm碼的精定位;然后,通過對精定位的dm碼進行網格數據獲取與數據解碼等處理,完成dm碼的識別,圖像適應能力較強,識別率高,并且速度快。附圖說明下面將結合附圖及實施例對本發(fā)明作進一步說明,附圖中:圖1是本發(fā)明實施例的主流程圖。圖2是本發(fā)明實施例經過池化濾波后的樣圖。圖3是本發(fā)明實施例經過霍夫直線檢測后的樣圖。具體實施方式現結合附圖,對本發(fā)明的較佳實施例作詳細說明。參見圖1,圖1是本發(fā)明實施例的主流程圖。本發(fā)明提出本發(fā)明一種datamatrix二維碼的識別方法,包括s1、s2、s3、s4四大步驟。其中,步驟s1是對dm碼進行粗定位,具體包括:對獲取的圖像進行自定義邊緣檢測,然后采用自動閾值二值化、圖像池化、圖像濾波、圖像連通域的計算、找到近似正方形且邊緣信息豐富的最大連通域,接著找到該連通域的上下左右四個頂點,然后根據四個頂點,把該矩形圖像從原圖中切割出來。步驟s2是對dm碼進行精定位,具體包括:迭代法二值化粗定位圖像、robert算子邊緣檢測、霍夫直線檢測、l邊直線篩選、虛邊定位、符號(symbol)與模塊(module)計算、dm碼四個頂點坐標計算。步驟s3是對dm碼進行識別,具體包括:根據dm碼精定位的結果對它進行網格數據獲取,然后把網格數據送入dm碼解碼模塊解碼。步驟s4是在當前識別不成功時,更換候選區(qū)域進行再次嘗試,具體包括:如果解碼未成功,就切割下一個近似正方形且邊緣信息豐富的最大連通域(具體地,先求得連通域矩陣的直方圖,即得到最大的連通域到最小的連通域所有連通域數值表,然后根據連通域直方圖從大到小依次選擇候選連通域),再進行精確定位,獲取dm碼網格數據,把數據送入dm碼解碼模塊,直到成功解碼或已經切割設定個數(例如:三個,具體數量,根據實際應用環(huán)境選擇)以上滿足條件的連通域才終止算法。在本實施例中,步驟s1具體包括以下六個子步驟。步驟s11、自定義邊緣算子計算圖像邊緣;也即,采用自定義邊緣檢測算子對原圖像進行邊緣檢測,其中,自定義邊緣檢測算子如下所示:用g1,g2算子分別對原圖像進行計算,且一并計算邊緣檢測后的直方圖。值得一提的是,如果原始圖像分辨率較大時(該參數可以讀圖像文件獲取或直接作為參數輸入),可以對原圖進行金字塔變換,取第二層圖像作為dm碼粗定位的圖像輸入,以加快粗定位速度。步驟s12、二值化閾值求取與二值化;也即,通過步驟s11獲得的直方圖,求取經過邊緣檢測后圖像的二值化閾值,根據二值化閾值二值化經過步驟s11處理的邊緣圖像。步驟s13、閾值法圖像池化;也即,對步驟s12處理后的圖像進行池化。具體地,是采用n×n的矩形區(qū)域,其中有大于等于t個白點,該區(qū)域池化為255,否則為0。可以理解的是,采用n×n的矩形作為圖像池化尺寸,并選取t作為池化閾值,該參數對正常應用的二維碼圖像具有較強的適應性,池化后不僅能夠把dm碼中間空心的部分變成實心,還能大大加快粗定位速度。步驟s14、圖像濾波;也即,對步驟s13處理過后的圖像進行濾波,消除孤立白點。具體地,是求取當前點的八個鄰域,如果有其中一個點為255,且當前點為255時,則置該當前點為255,否者為0,圖2示意出的一個經過池化濾波后的樣圖,圖中最里層最大白色連通塊對應于二維碼區(qū)域。步驟s15、圖像連通域標記;也即,對步驟s14處理后的圖像進行連通域標注,把連通域的標號放到一個標記矩陣中。具體地,連通域標注的具體步驟如下:e1)初始化一個標記矩陣a,一個隊列q及標記計數器n;e2)從左至右,從上至下順序掃描待標記圖像,當掃描到一個未標記的前景像素p時,n加1,在a中標記為p,接著掃描p的八個鄰域,若存在未被標記的前景像素,則在a中標記,并放入隊列q中,作為區(qū)域生長的種子;e3)當隊列q不為空時,從隊列中取出一個生長種子s,掃描s的八個鄰域點,若有未標記的前景像素,則在a中標記,并入隊列q;e4)檢測隊列q是否為空,非空轉移到步驟e3,否者轉移到步驟e5;e5)檢測待標記圖像是否掃描完畢,如果未掃描完成,轉移到步驟e2,否則結束連通域標記。步驟s16、檢測出近似正方形且邊緣信息豐富的連通域;也即,根據步驟s15處理后的連通域矩陣,找出其中上下左右四個邊界組成的矩形近似正方形、且內部邊緣信息很豐富的最大連通域圖像塊。在本實施例中,步驟s2具體包括以下九個子步驟。步驟s21、從原圖中切割候選區(qū)域圖像;也即,根據步驟s16獲取到的四個邊界坐標,在原圖中切割該圖像塊。步驟s22、迭代法二值化切割圖像;也即,對步驟s21獲取的圖像塊,采用迭代法二值化。步驟s23、robert邊緣算子邊緣計算;也即,采用robert算子處理步驟s22處理后的圖像,具體地,robert算子如下所示:與求取|g(x,y)|=max(|f(x,y)-f(x+1,y+1)|,|f(x+1,y)-f(x,y+1|)做為結果。步驟s24、霍夫直線檢測;也即,霍夫直線檢測經過步驟s23處理后的圖像,圖3示意出dm碼經過霍夫直線檢測記錄下來的10條直線樣圖,霍夫直線檢測的具體步驟如下:j1)對二值圖像進行霍夫變換;j2)求出變換域中最大的點并記錄它們的極徑r與極角θ;j3)把滿足變換域中等于r與θ及其附近對應的直角坐標點記錄下來,直線記錄數量num加1;j4)將其變換域中等于r與θ及其附近的點清0;j5)如果num小于k,則表示還未記錄滿k條直線坐標,轉移到步驟j2,否者結束。值得一提的是,在本實施例中,霍夫直線變換核心計算代碼:r=x*cosθ+y*sinθ不是采用浮點數乘法,而是分別把cosθ與sinθ乘以2n取整后做成查找表,代碼變?yōu)閞=(x*costable[θ]+y*sintable[θ])>>n,所以核心計算公式由浮點數乘法變成整型乘法與移位操作,算法速度大大加快。步驟s25、“l(fā)”邊候選直線篩選;也即,初步篩選l邊直線及計算l邊直線斜率k與截距b,具體地,對k條直線進行篩選,其篩選條件如下:k1)檢測這k條直線連續(xù)長度是否大于40(單位:像素距離)以上;k2)檢測這k條直線兩兩直線相減的角度絕對值是否在90°附近(例如:85°~95°)與270°附近(例如:265°~275°);k3)檢測出這k條直線兩兩相交的交點,其交點是否離直線的起點或終點比較近(例如:兩兩相交的交點坐標,離直線的起點或終點坐標只差十幾個像素距離);步驟s26、兩條實邊三個頂點坐標定位;也即,綜合上述三個篩選條件,初步篩選出“l(fā)”邊直線,從篩選的“l(fā)”邊抽取其線上的點,采用最小二乘法進行直線擬合,求出直線斜率k與截距b。步驟s27、兩條虛邊定位;也即,定位dm碼虛邊坐標。步驟s28、計算dm碼虛邊symbol與module。步驟s29、根據兩實邊兩虛邊計算四個頂點。在本實施例中,步驟s3具體包括以下兩個子步驟。步驟s31、二維碼網格數據獲??;也即,計算dm碼的四個頂點坐標及l(fā)邊直線方程、步驟s29計算得到的symbol與module,獲取dm碼網格數據,其具體步驟如下所述:m1)找到“l(fā)”邊的三個頂點;m2)確定三個頂點的方位,按dm碼的“l(fā)”邊在左下方為基準進行網格數據劃分與獲??;m3)把定位到的“l(fā)”邊的頂點及其它坐標分別在其左右、上下偏移一個約數值為1.0到2.0值(算法坐標計算是浮點數,取圖像數據時會插值取整計算),進行網格數據獲取,所以本實施例,共獲取9個symbol×symbol的網格數據。值得一提的是,由于圖像的光照原因或圖像本身質量不是太理想,dm碼精定位可能存在誤差,為了使得到的網格數據能正確解碼,本發(fā)明采用了把定位到的x,y坐標分別在其左右、上下偏移1~2個像素,所以本發(fā)明共有9個symbol×symbol的網格數據陣列送入解碼模塊解碼,一旦某個陣列能解碼就輸出結果。值得一提的是,在具體實施獲取網格數據之前,獲取網格數據之前是對粗定位的圖像進行迭代法二值化的,二值化閾值的選取受圖像光照、對比度的影響,可能采用迭代法或其他閾值選取方法,二值化效果不是最佳,所以在本實施例中,把用迭代法求得的二值化閾值基礎上加與減一個數值,作為不能解碼的候選閾值。為了進一步減少光照對二值化的影響,在本實施例中,還采用了自適應二值化法二值化圖像,作為不能解碼的另一候選閾值。這種的采用迭代法、迭代法基礎上加減某一數值、自適應二值化方法共四次二值化目標圖像,能夠減少由于二值化閾值不是最優(yōu)而不能解碼的幾率,提高dm碼的識別性能。步驟s32、datamatrix二維碼解碼;也即,根據步驟s31獲得的網格數據送入dm碼解碼模塊進行解碼。在本實施例中,步驟s4是對是否成功解碼或已經切割三個以上進行判斷,是的話,就結束算法,否則轉到步驟s2中的起始子步驟s21處。在一個具體實施中,是將實現上述方法的代碼,移植到嵌入式處理器dspc66xx平臺,測試200萬像素圖像。經實驗測試,在圖像背景較復雜時,算法最長耗時約233毫秒,能夠滿足工業(yè)、民用等領域dm碼實時性識讀要求。綜上,本發(fā)明的datamatrix二維碼的識別方法,首先,通過圖像邊緣計算、二值化、池化、濾波、連通域標記與候選圖案切割等處理,完成dm碼的粗定位;接著,通過對切割的圖案進行迭代法二值化、robert算子邊緣計算、霍夫直線檢測、“l(fā)”邊直線篩選、虛邊定位以及虛邊標志與模塊計算等處理,完成dm碼的精定位;然后,通過對精定位的dm碼進行網格數據獲取與數據解碼等處理,完成dm碼的識別,圖像適應能力較強,識別率高,并且速度快。另外,借助精心設計的圖像池化、多個粗定位候選區(qū)域切割、精確定位誤差消除與基于多閾值二值網格數據的獲取,有利于改善識別率與速度性能,很好地適用于工業(yè)制造機器視覺、民用等領域應用。應當理解的是,以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制,對本領域技術人員來說,可以對上述實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改和替換,都應屬于本發(fā)明所附權利要求的保護范圍。當前第1頁12當前第1頁12