張志凌 梁瀟 楊天宇 馮稼駒 郭曉新
摘要:條形碼隨著信息技術(shù)與計算機(jī)不斷發(fā)展,已經(jīng)成為市場流通的大趨勢,只要商品進(jìn)入商場、超市、集各大賣場,均需要通過條形碼掃描來獲取商品的各種信息。條碼技術(shù)是迄今為止最經(jīng)濟(jì)實用的一種自動識別技術(shù)。由于現(xiàn)在商場的條碼識別需要將條碼放置到與激光掃描器掃描線垂直的位置才能進(jìn)行掃描,于是我們決定利用圖像處理技術(shù)將圖像中的條形碼進(jìn)行提取,實現(xiàn)對圖像中的單個及多個條形碼,以及不垂直與圖片邊框的條形碼進(jìn)行提取和掃描。文章先講述了研究背景,再闡述了設(shè)計思路和算法實現(xiàn),主要介紹了通過hough直線檢測對圖像處理后處理檢測出來直線的方法,以及將檢測到的條形碼調(diào)整為水平位置,方便下一步的掃描。
關(guān)鍵詞:hough直線檢測;圖像識別;圖像處理
中圖分類號:TP393 ? ? ?文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)14-0140-03
1研究步驟
1.1研究的樣區(qū)和數(shù)據(jù)
研究樣區(qū)選用網(wǎng)上可搜索到的所有條形碼,二條形碼識別的數(shù)據(jù)主要選取商場貨品的條形碼數(shù)據(jù)庫。
1.2研究背景
條形碼隨著信息技術(shù)和計算機(jī)的不斷發(fā)展,已經(jīng)成為市場流通的大趨勢,只要商品進(jìn)入商場、超市,均需要通過條形碼掃描來獲取商品的各種信息。條碼技術(shù)是迄今為止最經(jīng)濟(jì)實用的一種自動識別技術(shù)。條碼的功能強(qiáng)大,擁有各種優(yōu)點。但在日常生活中,條碼的掃描有各種弊端。在超市利用激光掃描器進(jìn)行掃描的時候,需要將條形碼放置在與掃描器垂直的地方,并且條碼如果有一定程度的被遮擋可能會導(dǎo)致掃描的失敗。今天我們所討論的就是通過基于計算機(jī)語言的算法對圖像進(jìn)行處理,使得軟件譯碼具有更大的靈活性和較低的成本,這種條形碼的定位識別技術(shù)可以便于條形碼產(chǎn)品的信息管理以及匹配,有非常長遠(yuǎn)的發(fā)展前景。
于是,如何對帶有條形碼的圖像進(jìn)行處理并選取條形碼,將條形碼從圖像中選取出來成為今天所討論的問題。
1.3設(shè)計思路
傳統(tǒng)利用掃描器對產(chǎn)品條形碼的掃描需要人工將條形碼擺到正確位置,且掃描的效率相對比較低,所以本實驗主要對帶有條形碼的圖像進(jìn)行處理,將圖像中單個或者多個不與掃描直線垂直的條形碼選取出來,將這些條形碼進(jìn)行變換,使變換后的條形碼可以被掃描識別。
整體思路如圖1所示:
向量表的左邊為向量結(jié)構(gòu)體的數(shù)組,數(shù)組用來存放水平、垂直向量。數(shù)組右邊用鏈表來存放不與該向量垂直的直線。用該數(shù)據(jù)結(jié)構(gòu)首先可以動態(tài)增加直線的數(shù)量;其次由于在圖片中,條形碼的水平投影可能會出現(xiàn)梯形的形狀,所以將直線劃分為:和水平向量不垂直的直線;和水平向量垂直的直線;最后因為水平方向的條形碼和垂直方向條形碼的最小矩形選定不一樣,所以最后選取了該數(shù)據(jù)結(jié)構(gòu)作為存儲掃描圖像直線的存儲結(jié)構(gòu)。
2 算法實現(xiàn)
2.1圖像的初步處理
在復(fù)雜的圖像中,我們?nèi)搜劭梢匝杆倥袛鄺l形碼位置的很大原因在于條形碼顏色分布具有特殊性,它始終是黑白條的形狀出現(xiàn)在圖像中,所以我們可以利用這個特性初步的對圖像進(jìn)行處理。
根據(jù)參考文獻(xiàn)[1]可以知道利用條形碼的顏色信息對圖像進(jìn)行二值化,在RGB顏色空間中,條形碼顏色一般滿足:
2.2 ?Canny邊緣檢測的參數(shù)選取
通過顏色的初步篩選過后,Canny邊緣檢測的工作相對簡單一點。但Canny邊緣檢測作為圖像對圖像處理結(jié)果的好壞直接決定了后續(xù)hough直線檢測的檢測結(jié)果,所以Canny邊緣檢測的參數(shù)設(shè)定及其重要。圖4為利用條形碼顏色特性處理過Canny邊緣檢測后的圖像。
2.3 hough直線檢測
參考文獻(xiàn)[3]和文獻(xiàn)[4]利用Hough變換法提取直線是一種變換域提取直線的方法,它把直線上點的坐標(biāo)變換到過點的直線的系數(shù)域,巧妙地利用了共線和直線相交的關(guān)系,使直線提取的問題轉(zhuǎn)化為計數(shù)問題。利用這個重要性質(zhì)可以檢測共點直線。
Hough直線檢測的結(jié)果直接決定了圖像能否定位到條形碼以及是否定位到正確的條形碼位置。參考文獻(xiàn)[5],圖像中因為條形碼的形狀特性,所以每條直線之間的距離可能會很近,為了可以將這些直線分開,避免累加的錯誤,所以在參數(shù)上面theta參數(shù)極角設(shè)置為0.1,可以將很近的直線分開,并顯示出來。圖5為圖像hough直線檢測的結(jié)果圖。
分析兩個圖像,可以發(fā)現(xiàn)通過條形碼顏色特性進(jìn)行初步處理的圖像基本確定了條形碼的所在位置;而利用Atsu算法處理的圖像進(jìn)行hough直線檢測后出現(xiàn)較多的冗余直線,并且存在條形碼的邊界部分不能被檢測到。
經(jīng)過hough直線檢測的對比,可以確定利用條形碼顏色特性進(jìn)行初步處理圖像可以獲得較好的結(jié)果。
2.4 直線處理
經(jīng)過hough直線檢測過后基本可以確定圖像中條形碼的位置,但由于圖像中可能出現(xiàn)多種條形碼,所以就需要對hough直線檢測到的直線進(jìn)行分類,同時刪除掉冗余的直線。
如果該直線屬于條形碼中的某一條直線,那么在這條直線的附近一定存在多條和它不垂直的直線,根據(jù)這個特性,那么就可以進(jìn)一步的篩選直線,同時將直線進(jìn)行分類。在圖像中有可能出現(xiàn)條形碼的投影為梯形的情況,所以在直線分類中就不能單一的依靠直線斜率進(jìn)行分類,經(jīng)過對比決定用直線的位置來決定直線是否屬于同一個條形碼,但這個算法不能將位置較近并且方向一致的條形碼分開。
2.4.1向量表的創(chuàng)建
創(chuàng)建本文前面介紹的向量表,將直線分為與垂直向量不垂直的直線和與垂直向量垂直的直線兩類,將所有的直線添加完畢后在鏈表的最后加入兩個空直線,方便后續(xù)向量表直線的遍歷。向量表的數(shù)組結(jié)構(gòu)體
structVectorHough
{ int x;
int y;
};
x,y為向量的方向;
StructSavelines
{
VectorHough veline;
int lineNum;
int windowcount;
Houghlines * next;
};
Veline為向量方向,lineNum為該向量方向的直線數(shù)量,windowcount為窗口數(shù);
structHoughlines
{
Point start;
Point end;
VectorHough vecline;
int sign;
int windowcount;
Houghlines * next;
};
Start,end分別為直線的起始點和終止點,vecline為直線的向量,sign為信號位,表示該條直線是否被處理,windowcount為直線所屬的窗口。
通過計算兩兩直線間的距離,并將符合算法的直線加入向量表中,完成初步的直線處理。
2.5 定位最小矩形框
經(jīng)過之前的直線處理,通過距離將直線分為不同的窗口,接下來便是通過這些直線確定不同條形碼所在的最小矩形框。
因為向量表分為垂直向量和水平向量,所以在框選最小矩形的時候考慮的參數(shù)也不相同。
檢索水平向量的時候,直線的向量方向均是由y軸坐標(biāo)較小的一點指向y軸坐標(biāo)較大的點,所以在定位最小矩形的時候主要選取x值最小起始點和x值最大的末位點作為矩形對角線。如圖6所示:
線段AD表示x值最小起始點的直線,BC表示x值最大的末位點的直線,AC則為矩形的對角線。
由于可以AD直線的向量,所以通過勾股定理就可以計算得到AD的長度,進(jìn)而因為AE為水平向量,所以可以通過A計算得到D點的坐標(biāo),同理得到B點坐標(biāo),進(jìn)而確定了最小的矩形框。
在選取垂直條形碼的計算方法同水平條碼一致,只不過將矩形對角線的確立由x值大小變換為y值的大小,同理可以確定垂直條形碼的最小矩形框。如圖7所示:
通過前面對直線的處理,由于圖像像素原因hough直線檢測的時候有時會出現(xiàn)條形碼邊緣直線沒有被檢測出,所以導(dǎo)致最后的最小矩形可能不能完全包括完整的條形碼。
2.6旋轉(zhuǎn)變換
通過選取最小矩形框以后,便是將檢測到的條形碼擺正。將選取過后的四邊形框進(jìn)行變換,將其變?yōu)榫匦吻以摼匦蔚拈L與掃描器的掃描線平行。
如圖6,已知了AB的斜率,所以將上述圖形變換的矩陣為:
其中θ為直線AB與水平向量的夾角,通過向量角度公式可以計算得到Cosθ。
2.7對條碼識別
圖像求閾值,加速算法處理,并合理使用模糊化的效果,形態(tài)學(xué)去除黑洞,閉運算[6],膨脹腐蝕,斷開二維碼連接[7],查找輪廓,計算輪廓最大面積,擬合輪廓矩形,得到最終結(jié)果;
接下來條形碼識別,可以使用zbar識別庫。
3 總結(jié)
通過hough直線檢測可以在一定程度上對圖像中單條或者多條條形碼進(jìn)行位置的初步確定。
參考文獻(xiàn):
[1] 張瑾. 基于圖像處理的一維條形碼識別技術(shù)研究[J].中國石油大學(xué)(華東),2014:52-55.
[2] 李牧,閆繼紅,李戈,等.自適應(yīng)Canny算子邊緣檢測技術(shù)[J].哈爾濱工程大學(xué)學(xué)報,2007,28(9):1003-1007.
[3] OTSU N.A threshold selection method from gray-levelhistograms[J].IEEE Trans on Systems,Man,and Cyber-netics, ?1979,9(1):62-66.
[4] 徐欣風(fēng),董貴華,姚志軍.仿真模板的 Hough 變換直線檢測[J].儀器儀表學(xué)報,2004,25( 4) : 13-15.
[5] 徐超.基于改進(jìn)隨機(jī)Hough變換的直線檢測算法[J].江南大學(xué)機(jī)械工程學(xué)院江蘇省食品先進(jìn)制造裝備技術(shù)重點實驗室,2018:6-7
[6] 陳瑞琳.一種去除黑洞影響的豬耳標(biāo)碼圖形的二值化方法[P].發(fā)明專利,2013.09.04
[7] 王宇青.灰度膨脹(腐蝕)方程求解及相關(guān)問題[D].蘇州科技學(xué)院,2015.
【通聯(lián)編輯:光文玲】