康三順
(北京大學 北京市 100090)
共享單車、無人超市、智慧醫(yī)療等各式各樣的科技產品應用出現(xiàn)在了人們的視野中,現(xiàn)代社會的各個方面已經被物聯(lián)網所覆蓋,典型的應用包括智能家居、智能安防監(jiān)控、智能樓宇、智能變電站、智能冷鏈物流、智慧旅游等,物聯(lián)網的各個應用中,經常少不了條碼技術的應用,條碼技術包括一維條形碼技術和二維條形碼技術,二維碼克服了一維碼表示數據少的缺點,近些年,二維碼技術的發(fā)展非常迅速,目前為止,世界上已經有數十種以上的種類,針對各個種類的二維碼,各個類似又相異的技術不斷向前發(fā)展著。
不同于其他可免費使用用的二維碼,美國Veritec公司擁有該碼的專利,因此要使用該碼的話需要向該公司購買授權。其在使用成本上的因素成為了其成為小眾二維碼的部分原因,即使如此,Vericode卻還是常見于LCD行業(yè)。
目前針對Vericode碼的研究資料還比較少,不過由于二維碼之間或多或少的共通性,用于其他碼的研究也可以借鑒來用于Vericode的研究,雖然這些方法也可用于Vericode的定位分割等方面,不過Vericode比較規(guī)則的正方形邊界對于其分割定位的成功是其相對于其他二維碼來說最大的優(yōu)勢,所以本文提出了一套特有的適用于Vericode的分割方法。整體流程分為:
(1)灰度化;
(2)圖像去噪;
(3)形態(tài)學處理;
(4)輪廓檢測;
(5)非碼區(qū)輪廓刪除;
(6)Vericode碼候選區(qū)確認。
現(xiàn)實環(huán)境中我們經常獲取到的圖像都是彩色圖,先將彩色圖灰度化。在灰度圖中,RGB三通道是相等的,這個統(tǒng)一值即為灰度值,
圖像質量較好的情況下可以省略這一步,圖像去噪的主要方式是圖像的平滑,平滑方式常見以下方式:
2.2.1 高斯濾波
高斯濾波用來消除高斯噪聲。
一維零均值高斯函數用公式表示為:
二維零均值高斯函數用公式表示為:
二維高斯分布用矩陣表示為(以3*3的掩膜為例):
1/16 2/16 1/16 2/16 4/16 2/16 1/16 2/16 1/16
2.2.2 均值濾波
均值濾波是一種典型的線性濾波算法,是一種低通濾波器,高頻信號會被濾除掉,這樣子均值濾波就可消除圖像中的尖銳噪聲。用公式表示為:
其中,f(i,j)表示計算得到的均值;g(i,j)表示矩陣中的原像素值;i表示行;j表示列;k表示矩陣中的數值;n表示像素點的總共個數。
均值濾波的3*3卷積算子一般為:
1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9
2.2.3 中值濾波
中值濾波是以領域內像素點的中間值代替原來的像素值。中值濾波使用矩陣里的數據進行大小排序,然后取中間值,公式如下:
其中,xi表示矩陣里面的數值;Med表示取數據的中值。
2.2.4 多圖像均值
多圖像均值是通過在相同條件下采集同一目標的多張圖像,然后對多張圖像的對應點像素求平均值,來確定圖像在該點的灰度值,公式表示為:
其中,n表示總共采集的圖像數目;k表示其中一個圖像;x表示行坐標;y表示列坐標;g(x,y)表示進行多張圖像平均之后的圖像。
當二維碼是dark_on_light時,用開運算,當二維碼是light_on_dark時,用閉運算。
開運算與閉運算依據腐蝕和膨脹演變而來。
圖像膨脹會擴大一幅圖像的組成部分,而圖像腐蝕會縮小一幅圖像的組成部分。
開運算:先腐蝕后膨脹,能夠消除圖像區(qū)域外的小白點(噪聲)。閉運算:先膨脹后腐蝕,能夠消除圖像區(qū)域內的小黑點(噪聲)。
開閉運算可以在保持物體原有大小基本不變的情況下達到算法運算目的,開閉運算的主要目的是:
(1)斷開不必要的連接;
(2)連接希望連接的地方;
(3)去除干擾點。
用合適的二值化方法處理后再進行輪廓查找。
圖像二值化( Image Binarization)就是將圖像上每個點的像素值最終用兩個極值(0和255)表示,也就是圖像中的每個點是非黑即白的。在數字圖像處理中,二值圖像占有非常重要的地位,圖像的二值化不光使圖像中數據量大為減少,而且從視覺效果及運算上突出了目標輪廓信息。
圖像的二值化處理就是按照一定的運算遵從一定的規(guī)則將符合一定條件的像素點設置為0(或255)并將其余的點設置為255(或0)的過程,也就是將整個圖像呈現(xiàn)出明顯的黑白效果。最簡單也最直觀的二值化方法是通過某個灰度值做為閾值,將圖像中所有大于該閾值的像素值全更新為0(或255),將其余像素值更新為255(或0),按照這種方法實現(xiàn)的二值化可稱為固定閾值二值化。這種二值化方法在實際應用中會面臨很多問題,有著更多更好的方法做為替代,比如雙峰法、P參數法、迭代法和OTSU法等。根據Vericode的圖像特性及分割流程,選取ostu做為二值化的方法,Ostu是通過統(tǒng)計圖像的直方圖來計算閾值的,Vericode本身是由黑白模塊組成,用最大類間差的方式得到的閾值更好適合其設計特性。
(1)判斷所得到的區(qū)域邊界的極性是否和Vericode碼的一致,如果不一致,刪除該區(qū)域。
(2)對剩下的區(qū)域進行角點檢測,如果該區(qū)域內沒有檢測到角點,則知該區(qū)域不是Vericode區(qū)域。
角點檢測(Corner Detection)是圖像處理中對特征點進行檢測方法。角點就是不同方向的線的拐點,在角點的實際檢測之中,出于性能和效果的綜合考慮,往往檢測的并不只是嚴格意義上的“角點”,而是具有局部最大最小灰度值或者梯度特征等的點。從Vericode碼區(qū)結構和性能考慮,選擇FAST角點檢測算法作為角點檢測算法,其他的常用角點檢測方法還有Moravec、Harris、shi_tomas。
將經過輪廓區(qū)域刪除后剩余的輪廓區(qū)域按坐標在原灰度圖上進行輪廓截取,并在灰度輪廓圖上進行以下操作:
2.6.1 對待處理輪廓區(qū)域進行邊緣梯度幅值及梯度方向計算
梯度幅值和梯度方向的計算采用Scharr算子進行,Scharr算子是獲取圖像一階梯度的常見方法,其對像素的四領域灰度值進行加權計算,在邊緣極值處得到檢測邊緣。
Scharr的內核大小為3,其內核為:
梯度計算:(在兩個方向求導,假設被作用圖像為I)
水平變化:水平方向上進行卷積運算得到結果為:
垂直變化:垂直方向上進行卷積運算得到結果為:
在圖像的每一像素上,結合以上兩個結果求出近似梯度:
2.6.2 角度直方圖峰值計算
為了消除噪音,只對梯度幅值強度較大的邊緣點進行角度直方圖統(tǒng)計,對梯度幅值太小的點不做處理。
直方圖(Histogram)是一種統(tǒng)計報告圖,由一系列高度不等的縱向條紋表示數據分布的情況。用橫軸表示數據類型,縱軸表示角度分布情況。
2.6.3 Vericode候選碼區(qū)確認
對所有滿足峰值閾值的角度按峰值遞減排序,峰值最大的角度為該分塊主方向的可能性大,判斷所有峰值主角度是否滿足垂直性,如果滿足,則認為該分塊為Vericode候選碼區(qū)域。
得到候選碼之后,就可以進入之后的解碼等過程,完成Vericode碼的讀取。
用包含Vericode的圖像做為測試圖像,對本文所實現(xiàn)的分割定位方法進行實驗測試,可知本文所提到的Vericode圖像定位技術能比較好地定位到Vericode碼區(qū)域。
本文通過對包含有Vericode碼的圖像進行深入研究,結合Vericode的碼區(qū)特征和一些圖像處理技術,提出了一套完整的基于圖像灰度化、二值化、形態(tài)學、區(qū)域提取、邊緣檢測、直方圖統(tǒng)計、角點檢測的用于定位圖像中Vericode碼的方法,經過實驗驗證,本文所提方法能較好地用于Vericode的定位。圖像處理、自動識別等技術都在日新月異飛速發(fā)展之中,必然會帶來相關應用技術的進化。本文是基于規(guī)則的方式對Vericode進行定位,隨著深度學習等技術的發(fā)展,如果在收集數據量比較充足的情況下深度學習用于Vericode的定位也會有不俗的表現(xiàn)。