<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于NiosII的二維條碼識別系統(tǒng)設(shè)計

          基于NiosII的二維條碼識別系統(tǒng)設(shè)計

          作者: 時間:2009-07-02 來源:網(wǎng)絡(luò) 收藏

          2 核心算法
          條碼譯碼主要流程是首先對條碼進行自適應(yīng)二值化,然后對條碼進行定位、旋轉(zhuǎn)、分割。分割出單個碼字后,通過邊緣檢測,得到條碼條空序列模塊寬度后,再進行糾錯解碼。
          傳統(tǒng)算法在對條碼定位時多采用Hough變換,通過Hough變換提取條碼圖像中的直線傾角來旋轉(zhuǎn)條碼。但是Hough變換的大運算量并不適用于實時性要求高的的嵌入式設(shè)備。筆者結(jié)合PDF417條碼自身的特點,采用4點定位的方法來分割條碼,有效提高速度。核心算法流程詳細步驟如下:
          (1)條碼定位
          實際采集條碼時會出現(xiàn)各種傾斜,如圖6所示。如何定位條碼是關(guān)鍵的問題??梢岳脳l碼起始頭特有的比例來定位。按照國標(biāo)的定義,PDF417條碼的起始符黑白條空比是81111113,終止符黑白條空比是711311121。掃描圖像的每一行,分別匹配起始符和終止符的條空比??紤]到條碼采集過程中,邊緣受高斯點擴展函數(shù)的影響,只要黑白條空比例的誤差不超過三位,可近似認為符合比例。標(biāo)記所有符合起始符條空比比例條碼線段,可以得到4個控制點a、b、c、d,用同樣的方法可以尋找符合終止符條空比的條碼線段,確定點e、f、g、h。判斷a、c、e、g是否為正確控制點的標(biāo)準(zhǔn)是,平行邊長度誤差在5個像素點內(nèi),且相鄰邊角度為90°,其誤差角度為2°。


          (3)行條碼分割及行高確定
          由于PDF417條碼是層疊式條碼,在對單行條碼碼字進行識別時,必須得到條碼的行數(shù),然后分離出每一行。首先對條碼使用Sobel算子進行水平邊緣檢測,如圖7所示,然后向水平方向投影,如圖8所示。

          已知p(x)對應(yīng)投影的峰值,也就條碼的邊界,通過對投影下來的每個值求一次差分 p(x),然后逐個判斷各個差分值,如果連續(xù)兩個投影的差分值前一個是負數(shù)而后一個是0或者正數(shù),則說明此點是峰值。峰值處的坐標(biāo)即為條碼分層的地方,考慮到條碼層與層連接的地方在二值化時會出現(xiàn)噪點,則取每層條碼圖像中間的50%作為有效圖像。
          (4)碼字識別
          分割出單個碼字后,得到條空的像素個數(shù),記為{M1,M2,…,M8},因為4個條和4個空的總模塊數(shù)為17,可以根據(jù)式(1)得出條模塊數(shù)的集合{T1,T2,T3,T4)。同樣,用Ki替代式(1)中的Ti,可得到空模塊數(shù)的集合{K1,K2,K3,K4}。



          因PDF417條碼用了三個簇的數(shù)據(jù)來組成一個條碼,三個簇的數(shù)據(jù)量較大,且每個簇中的數(shù)據(jù)與條空比無一致對應(yīng)關(guān)系,所以就涉及把條空比轉(zhuǎn)換成條碼數(shù)據(jù)的問題。本算法采用的解決方案是:用哈希算法來查找:
          F=Z×1400+K2×216+T3×36+K4×6+T (2)
          式(2)中Z為空1模塊數(shù)和條2模塊數(shù)的組合,再利用F的值進行查找,實現(xiàn)數(shù)據(jù)流的譯碼。數(shù)據(jù)流譯碼不是本文重點,這里不再詳細闡述。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();