一種基于自適應邊緣檢測和映射模型的一維碼識別算法
【專利摘要】本發明公開了一種基于自適應邊緣檢測和映射模型的一維碼識別算法。該算法利用一維碼四個角點對一維碼圖片進行投影變換,校正一維碼圖像中可能存在的投影或者仿射變形,然后利用校正后的圖像生成兩種掃描線,一種是基于圖像分塊的,一種是基于梯度變化的,對于獲得的掃描線采用一種自適應邊緣檢測算法來找到一維碼條和空的邊緣位置,接著采用一種邊緣映射模型將獲得的邊緣位置映射到正確的編碼位置,根據編碼位置來獲得條和空的寬度,從而依據條空的寬度比和編碼規則求解一維碼信息。按照本發明實現的一維碼識別算法,能實現對變形,光照不均,噪聲,模糊,以及變形加模糊的一維碼都有較好的魯棒性。
【專利說明】
一種基于自適應邊緣檢測和映射模型的一維碼識別算法
技術領域
[0001] 本發明屬于圖像處理技術領域,涉及一種基于自適應邊緣檢測和映射模型的一維 碼識別算法。
【背景技術】
[0002] -維碼在生活和工業領域中都被廣泛應用,目前生活中的一維碼識別裝置主要還 是激光掃描器,需要人為手持來實現識別,由于在日常生活中對于時間的要求不是很苛刻, 手持激光掃描器可以滿足需求。然而在工業應用中,隨著工業自動化的要求不斷提高,希望 能夠實現工業條碼的自動識別,這是手持激光器沒法滿足的,因此基于圖像的識別技術被 米用。
[0003] 圖像識別技術只需通過CCD相機采集到一維碼圖像,然后利用圖像處理算法來定 位到一維碼的位置,以及進行正確解碼。因此基于圖像技術的一維碼識別方法可以達到工 業自動化的要求。
[0004]目前在工業應用中,CCD相機采集到的一維碼圖像可能會出現旋轉、變形、離焦模 糊、光照不均,甚至變形加模糊的情況,這些情況都會使得一維碼條和空的寬度比發生變 化,給正確解碼造成嚴重的干擾,使得一維碼即使被定位到也不能獲得正確的解碼結果。
[0005] 目前的一些研究成果只能適應于上述影響中個別情況,但是難以解決所有情況。 因此,需要提出一種基于圖像的一維碼識別算法,對于旋轉、變形、離焦模糊、光照不均,甚 至變形加模糊的情況都有較好的魯棒性,在這些情況下都能夠正確識別一維碼。
【發明內容】
[0006] 針對現有技術的以上缺陷或改進需求,本發明提供了一種基于自適應邊緣檢測和 映射模型的一維碼識別算法,由此解決了一維碼識別算法中的變形和光線等原因引起的識 別精度不高的問題。
[0007] 為實現上述目的,按照本發明的一個方面,提供了一種基于自適應邊緣檢測和映 射模型的一維碼識別算法,其特征在于,該算法包括如下步驟:
[0008] (1)投影校正
[0009] 依據所采集的所述一維碼圖像的四個角點,將所述四個角點所確定的矩形區域里 的像素進行投影變換,得到校正后的圖像1C;
[0010] (2)自適應邊緣檢測,其中該步驟包括如下子步驟:
[0011] (2-1)創建兩類掃描線:
[0012] 首先獲得Μ條基于梯度的掃描線:
[0013] 第m條線的起始點hj/OhmAhmelUM]
,其中fr〇und是四舍五 入取整操作,則第m條基于梯度的掃描線計算如下:
[0014]
[0015] 獲得Μ條掃描線中的每條掃描線的起始點:
[0016] hm(x+l)=hm(x)+fround(kA χ)
[0017] 獲得Μ條梯度掃描線的集合:
[0018]
[0019]其次獲得基于圖像分塊的掃描線:
[0020] 從校正后圖像Ic中截取Ν塊,第η個圖像塊的縱坐標起始點為hn = nA 2,終止點為hn + Ah,基于第η個圖像塊獲得的第η條掃描線的計算如下,把圖像分塊中的像素點函數進行 求和:
[0021] 7~η?
[0022]共獲得Μ+Ν條掃描線集合
[0023] (2-2)自適應邊界檢測
[0024]對通過所述步驟(2-1)中獲得的掃描線集合Sdx)逐條進行處理,主要分為如下步 驟:
[0025] (2-2-1)對每條所述掃描線求取均值
其中盡7與掃描線Si(x)會形 成一系列的交點Ρ^( j),Ρ^( j)是第j個交點的坐標,j是在1和J之間,J表示總的交點數目, 對?^。)進行圓整,將其變為整數值;
[0026] (2-2-2)依據所獲得的交點P^U),計算每兩個交點間的掃描線的間隔均值
形成方波曲_
,其中t為交點的序號編號,t 在1與T之間,其中j是否是在1與T之間;
[0027] (2-2-3)由所述方波曲線0 (X)及參考線及;(X)按如下過程迭代來獲得新的參 考線:
[0028]
[0029] 其中,y = 0.6,G(x)是一維高斯函數
當t = l時, < 所述迭代步驟中形成的參考線與掃描線會形成新的交點,如果t<T返回到第 二步形成新的方波曲線,同時t = t+l,否則進入步驟(2-2-4);
[0030] (2-2-4)完成T次迭代后,參考線<(λ·)與掃描線Si(x)的交點就是一維碼條和空的 邊緣位置;
[0031] (3)邊緣映射
[0032] 所述校正后的一維碼圖像中的邊緣位置和編碼位置之間的關系為:
[0033] fb(fp(PT(j)))= yU(j)+b
[0034] 其中
[0035] ρο是一維碼第一個邊緣位置的坐標,c = sin9/(p〇cos9),θ是一維碼平面與相機采 圖平面的夾角,Ρ0是相機的焦距,Ρ是一維碼到相機的距離
;目當于縮放項,其不影 響像素寬度的比值,所以可以簡化為1,所以
[0036] fb為依據確定的模糊影響下的校正公式,輕微的模糊
對邊緣位置的影響可以看做 是邊緣位置的移動,觀察發現條變寬、空變窄了,寬度變化相同,這里定義寬度變化為mur, 所以模糊的邊緣位置校正公式為:
[0037] fb(PT( j)) = PT( j )+mur(_l)j,帶入獲得最終的校正模型為:
[0038] (4)對于變形的一維碼,可以通過分塊,將邊緣位置分成K塊,每一小塊的變形可以 簡化為投影變形;初始化參數是在1和J之間,J表示總的交點數目,叾是用于編 碼的條和空的平均寬度,y =2,其余參數b,c,p〇和rbiur初始化為0,采用Levenberg-Marquardt算法迭代求取所有參數的最優解;將每組優化得到的編碼位置U(T),其中,τ是每 組的位置索引,組合起來得到的U(j)值就是優化后的編碼位置,利用U(j)進行解碼,如果失 敗,重新將U( j)分成K組,用LM算法對每組進行優化求解,組合得到新的U( j),在進行解碼, 直至解碼成功或者迭代次數達到設定閾值獲得最終U(j);
[0039] (5)從所述步驟(4)獲得一維碼編碼位置U(j)后,依據編碼規則實現解碼。
[0040] 按照本該發明實現的一維碼識別算法,能夠高效精確的實現一維碼的識別,減小 因變形或者模糊引起的編碼失誤。
【附圖說明】
[0041] 圖1是按照本發明實現的一維碼識別算法中的一維碼圖像示意圖;
[0042] 圖2是按照本發明實現的按照采集后的一維碼投影校正示意圖;
[0043] 圖3是按照本發明實現的算法中的基于梯度的掃描線的示意圖;
[0044] 圖4是按照本發明實現的算法中的基于圖像分塊的掃描線的示意圖;
[0045] 圖5是按照本發明實現的自適應邊界檢測中的對掃描線求取均值的示意圖;
[0046] 圖6是按照本發明實現的自適應邊界檢測中的對掃描線求取方波曲線的示意圖;
[0047] 圖7是按照本發明實現的自適應邊界檢測中的對掃描線求取參考線的示意圖;
[0048] 圖8是按照本發明實現的自適應邊界檢測中的完成迭代之后所形成的最終結果;
[0049] 圖9是本發明的正常一維碼圖像中邊緣位置和編碼位置的關系示意圖;
[0050] 圖10是按照本發明實現的邊緣映射模型中的投影變形模型的示意圖;
[0051] 圖11是按照本發明實現的邊緣映射模型中的模糊模型的示意圖;
[0052]圖12是按照本發明實現的邊緣映射和解碼流程示意圖;
[0053]圖13按照本發明實現的對EAN-13碼條和空的邊緣位置與編碼位置獲取的示意圖。
【具體實施方式】
[0054]為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖及實施例,對 本發明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并 不用于限定本發明。此外,下面所描述的本發明各個實施方式中所涉及到的技術特征只要 彼此之間未構成沖突就可以相互組合。
[0055] 本發明提供了一種基于自適應邊緣提取方法和映射模型的一維碼識別算法,用于 提高在不同影響情況下的一維碼的識別率。
[0056] 基于圖像的一維碼識別是指,計算出圖像中一維碼條和空的準確寬度,依據條和 空的寬度比,按照編碼規則,得到對應的編碼字符,從而獲得一維碼信息。
[0057]本發明的一維碼識別方法分為投影校正,自適應邊緣檢測和邊緣映射三個階段。 以下對本發明提出的識別方法作如下詳細說明,整個一維碼識別方法具體包括步驟如下: [0058] (1)投影校正階段
[0059] 依據一維碼四個角點,如圖1所示,"^",…^^為一維碼的四個角點"等四個角 點所確定的矩形區域里(如圖1虛線框內的區域)的像素進行投影變換,得到校正后的圖像 I。,如圖2所示,其中校正后的圖像中條碼的寬度為W,條碼的高度為H。
[0060] (2)自適應邊緣檢測階段
[0061 ]分成兩步進行:一、創建掃描線;二、邊緣位置檢測。
[0062] (2.1)創建掃描線
[0063] 在本例實施中,主要創建兩類掃描線,一種是基于梯度的掃描線,另一種是基于圖 像分塊的掃描線。在本發明中,采用上述兩類的掃描線,能夠顯著地解決條碼變形的問題, 而另外一類基于圖像分塊的掃描線,能夠解決一維碼圖像采集中因為光照等因素引起的圖 像噪聲等問題。
[0064] 基于梯度的掃描線如圖3所示,獲得Μ條基于梯度的掃描線,第m條線的起始點hm (0) =mΔ 1,me [ 1,Μ],Δ,
其中fr〇und是四舍五入取整操作,則第m條基于梯度 的掃描線計算如下:
[0065] 獲得每條掃描線的梯度系數:
[0066]
[0067] 獲得Μ條掃描線中的每條掃描線的起始點:
[0068] hm(x+l)=hm(x)+fround(kA χ)
[0069] 獲得梯度掃描線的集合:
[0070]
[0071] 其中x,y分別是一維碼校正圖像中像素點坐標,其中基于圖像分塊的掃描線。
[0072]如圖4所示,獲得N條基于圖像分塊的掃描線,從校正后圖像I。中截取N塊,第η個圖 像塊的縱坐標起始點為hn = η Δ 2,終止點為hn+ Δ h,基于第η個圖像塊獲得的第η條掃描線的 計算如下,該計算方法主要是把圖像分塊中的像素點函數進行求和獲得:
[0073]
[0074] 通過上述兩種方法,共獲得Μ+Ν條掃描線:ie[l,M+ N]〇
[0075] (2.2)自適應邊界檢測
[0076]對獲得的掃描線逐條進行處理,自適應邊界檢測主要分為四步:
[0077] 第一步,對掃描線求取均
,如圖5中直線所示的其中一條求取均 值后的結果,其中盡與掃描線Sdx)會形成一系列的交點PAjhPAj)是第j個交點的坐 標,j是在1和J之間,J表示總的交點數目,對進行圓整,將其變為整數值。
[0078] 第二步,依據所獲得的交點,計算每兩個交點間的掃描線的均值
形成類似于方波的曲線
其中t為交點的序號編號,t在1與Τ之間,其中j是否是在1 與J之間,其中方波曲線如圖6所示。
[0079] 第三步,由獲得的方波曲線和參考線<來獲得新的參考線,如圖7所示,
其中,y = 〇.6,G(x)是一維高斯函數,
.。新的參考線與掃描線會形成新的交點,如 果t<T返回到第二步形成新的方波曲線,同時t = t+l,否則進行第四步。
[0080] 第四步,完成T次迭代后,參考線與掃描線31(1)的交點就是一維碼條和空的 邊緣位置,如圖8所示的位置。
[0081 ] (3)邊緣映射模型
[0082] 對于正常的一維碼圖像,邊緣位置和編碼位置之間的關系(以EAN-13碼為例)如圖 9所示和圖13所示,為線形關系P T(j)=yU(j)+b,其中γ和b為常數,PT(j)是圖片中一維碼 的邊緣位置,U(j)為模型映射后得到的編碼位置,D(j)是取整后的編碼寬度,γ是圖片中條 和空的最小寬度。
[0083] 由于變形或者模糊的影響,對于通過兩相鄰的邊緣位置求差得到的條或空的寬度 除以最小的條或空的寬度得到的編碼寬度并不一定準確,因此需要建立不精準的邊緣位置 和準確的編碼位置之間的關系模型。其中本發明涉及的一維碼識別算法中的投影變形的模 型如圖10所示,模糊模型如圖11所示。
[0084] 校正后的一維碼圖像中的邊緣位置和編碼位置之間的關系為:
[0085] fb(fp(PT(j)))= yU(j)+b
[0086] 其中fp為依據圖10確定的投影變形關系推導得到的校正公式為:
[0087]
[0088] ρο是一維碼第一個邊緣位置的坐標,c = sin9/(p〇cos9),θ是一維碼平面與相機采 圖平面的夾角,Ρ0是相機的焦距,Ρ是一維碼到相機的距離相當于縮放項,其不影 ? <J
響像素寬度的比值,所以可以簡化為1,所b
f b為依據圖11確 定的模糊影響下的校正公式,輕微的模糊對邊緣位置的影響可以看做是邊緣位置的移動, 觀察發現條變寬空變窄了,寬度變化相同,這里定義寬度變化為mur,所以模糊的邊緣位置 校正公式為fb(P T( j)) =PT( j )+mur(-l)j,帶入獲得最終的校正模型為:
[0089] 對于變形的一維碼,可以通過分塊,將邊緣位置分成K塊,每一小塊的變形可以簡 化為投影變形。初始化參數(7(/:) = 5/, j是在1和J之間,J表示總的交點數目,3是用于編碼 的條和空的平均寬度(以EAN-13條碼為例,用來編碼的一個字符需要兩個條和兩個空,總寬 度為7,m = 7/.4 = 1.75 ),y = 2,其余參數b,c,p〇和rbiur初始化為0。用Levenberg-Marquardt (LM)算法迭代求取所有參數的最優解。將每組優化得到的編碼位置υ(τ)(τ是每組的位置索 弓丨)組合起來得到的U(j)值就是優化后的編碼位置,其數值為亞像素精度。利用U(j)進行解 碼,如果失敗,重新將U( j)分成K組,用LM算法對每組進行優化求解,組合得到新的U( j),在 進行解碼,直至解碼成功或者迭代次數達到設定閾值。具體的流程如圖12所示。
[0090] (4) 一維碼解碼
[0091] 獲得一維碼編碼位置U(j)后,條和空的編碼寬度為D(j) = fr_d(Uj+1-Uj),圓整誤 差為E( j) = (Uj+1-Uj)-D( j),依據編碼規則,用來編碼一個字符的條和空的寬度總和是確定 的值,每個條和空的最大寬度和最小寬度是確定的(比如EAN-13條碼,最小寬度為1,最大寬 度為4)。
[0092] 首先檢測每個條和空的寬度,如果D(j)大于最大寬度,則將D(j)值修改為最大寬 度值,若D( j)小于最小寬度,則將D( j)值改為最小寬度值。然后檢測用來編碼每個字符的條 和空的總寬度(以EAN-13條碼為例,用于編碼的條和空的總寬度等于7),如果總寬度大于規 則確定的值,按照這些條和空的誤差值由小到大依次對該誤差所對應的條或空的寬度減去 1,直到寬度總和等于規定值為止;如果總寬度小于規則確定的值,按照這些條和空的誤差 值由大到小依次對該誤差所對應的條或空的寬度加上1,直到寬度總和等于規定值為止。最 后根據這些校正后的條碼寬度對照編碼規則進行解碼,從而獲得條碼信息。
[0093] 本發明所提出的方法,利用建立多條不同的掃描線,應對變形和光照不均對于一 維碼邊緣位置提取的影響,提出自適應邊緣提取算法,使得邊緣位置提取能夠避免噪聲,光 照的引入偽邊緣的情況。依據獲得的邊緣,通過建立邊緣映射模型,來消除模糊和變形對條 碼條和空的位置以及基準寬度影響,從而獲得較為精確的條和空的編碼位置。最后依據編 碼規則對求得的條和空的寬度進行校正,進一步獲得更為精確的編碼寬度,從而準確地獲 得一維碼信息。圖13按照本發明實現的對EAN-13碼條和空的邊緣位置與編碼位置獲取的示 意圖。
[0094]本領域的技術人員容易理解,以上所述僅為本發明的較佳實施例而已,并不用以 限制本發明,凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含 在本發明的保護范圍之內。
【主權項】
1. 一種基于自適應邊緣檢測和映射模型的一維碼識別算法,其特征在于,該算法包括 如下步驟: (1) 投影校正 依據所采集的所述一維碼圖像的四個角點,將所述四個角點所確定的矩形區域里的像 素進行投影變換,得到校正后的圖像IC; (2) 自適應邊緣檢測,其中該步驟包括如下子步驟: (2-1)創建兩類掃描線: 首先獲得Μ條基于梯度的掃描線: 第m條線的起始點hm(〇)=mAi,me[l,M]其中frcmnd是四舍五入取 整操作,則第m條基于梯度的掃描線計算如下:獲得Μ條掃描線中的每條掃描線的起始點: hm(X+l)二hm(X)+f roui id(kA χ) 獲得Μ條梯度掃描線的集合: 巧(.、·+〇 = /(-v+i,/?",(.v+i)) 其次獲得基于圖像分塊的掃描線: 從校正后圖像Ic中截取N塊,第η個圖像塊的縱坐標起始點為hn = nA2,終止點為hn+Δ h,基于第η個圖像塊獲得的第η條掃描線的計算如下,把圖像分塊中的像素點函數進行求 和:共獲得Μ+Ν條掃描線集合,ie[l,M+N]; (2-2)自適應邊界檢測 對通過所述步驟(2-1)中獲得的掃描線集合Si(x)逐條進行處理,主要分為如下步驟: (2-2-1)對每條所述掃描線求取均值,其中玲與掃描線Si(x)會形成一 系列的交點CX/'),片(./)是第j個交點的坐標,j是在1和J之間,J表示總的交點數目,對 巧(./)進行圓整,將其變為整數值; (2-2-2)依據所獲得的交點種(./),計算每兩個交點間的掃描線的間隔均值,形成方波曲線0 ,其中t為交點的序號編號,t 在1與T之間,其中j在1與T之間; (2-2-3)由所述方波曲線及參考線貨;按如下過程迭代來獲得新的參考 線:其中,y = 0.6,G(x)是一維高斯函數所述迭代步驟中形成的參考線與掃描線會形成新的交點,如果t<T返回到第二步形成新的 方波曲線,同時t = t+l,否則進入步驟(2-2-4); (2-2-4)完成T次迭代后,參考線皆(.、-)與掃描線Si(x)的交點就是一維碼條和空的邊緣 位置; (3) 邊緣映射 所述校正后的一維碼圖像中的邊緣位置和編碼位置之間的關系為:P0是一維碼第一個邊緣位置的坐標,c = sin9/(p〇cos9),0是一維碼平面與相機采圖平 面的夾角,P0是相機的焦距,P是一維碼到相機的距離,舊當于縮放項,其不影響像 素寬度的比值,所W可W簡化為1,所化; fb為依據確定的模糊影響下的校正公式,輕微的模糊對邊緣位置的影響可W看做是邊 緣位置的移動,觀察發現條變寬空變窄了,寬度變化為niur,所W模糊的邊緣位置校正公式 為: fb(pT(j))=pT(j)+mur(-l)^帶入獲得最終的校正模型為:(4) 對于變形的一維碼,可W通過分塊,將邊緣位置分成K塊,每一小塊的變形可W簡化 為投影變形;初始化參數叫/)=而/',j是在1和J之間,J表示總的交點數目,品是用于編碼的 條和空的平均寬度,丫 = 2,其余參數b,C,P日和niur初始化為0,采用Levenberg-Marquar化算 法迭代求取所有參數的最優解;將每組優化得到的編碼位置υ(τ),其中,τ是每組的位置索 引,組合起來得到的U(j)值就是優化后的編碼位置,利用U(j)進行解碼,如果失敗,重新將U (j)分成K組,用LM算法對每組進行優化求解,組合得到新的U (j ),在進行解碼,直至解碼成 功或者迭代次數達到設定闊值獲得最終U(j); (5) 從所述步驟(4)獲得一維碼編碼位置U(j)后,依據編碼規則實現解碼。
【文檔編號】G06K7/14GK105975894SQ201610310506
【公開日】2016年9月28日
【申請日】2016年5月11日
【發明人】楊華, 陳廉政, 陳逸凡
【申請人】華中科技大學, 武漢華威科智能技術有限公司