本發(fā)明涉及圖像處理技術(shù)領(lǐng)域,尤指一種矩陣式二維碼的采樣網(wǎng)格劃分方法及裝置。
背景技術(shù):
二維碼(2-dimensional bar code)是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號信息的,在代碼編制上巧妙地利用構(gòu)成計算機內(nèi)部邏輯基礎(chǔ)的“0”、“1”比特流的概念,使用若干個與二進制相對應(yīng)的幾何形體來表示文字數(shù)值信息,通過圖象輸入設(shè)備或光電掃描設(shè)備自動識讀以實現(xiàn)信息自動處理。根據(jù)二維碼的實現(xiàn)原理和結(jié)構(gòu)形狀的差異,可分為堆積式二維碼和矩陣式二維碼,其中矩陣式二維碼主要包括Code One、MaxiCode、QR Code、Data Matrix、Han Xin Code、Grid Matrix等。
以DM(Data Matrix)碼為例,在對矩陣式二維碼進行檢測時,主要分為DM碼區(qū)域的定位和DM碼區(qū)域的解碼??焖贉?zhǔn)確地解碼已知位置的DM碼,是DM碼檢測方案的重要組成部分。傳統(tǒng)的技術(shù)方案在確定DM碼的位置和版本之后,采用均勻網(wǎng)格劃分法,平均分割DM碼所在區(qū)域,完成對DM碼模塊的劃分,或者通過讀取DM碼的定位符特征,依賴DM碼的定位符特性微調(diào)采樣網(wǎng)格,完成對DM碼模塊的劃分。
然而,均勻網(wǎng)格劃分法對于模塊分布均勻且大小基本一致的DM碼,有比較好的解碼效果。但是,實際得到的DM碼圖像由于拍攝角度、打印機質(zhì)量、工業(yè)環(huán)境污染和誤差等不同的原因,會存在各模塊大小、長寬不一致等問題。此時,均勻網(wǎng)格劃分法無法準(zhǔn)確地得到DM碼的黑白分布結(jié)構(gòu)特征,也就無法正確解碼。通過讀取DM碼定位符特征的方法,可以在一定程度上解決上述均勻劃分導(dǎo)致的問題,但是無法解決由于污染、破壞導(dǎo)致的DM碼定位符缺損問題。
綜上,現(xiàn)有技術(shù)中,不能合理劃分矩陣式二維碼的采樣網(wǎng)格。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種矩陣式二維碼的采樣網(wǎng)格劃分方法及裝置,用以解決現(xiàn)有技術(shù)中存在的不能合理劃分矩陣式二維碼的采樣網(wǎng)格的問題。
本發(fā)明實施例提供了一種矩陣式二維碼的采樣網(wǎng)格劃分方法,包括:
將二維碼圖像在水平方向上的水平梯度投影圖和在垂直方向上的垂直梯度投影圖中各峰值的位置分別作為用于分割所述二維碼圖像的各垂直分割線和各水平分割線的位置;
根據(jù)所述二維碼圖像的列數(shù)和在水平方向上的模塊寬度,對各所述垂直分割線進行調(diào)整;以及根據(jù)所述二維碼圖像的行數(shù)和在垂直方向上的模塊寬度,對各所述水平分割線進行調(diào)整;
根據(jù)調(diào)整后的各所述垂直分割線和所述水平分割線對所述二維碼圖像進行采樣網(wǎng)格劃分。
在一種可能的實現(xiàn)方式中,在本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分方法中,所述二維碼圖像的列數(shù)和行數(shù)按以下方式確定:
分別根據(jù)所述水平梯度投影圖中各相鄰峰值的間距,以及所述二維碼圖像在水平方向上的寬度,確定所述二維碼圖像的列數(shù);
分別根據(jù)所述垂直梯度投影圖中各相鄰峰值的間距,以及所述二維碼圖像在垂直方向上的寬度,確定所述二維碼圖像的行數(shù);
所述二維碼圖像在水平方向和垂直方向上的模塊寬度按以下方式確定:
根據(jù)所述二維碼圖像列數(shù)和行數(shù),確定所述二維碼圖像的版本信息;
根據(jù)所述二維碼圖像的版本信息,確定所述二維碼圖像在水平方向和垂直方向上的模塊寬度。
在一種可能的實現(xiàn)方式中,在本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分方法中,所述根據(jù)所述二維碼圖像的列數(shù)和在水平方向上的模塊寬度,對各所述垂直分割線進行調(diào)整,具體包括:
若相鄰垂直分割線的間距小于第一閾值,則刪除其中一個垂直分割線;
若相鄰垂直分割線的間距大于第二閾值,則在相鄰的所述垂直分割線之間插入一定數(shù)量的垂直分割線;所述第一閾值小于所述第二閾值。
在一種可能的實現(xiàn)方式中,在本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分方法中,所述根據(jù)所述二維碼圖像的行數(shù)和在垂直方向上的模塊寬度,對各所述水平分割線進行調(diào)整,具體包括:
若相鄰水平分割線的間距小于第三閾值,則刪除其中一個水平分割線;
若相鄰水平分割線的間距大于第四閾值,則在相鄰的所述水平分割線之間插入一定數(shù)量的水平分割線;所述第三閾值小于所述第四閾值。
在一種可能的實現(xiàn)方式中,在本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分方法中,在確定所述二維碼圖像的所述水平梯度投影圖和所述垂直梯度投影圖之前,還包括:
將所述二維碼圖像中的各像素點的灰度值映射到矩形區(qū)域中,得到校正后的二維碼圖像。
在一種可能的實現(xiàn)方式中,在本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分方法中,所述矩形區(qū)域的長度和寬度是根據(jù)下列方式確定的:
根據(jù)所述二維碼圖像的四個頂點的位置,確定所述二維碼圖像的四個邊界線的長度;
以所述二維碼圖像中任意相鄰兩條邊界線的長度分別作為所述矩形區(qū)域的長度和寬度。
本發(fā)明實施例還提供了一種矩陣式二維碼的采樣網(wǎng)格劃分裝置,包括:
分割線確定單元,用于將二維碼圖像在水平方向上的水平梯度投影圖和在垂直方向上的垂直梯度投影圖中各峰值的位置分別作為用于分割所述二維碼圖像的各垂直分割線和各水平分割線的位置;
調(diào)整單元,用于根據(jù)所述二維碼圖像的列數(shù)和在水平方向上的模塊寬度,對各所述垂直分割線進行調(diào)整;以及根據(jù)所述二維碼圖像的行數(shù)和在垂直方向上的模塊寬度,對各所述水平分割線進行調(diào)整;
采樣網(wǎng)格劃分單元,用于根據(jù)調(diào)整后的各所述垂直分割線和所述水平分割線對所述二維碼圖像進行采樣網(wǎng)格劃分。
在一種可能的實現(xiàn)方式中,在本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分裝置中,還包括:模塊規(guī)格確定單元,用于:
分別根據(jù)所述水平梯度投影圖中各相鄰峰值的間距,以及所述二維碼圖像在水平方向上的寬度,確定所述二維碼圖像的列數(shù);
分別根據(jù)所述垂直梯度投影圖中各相鄰峰值的間距,以及所述二維碼圖像在垂直方向上的寬度,確定所述二維碼圖像的行數(shù);
根據(jù)所述二維碼圖像列數(shù)和行數(shù),確定所述二維碼圖像的版本信息;
根據(jù)所述二維碼圖像的版本信息,確定所述二維碼圖像在水平方向和垂直方向上的模塊寬度。
在一種可能的實現(xiàn)方式中,在本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分裝置中,所述調(diào)整單元,具體用于:
若相鄰垂直分割線的間距小于第一閾值,則刪除其中一個垂直分割線;
若相鄰垂直分割線的間距大于第二閾值,則在相鄰的所述垂直分割線之間插入一定數(shù)量的垂直分割線;所述第一閾值小于所述第二閾值。
在一種可能的實現(xiàn)方式中,在本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分裝置中,所述調(diào)整單元,具體用于:
若相鄰水平分割線的間距小于第三閾值,則刪除其中一個水平分割線;
若相鄰水平分割線的間距大于第四閾值,則在相鄰的所述水平分割線之間插入一定數(shù)量的水平分割線;所述第三閾值小于所述第四閾值。
在一種可能的實現(xiàn)方式中,在本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分裝置中,還包括:
校正單元,用于將所述二維碼圖像中的各像素點的灰度值映射到矩形區(qū)域中,得到校正后的二維碼圖像。
在一種可能的實現(xiàn)方式中,在本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分裝置中,所述校正單元,具體用于:
根據(jù)所述二維碼圖像的四個頂點的位置,確定所述二維碼圖像的四個邊界線的長度;
以所述二維碼圖像中任意相鄰兩條邊界線的長度分別作為所述矩形區(qū)域的長度和寬度;
將所述二維碼圖像中的各像素點的灰度值映射到所述矩形區(qū)域中。
本發(fā)明有益效果如下:
本發(fā)明實施例提供的矩陣式二維碼的采樣網(wǎng)格劃分方法及裝置,該方法包括:將二維碼圖像在水平方向上的水平梯度投影圖和在垂直方向上的垂直梯度投影圖中各峰值的位置分別作為用于分割二維碼圖像的各垂直分割線和各水平分割線的位置;根據(jù)二維碼圖像的列數(shù)和在水平方向上的模塊寬度,對各垂直分割線進行調(diào)整;以及根據(jù)二維碼圖像的行數(shù)和在垂直方向上的模塊寬度,對各水平分割線進行調(diào)整;根據(jù)調(diào)整后的各垂直分割線和水平分割線對二維碼圖像進行采樣網(wǎng)格劃分。本發(fā)明實施例提供的方法,根據(jù)二維碼圖像的列數(shù)和在水平方向上的模塊寬度,對各垂直分割線進行調(diào)整;以及根據(jù)二維碼圖像的行數(shù)和在垂直方向上的模塊寬度,對各水平分割線進行調(diào)整,根據(jù)調(diào)整后的各垂直分割線和水平分割線對二維碼圖像進行采樣網(wǎng)格劃分,這種網(wǎng)格劃分方法對模塊的排列是否整齊,模塊大小是否一致的要求較低,且不依賴定位符的特征,因此,即使獲取到的二維碼圖像中的模塊大小不一致,或者定位符缺損等,也不會對采樣網(wǎng)格劃分產(chǎn)生影響,適應(yīng)性較強。此外,二維碼圖像中的梯度特征比較豐富,在對比度極低的情況下也可以準(zhǔn)確的劃分采樣網(wǎng)格,即該方法具有很強的魯棒性,也使后續(xù)的解碼過程有更高的解碼率。
附圖說明
圖1為本發(fā)明實施例提供的矩陣式二維碼的采樣網(wǎng)格劃分方法的流程圖之一;
圖2a為DM二維碼的結(jié)構(gòu)示意圖;
圖2b為圖2a中的DM二維碼的定位區(qū)的示意圖;
圖2c為圖2a中的DM二維碼的數(shù)據(jù)區(qū)的示意圖;
圖3為本發(fā)明實施例提供的矩陣式二維碼的采樣網(wǎng)格劃分方法的流程圖之二;
圖4為本發(fā)明實施例提供的矩陣式二維碼的采樣網(wǎng)格劃分裝置的結(jié)構(gòu)示意圖。
具體實施方式
針對現(xiàn)有技術(shù)中存在的不能合理劃分矩陣式二維碼的采樣網(wǎng)格的問題,本發(fā)明實施例提供了一種矩陣式二維碼的采樣網(wǎng)格劃分方法及裝置。
下面結(jié)合附圖,對本發(fā)明實施例提供的矩陣式二維碼的采樣網(wǎng)格劃分方法及裝置的具體實施方式進行詳細地說明。
本發(fā)明實施例提供了一種矩陣式二維碼的采樣網(wǎng)格劃分方法,如圖1所示,包括:
S101、將二維碼圖像在水平方向上的水平梯度投影圖和在垂直方向上的垂直梯度投影圖中各峰值的位置分別作為用于分割二維碼圖像的各垂直分割線和各水平分割線的位置;
S102、根據(jù)二維碼圖像的列數(shù)和在水平方向上的模塊寬度,對各垂直分割線進行調(diào)整;以及根據(jù)二維碼圖像的行數(shù)和在垂直方向上的模塊寬度,對各水平分割線進行調(diào)整;
S103、根據(jù)調(diào)整后的各垂直分割線和水平分割線對二維碼圖像進行采樣網(wǎng)格劃分。
本發(fā)明實施例提供的矩陣式二維碼的采樣網(wǎng)格劃分方法,根據(jù)二維碼圖像的列數(shù)和在水平方向上的模塊寬度,對各垂直分割線進行調(diào)整;以及根據(jù)二維碼圖像的行數(shù)和在垂直方向上的模塊寬度,對各水平分割線進行調(diào)整,根據(jù)調(diào)整后的各垂直分割線和水平分割線對二維碼圖像進行采樣網(wǎng)格劃分,這種網(wǎng)格劃分方法對模塊的排列是否整齊,模塊大小是否一致的要求較低,且不依賴定位符的特征,因此,即使獲取到的二維碼圖像中的模塊大小不一致,或者定位符缺損等,也不會對采樣網(wǎng)格劃分產(chǎn)生影響,適應(yīng)性較強。此外,二維碼圖像中的梯度特征比較豐富,在對比度極低的情況下也可以準(zhǔn)確的劃分采樣網(wǎng)格,即該方法具有很強的魯棒性,也使后續(xù)的解碼過程有更高的解碼率。
本發(fā)明實施例提供的矩陣式二維碼的采樣網(wǎng)格劃分方法,可以應(yīng)用于任何矩陣式二維碼,本發(fā)明以DM碼為例進行說明,DM二維碼是由多個大小相同的黑色或白色方塊組成的矩形陣列的圖像,如圖2a所示,DM二維碼的四周為定位區(qū),如圖2b所示,定位區(qū)包括四條邊界,由兩條相鄰的實線邊界和兩條相鄰的虛線邊界組成,所謂虛線是各模塊一黑一白交替組成,目的是的為了幫助識別該二維碼的尺寸和單位結(jié)構(gòu)。定位區(qū)包圍的內(nèi)部為數(shù)據(jù)區(qū),如圖2c所示,數(shù)據(jù)區(qū)內(nèi)每個黑色模塊或白色模塊代表矩陣數(shù)據(jù)中的一位數(shù)據(jù),0或1。
上述步驟S101中,二維碼圖像的水平梯度投影圖和垂直梯度投影圖是根據(jù)二維碼圖像中各像素點的灰度值得到的,由于二維碼圖像本身具有黑白相間的顏色特性,因此利用各像素點的灰度值,可以去除其他顏色對圖像處理過程的影響,提高了處理的速度,降低方法的空間復(fù)雜度。在確定水平梯度投影圖和垂直梯度投影圖之后,可以分別將水平梯度投影圖和垂直梯度投影圖中的峰值個數(shù)、峰值的大小以及各峰值的位置等峰值信息,以數(shù)組、矩陣或者圖表等形式記錄下來,用于后續(xù)計算。
在圖像處理領(lǐng)域中,梯度值指的是相鄰兩個像素點的灰度差,而二維碼圖像一般由多個黑色模塊或者白色模塊按照一定規(guī)則排列,黑色模塊和白色模塊之間的位置為灰度變化最大的位置,即黑色模塊和白色模塊之間的灰度值為某個鄰域范圍內(nèi)的極大值,所以在不考慮噪聲的影響時,梯度投影圖中的峰值位置可以認為是黑色模塊和白色模塊之間的位置,而一般水平梯度投影圖可以通過將各像素點在垂直方向上的梯度圖逐行求和得到,所以水平梯度投影圖中的峰值一般為垂直方向上多個峰值疊加的效果,由于很少會出現(xiàn)一行或一列的模塊均是黑色或白色,所以在水平梯度投影圖中,相鄰兩個模塊之間一定會出現(xiàn)峰值,因此,相鄰兩個峰值的間距可以近似等于模塊的寬度,垂直梯度投影圖的原理與水平梯度投影圖的原理類似,此處不再贅述。
基于上述原理,可以根據(jù)水平梯度投影圖中各相鄰峰值之間的間距以及二維碼圖像在水平方向上的寬度,確定二維碼圖像的列數(shù)和水平方向上的模塊寬度,同理,可以根據(jù)垂直梯度投影圖中各相鄰峰值之間的間距以及二維碼圖像在垂直方向上的寬度,確定二維碼圖像的行數(shù)和垂直方向上的模塊寬度。
在不考慮噪聲的影響時,在梯度投影圖中的峰值的位置可以認為是相鄰兩個峰值之間的位置,所以可以將峰值出現(xiàn)的位置作為分割線的位置,通過將水平梯度投影圖中各峰值的位置作為各垂直分割線的位置,將垂直梯度投影圖中各峰值的位置作為各水平分割線的位置,因而可以將二維碼圖像分割為一個一個的矩形網(wǎng)格。在實際應(yīng)用中,在梯度投影圖中噪聲比較大的位置處也可能出現(xiàn)峰值,并且獲取到的二維碼圖像可能并不是很整齊,所以在上述步驟S102中,需要根據(jù)二維碼圖像的列數(shù)和在水平方向上的模塊寬度,對各垂直分割線進行調(diào)整,以及根據(jù)二維碼圖像的行數(shù)和在垂直方向上的模塊寬度,對各水平分割線進行調(diào)整,從而去除噪聲和二維碼圖像可能不整齊帶來的劃分網(wǎng)格的誤差。
具體地,本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分方法中,還可以包括:
S100'、分別根據(jù)水平梯度投影圖和垂直梯度投影圖中各相鄰峰值的間距,以及二維碼圖像在水平方向和垂直方向上的寬度,確定二維碼圖像的行數(shù)、列數(shù),以及在水平方向和垂直方向上的模塊寬度。
上述二維碼圖像的列數(shù)和行數(shù)按以下方式確定(圖中未示出):
分別根據(jù)水平梯度投影圖中各相鄰峰值的間距,以及二維碼圖像在水平方向上的寬度,確定二維碼圖像的列數(shù);
分別根據(jù)垂直梯度投影圖中各相鄰峰值的間距,以及二維碼圖像在垂直方向上的寬度,確定二維碼圖像的行數(shù);
具體地,上述二維碼圖像在水平方向和垂直方向上的模塊寬度按以下方式確定(圖中未示出):
根據(jù)二維碼圖像列數(shù)和行數(shù),確定二維碼圖像的版本信息;
根據(jù)二維碼圖像的版本信息,確定二維碼圖像在水平方向和垂直方向上的模塊寬度。
更具體地,在確定二維碼圖像的列數(shù)時,根據(jù)水平梯度投影圖中每一個相鄰峰值的間距和二維碼圖像在水平方向上的寬度,可以得到多個與每一個間距對應(yīng)的列數(shù)的近似個數(shù),一般可以通過水平方向上的寬度分別除以每一個間距得到每一個間距對應(yīng)的近似個數(shù),而列數(shù)一般為確定的整數(shù),例如16、18或22等數(shù)值,在得到的多個近似個數(shù)中,若大多數(shù)的近似個數(shù)與這些整數(shù)中的某一個整數(shù)接近,則可以認為二維碼圖像的列數(shù)就是該整數(shù)。舉例來說,若水平梯度投影圖中的各相鄰峰值的間距分別為2.1、2.15、2.13、2.09、2.4、2.12,二維碼圖像在水平方向上的寬度為38,則用41除以上述間距的數(shù)值,可以得到各間距對應(yīng)的近似個數(shù)為:18.1、17.7、17.8、18.2、15.8、17.9,可以看出大多數(shù)的近似個數(shù)都與18接近,則可以認為列數(shù)為18。若在計算出的近似個數(shù)中出現(xiàn)某個數(shù)值介于上述整數(shù)之間,例如出現(xiàn)17在16和18之間的情況,此時也可以通過設(shè)置權(quán)重的方式看整體上哪個整數(shù)的權(quán)重最大來確定列數(shù)。在確定行數(shù)時的過程與確定列數(shù)的過程類似,此處不再贅述。
在確定水平方向和垂直方向上的模塊寬度時,一般對于二維碼圖像每個版本對應(yīng)的行數(shù)、列數(shù)以及模塊的尺寸都是是固定的,所以可以根據(jù)二維碼圖像的行數(shù)和列數(shù)來確定該二維碼圖像屬于哪個版本,確定該二維碼圖像的版本信息后,則可以確定該二維碼的尺寸。
具體地,本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分方法中,上述步驟S102中對垂直分割線進行調(diào)整,可以具體包括(圖中未示出):
S102a、若相鄰垂直分割線的間距小于第一閾值,則刪除其中一個垂直分割線;
S102b、若相鄰垂直分割線的間距大于第二閾值,則在相鄰的垂直分割線之間插入一定數(shù)量的垂直分割線;第一閾值小于第二閾值。
具體地,本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分方法中,上述步驟S102中對水平分割線進行調(diào)整,可以具體包括(圖中未示出):
S102c、若相鄰水平分割線的間距小于第三閾值,則刪除其中一個水平分割線;
S102d、若相鄰水平分割線的間距大于第四閾值,則在相鄰的水平分割線之間插入一定數(shù)量的水平分割線;第三閾值小于第四閾值。
上述步驟S102a中,若相鄰兩個垂直分割線的間距太小,則可以認為其中一個垂直分割線對應(yīng)的峰值是由于噪聲導(dǎo)致的,則需要刪除其中一個垂直分割線,在具體應(yīng)用中,對每一個間距進行判斷,若出現(xiàn)間距小于第一閾值,優(yōu)選為均刪除靠前的垂直分割線或均刪除靠后的垂直分割線,上述第一閾值可以根據(jù)在水平方向上的模塊寬度確定,例如可以取在水平方向上的模塊寬度的1/3或1/2等數(shù)值,也可以根據(jù)實際需要確定。
上述步驟S102b中,若相鄰垂直分割線的間距太大,則說明在這兩個垂直分割線之間還存在沒有檢測出來的峰值,則需要在這兩個垂直分割線之間插入垂直分割線,插入的數(shù)量要根據(jù)間距的大小來確定,若該間距大約為兩個模塊的寬度,則只需再插入一個垂直分割線即可,若該間距大約為三個模塊的寬度,則需要再插入兩個垂直分割線。上述第二閾值可以根據(jù)在水平方向上的模塊寬度確定,例如可以取在水平方向上的模塊寬度的1.2倍或1.3倍等數(shù)值,也可以根據(jù)實際需要確定。在具體實施時,在插入垂直分割線時,還要結(jié)合二維碼圖像的列數(shù)來確定插入垂直分割線的數(shù)量,要使插入垂直分割線后得到的垂直分割線的數(shù)量比列數(shù)多1,才能進行網(wǎng)格劃分,后續(xù)才能正確解碼,也可以將間距由大到小進行排序,看哪些間距中可以插入垂直分割線,再結(jié)合需要插入的個數(shù),來確定每一個間距中需要插入的個數(shù),當(dāng)然也可以采用其他確定方式,此處不做限定。
上述步驟S102c和步驟S102d為對水平分割線調(diào)整的過程,與上述步驟S102a和步驟S102b對垂直分割線的調(diào)整過程類似,此處不再贅述。
進一步地,本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分方法中,在確定二維碼圖像的水平梯度投影圖和垂直梯度投影圖之前,還可以包括:
S100、將二維碼圖像中的各像素點的灰度值映射到矩形區(qū)域中,得到校正后的二維碼圖像。
通過將二維碼圖像中的各像素點的灰度值映射到矩形區(qū)域中,實際上是對二維碼圖像進行校正,由于拍攝角度的問題,獲取到的二維碼圖像可能并不是規(guī)則的矩形,有可能是平行四邊形或者梯形等,通過將二維碼圖像中的各像素點的灰度值映射到矩形區(qū)域中,可以得到圖形規(guī)則的校正后的二維碼圖像,在本發(fā)明實施例中,后續(xù)提到的二維碼圖形優(yōu)選為校正后的二維碼圖像。
具體地,上述步驟S100可以具體包括(圖中未示出):
S100a、根據(jù)二維碼圖像的四個頂點的位置,確定二維碼圖像的四個邊界線的長度;
S100b、以二維碼圖像中任意相鄰兩條邊界線的長度分別作為矩形區(qū)域的長度和寬度;
S100c、將二維碼圖像中的各像素點的灰度值映射到矩形區(qū)域中。
參照圖2b所示的DM二維碼的定位區(qū),上述S100a中,首先根據(jù)DM二維碼的實線邊界可以找到三個頂點的位置,然后根據(jù)虛線位置確定DM二維碼第四個頂點的位置,然后就可以根據(jù)四個頂點的位置,得到四條邊界的長度。
步驟S100b中,以二維碼圖像中任意相鄰兩條邊界線的長度作為矩形區(qū)域的預(yù)設(shè)長度和寬度,使后續(xù)步驟S100c中的映射過程比較容易,減小映射過程的計算量。
在具體實施時,本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分方法中,上述步驟S101中的水平梯度投影圖和垂直梯度投影圖,可以按以下方式確定:
S101a、根據(jù)二維碼圖像中的各像素點的灰度值,分別得到各像素點在水平方向和垂直方向上的梯度值;
S101b、將各像素點在垂直方向上的梯度值逐行求和,得到水平梯度投影圖;
S101c、將各像素點在水平方向上的梯度值逐列求和,得到垂直梯度投影圖。
在上述步驟S101a中,由于在對二維碼圖像進行網(wǎng)格劃分時,需要對水平方向和垂直方向上均劃分,所以需要確定各像素點在水平方向和垂直方向兩個方向上的梯度值,以便后續(xù)計算兩個方向上出現(xiàn)的峰值。
在上述步驟S101b中,將各像素點在垂直方向上的梯度值逐行求和,可以得到各像素點灰度變化的累加效果,而峰值一般出現(xiàn)在黑色模塊和白色模塊之間的位置,由于很少會出現(xiàn)一行或一列的模塊均是黑色或白色,所以在水平梯度投影圖中,相鄰兩個模塊之間一定會出現(xiàn)峰值,因而后續(xù)可以將峰值的位置作為分割線的位置。上述步驟S101c與步驟S101b的原理類似,此處不再贅述。
更進一步地,本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分方法中,上述步驟S101之前,還可以包括(圖中未示出):
確定水平梯度投影圖和垂直梯度投影圖中的峰值、各峰值的位置、谷值以及各谷值的位置;
濾除與相鄰的谷值的差值小于預(yù)設(shè)閾值的峰值。
在水平(或垂直)梯度投影圖中,一般相鄰的峰值和谷值之間的差值會比較大,若相鄰的峰值和谷值之間的差值比較小,則有可能該峰值位置處并不是邊緣,而是噪聲,因此,通過設(shè)定預(yù)設(shè)閾值,如果相鄰的峰值和谷值之間的差值小于該預(yù)設(shè)閾值,則認為該峰值位置處為噪聲,將該峰值去除,將整個水平(或垂直)梯度投影圖都進行這樣的處理,則濾除二維碼圖像中不規(guī)則或獨立的噪聲,使后續(xù)的處理結(jié)果更加準(zhǔn)確。
參照圖3,以下結(jié)合附圖,對本發(fā)明實施例提供的優(yōu)選實施例進行詳細說明:
S201、根據(jù)二維碼圖像的四個頂點的位置,確定二維碼圖像的四個邊界線的長度;
S202、將二維碼圖像中的各像素點的灰度值映射到矩形區(qū)域中,得到校正后的二維碼圖像;該矩形區(qū)域的長度和寬度分別為二維碼圖像中任意相鄰兩條邊界線的長度;
S203、根據(jù)校正后的二維碼圖像中各像素點的灰度值,確定校正后的二維碼圖像在水平方向上的水平梯度投影圖和在垂直方向上的垂直梯度投影圖;
S204、分別確定水平梯度投影圖和垂直梯度投影圖中的峰值、各峰值的位置、谷值以及各谷值的位置,濾除與相鄰的谷值的差值小于預(yù)設(shè)閾值的峰值;
S205、分別根據(jù)水平梯度投影圖和垂直梯度投影圖中各相鄰峰值的間距,以及二維碼圖像在水平方向和垂直方向上的寬度,確定二維碼圖像的列數(shù)、行數(shù)以及在水平方向和垂直方向上的模塊寬度;二維碼圖像在水平方向上和垂直方向上的寬度可以為上述S202中的矩形區(qū)域的長度和寬度;
S206、將水平梯度投影圖和垂直梯度投影圖中各峰值的位置分別作為用于分割二維碼圖像的各垂直分割線和各水平分割線的位置;
S207、根據(jù)二維碼圖像的列數(shù)和在水平方向上的模塊寬度,對各垂直分割線進行調(diào)整;以及根據(jù)二維碼圖像的行數(shù)和在垂直方向上的模塊寬度,對各水平分割線進行調(diào)整;
S208、根據(jù)調(diào)整后的各垂直分割線和水平分割線對二維碼圖像進行采樣網(wǎng)格劃分。
基于同一發(fā)明構(gòu)思,本發(fā)明實施例提供一種矩陣式二維碼的采樣網(wǎng)格劃分裝置,由于該裝置解決問題的原理與上述方法相似,因此該裝置的實施可以參見上述方法的實施,重復(fù)之處不再贅述。
如圖4所示,本發(fā)明實施例提供了一種矩陣式二維碼的采樣網(wǎng)格劃分裝置,包括:
分割線確定單元301,用于將二維碼圖像在水平方向上的水平梯度投影圖和在垂直方向上的垂直梯度投影圖中各峰值的位置分別作為用于分割二維碼圖像的各垂直分割線和各水平分割線的位置;
調(diào)整單元302,用于根據(jù)二維碼圖像的列數(shù)和在水平方向上的模塊寬度,對各垂直分割線進行調(diào)整;以及根據(jù)二維碼圖像的行數(shù)和在垂直方向上的模塊寬度,對各水平分割線進行調(diào)整;
采樣網(wǎng)格劃分單元303,用于根據(jù)調(diào)整后的各垂直分割線和水平分割線對二維碼圖像進行采樣網(wǎng)格劃分。
具體地,本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分裝置中,還可以包括:模塊規(guī)格確定單元300',用于:
分別根據(jù)水平梯度投影圖中各相鄰峰值的間距,以及二維碼圖像在水平方向上的寬度,確定二維碼圖像的列數(shù);
分別根據(jù)垂直梯度投影圖中各相鄰峰值的間距,以及二維碼圖像在垂直方向上的寬度,確定二維碼圖像的行數(shù);
根據(jù)二維碼圖像列數(shù)和行數(shù),確定二維碼圖像的版本信息;
根據(jù)二維碼圖像的版本信息,確定二維碼圖像在水平方向和垂直方向上的模塊寬度。
具體地,本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分裝置中,調(diào)整單元302,可以具體用于:
若相鄰垂直分割線的間距小于第一閾值,則刪除其中一個垂直分割線;
若相鄰垂直分割線的間距大于第二閾值,則在相鄰的垂直分割線之間插入一定數(shù)量的垂直分割線;第一閾值小于第二閾值。
具體地,本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分裝置中,調(diào)整單元302,可以具體用于:
若相鄰水平分割線的間距小于第三閾值,則刪除其中一個水平分割線;
若相鄰水平分割線的間距大于第四閾值,則在相鄰的水平分割線之間插入一定數(shù)量的水平分割線;第三閾值小于第四閾值。
進一步地,本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分裝置中,參照圖4,還可以包括:
校正單元300,用于將二維碼圖像中的各像素點的灰度值映射到矩形區(qū)域中,得到校正后的二維碼圖像。
具體地,本發(fā)明實施例提供的上述矩陣式二維碼的采樣網(wǎng)格劃分裝置中,校正單元300,可以具體用于:
根據(jù)二維碼圖像的四個頂點的位置,確定二維碼圖像的四個邊界線的長度;
以二維碼圖像中任意相鄰兩條邊界線的長度分別作為矩形區(qū)域的長度和寬度;
將二維碼圖像中的各像素點的灰度值映射到矩形區(qū)域中。
本發(fā)明實施例提供的矩陣式二維碼的采樣網(wǎng)格劃分方法及裝置,根據(jù)二維碼圖像的列數(shù)和在水平方向上的模塊寬度,對各垂直分割線進行調(diào)整;以及根據(jù)二維碼圖像的行數(shù)和在垂直方向上的模塊寬度,對各水平分割線進行調(diào)整,根據(jù)調(diào)整后的各垂直分割線和水平分割線對二維碼圖像進行采樣網(wǎng)格劃分,這種網(wǎng)格劃分方法對模塊的排列是否整齊,模塊大小是否一致的要求較低,且不依賴定位符的特征,因此,即使獲取到的二維碼圖像中的模塊大小不一致,或者定位符缺損等,也不會對采樣網(wǎng)格劃分產(chǎn)生影響,適應(yīng)性較強。此外,二維碼圖像中的梯度特征比較豐富,在對比度極低的情況下也可以準(zhǔn)確的劃分采樣網(wǎng)格,即該方法具有很強的魯棒性,也使后續(xù)的解碼過程有更高的解碼率。此外,通過將二維碼圖像中的各像素點的灰度值映射到矩形區(qū)域中,使校正后的二維碼圖像具有規(guī)則的圖形,因而,二維碼圖像本身的形狀不會影響后續(xù)的處理過程,降低后續(xù)處理過程的復(fù)雜度。并且在采用網(wǎng)格劃分前還包括去除噪聲的過程,進一步提高了處理速度和采樣網(wǎng)格劃分的準(zhǔn)確性。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。