新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > 基于NiosII的二維條碼識別系統設計

        基于NiosII的二維條碼識別系統設計

        作者: 時間:2009-07-02 來源:網絡 收藏

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


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

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



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



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 芷江| 玉屏| 兴隆县| 嘉峪关市| 探索| 高唐县| 江源县| 蕲春县| 云霄县| 马边| 新营市| 福州市| 炎陵县| 英德市| 珠海市| 灵川县| 长乐市| 阜城县| 怀安县| 康马县| 德化县| 大安市| 定结县| 渑池县| 海城市| 嘉义县| 项城市| 泽库县| 湖州市| 屏山县| 潢川县| 曲松县| 漯河市| 泽库县| 闵行区| 岑溪市| 冕宁县| 巴青县| 西昌市| 尖扎县| 商南县|