本發(fā)明涉及圖像處理技術(shù)領(lǐng)域,尤其涉及一種快速反應(yīng)qr碼模塊邊界調(diào)整的方法及裝置。
背景技術(shù):
隨著科學(xué)技術(shù)的快速發(fā)展,qr碼的出現(xiàn)方便了用戶的生活,在日常生活中,無(wú)論是購(gòu)物還是一些社交軟件或者是一些應(yīng)用軟件都有其對(duì)應(yīng)的一個(gè)qr碼,用戶可以通過(guò)掃碼,讀取該qr碼即可進(jìn)入購(gòu)物付款界面,或者進(jìn)入添加好友界面等。qr碼由多個(gè)模塊組成,用戶在使用電子設(shè)備對(duì)qr碼進(jìn)行解碼時(shí),存在著對(duì)qr碼中的模塊的邊界調(diào)整的過(guò)程,之后針對(duì)模塊邊界調(diào)整后的qr碼進(jìn)行解碼。
現(xiàn)有技術(shù)對(duì)模塊的邊界調(diào)整時(shí),是將每個(gè)模塊的整個(gè)直線邊界作為一個(gè)整體在一定范圍內(nèi)進(jìn)行移動(dòng),完成對(duì)模塊邊界的調(diào)整。這種模塊邊界調(diào)整的方法對(duì)于qr碼所在的區(qū)域內(nèi)模塊分布均勻且大小基本一致的qr碼,有比較好的效果。但是,實(shí)際得到的qr碼所在的區(qū)域,由于拍攝角度、打印機(jī)質(zhì)量、工業(yè)環(huán)境污染和誤差等不同的原因,會(huì)存在qr碼中的各模塊大小、長(zhǎng)寬不一致等問(wèn)題。此外,在過(guò)曝,低對(duì)比度,高噪聲等圖像上qr碼中的模塊的邊界通常不是直線邊界。這種情況下,通過(guò)將每個(gè)模塊的整個(gè)直線邊界作為一個(gè)整體在一定范圍內(nèi)進(jìn)行移動(dòng),完成對(duì)模塊邊界的調(diào)整,會(huì)造成模塊內(nèi)部噪聲過(guò)多,確定出的模塊不準(zhǔn)確,影響采樣模塊信息的準(zhǔn)確度,進(jìn)而嚴(yán)重降低解碼的準(zhǔn)確率。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種qr碼模塊邊界調(diào)整的方法及裝置,用以解決qr碼中的模塊的邊界調(diào)整不準(zhǔn)確的問(wèn)題。
為達(dá)到上述目的,本發(fā)明實(shí)施例公開(kāi)了一種qr碼模塊邊界調(diào)整的方法,該方法包括:
根據(jù)定位出的qr碼所在的區(qū)域,及該區(qū)域中每個(gè)像素點(diǎn)的灰度值,生成灰度值的梯度投影圖;
根據(jù)所述梯度投影圖中的每個(gè)峰值,對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分,得到qr碼中的每個(gè)模塊;
針對(duì)每個(gè)模塊,按照預(yù)設(shè)的劃分方法將該模塊劃分為多個(gè)矩形區(qū)域;針對(duì)每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn),按照預(yù)設(shè)的方法確定每個(gè)頂點(diǎn)在四個(gè)第一方向的梯度值;針對(duì)每個(gè)第一方向,根據(jù)與該第一方向?qū)?yīng)的行或列,在每行或每列中將梯度值的最大值對(duì)應(yīng)的頂點(diǎn)作為該第一方向的候選點(diǎn),并針對(duì)每個(gè)第一方向?qū)⒚總€(gè)候選點(diǎn)劃分為內(nèi)外兩個(gè)第二方向,針對(duì)每個(gè)第二方向,對(duì)候選點(diǎn)進(jìn)行調(diào)整得到每個(gè)邊界點(diǎn),將調(diào)整后的邊界點(diǎn)依次連接;將所述調(diào)整后的邊界點(diǎn)依次連接后構(gòu)成的封閉區(qū)域作為qr碼模塊所在區(qū)域。
進(jìn)一步地,所述根據(jù)定位出的qr碼所在的區(qū)域,及該區(qū)域中每個(gè)像素點(diǎn)的灰度值,生成灰度值的梯度投影圖包括:
針對(duì)每個(gè)像素點(diǎn),確定與該像素點(diǎn)左右相鄰的兩個(gè)像素點(diǎn)的灰度值的差的絕對(duì)值,將所述絕對(duì)值作為該像素點(diǎn)的水平梯度值,將每一列的像素點(diǎn)的水平梯度值累加得到水平方向的梯度投影圖;
針對(duì)每個(gè)像素點(diǎn),確定與該像素點(diǎn)上下相鄰的兩個(gè)像素點(diǎn)的灰度值的差的絕對(duì)值,將所述絕對(duì)值作為該像素點(diǎn)的垂直梯度值,將每一行的像素點(diǎn)的垂直梯度值累加得到垂直方向的梯度投影圖。
進(jìn)一步地,所述根據(jù)所述梯度投影圖中的每個(gè)峰值,對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分包括:
將所述水平方向的梯度投影圖的水平方向劃分為第一數(shù)量的范圍區(qū)間,識(shí)別每個(gè)第一范圍區(qū)間中梯度值的峰值,確定每個(gè)峰值所對(duì)應(yīng)的每個(gè)目標(biāo)列,在所述qr碼所在的區(qū)域中采用每個(gè)目標(biāo)列進(jìn)行列劃分;
將垂直方向的梯度投影圖的垂直方向劃分為第二數(shù)量的范圍區(qū)間,識(shí)別每個(gè)第二范圍區(qū)間中梯度值的峰值,確定每個(gè)峰值所對(duì)應(yīng)的每個(gè)目標(biāo)行,在所述qr碼所在的區(qū)域中采用每個(gè)目標(biāo)行進(jìn)行行劃分。
進(jìn)一步地,所述針對(duì)每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn),按照預(yù)設(shè)的方法確定每個(gè)頂點(diǎn)在四個(gè)第一方向的梯度值包括:
將每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn)劃分到左右兩個(gè)半?yún)^(qū),將左方向作為第一方向,針對(duì)左半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)右側(cè)的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在左方向的梯度值;將右方向作為第一方向,針對(duì)右半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)左側(cè)的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在右方向的梯度值;
將每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn)劃分到上下兩個(gè)半?yún)^(qū),將上方作為第一方向,針對(duì)上半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)下方的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在上方的梯度值;將下方作為第一方向,針對(duì)下半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)上方的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在下方的梯度值。
進(jìn)一步地,所述針對(duì)每個(gè)第二方向,對(duì)候選點(diǎn)進(jìn)行調(diào)整得到每個(gè)邊界點(diǎn)包括:
如果候選點(diǎn)為左方向候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將左方向候選點(diǎn)劃分為上下兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的左方向候選點(diǎn),將與該最內(nèi)側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)作為該外側(cè)組左方向邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的左方向候選點(diǎn),將與該最外側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組左方向邊界點(diǎn);
如果候選點(diǎn)為右方向候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將右方向候選點(diǎn)劃分為上下兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的右方向候選點(diǎn),將與該最內(nèi)側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn)作為該外側(cè)組右方向邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的右方向候選點(diǎn),將與該最外側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組右方向邊界點(diǎn);
如果候選點(diǎn)為上方候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將上方候選點(diǎn)劃分為左右兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的上方候選點(diǎn),將與該最內(nèi)側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn)作為該外側(cè)組上方邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的上方候選點(diǎn),將與該最外側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組上方邊界點(diǎn);
如果候選點(diǎn)為下方候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將下方候選點(diǎn)劃分為左右兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的下方候選點(diǎn),將與該最內(nèi)側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)作為該外側(cè)組下方邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的下方候選點(diǎn),將與該最外側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組下方邊界點(diǎn)。
進(jìn)一步地,所述將與該最外側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組左方向邊界點(diǎn)之前,所述方法還包括:
判斷每個(gè)內(nèi)側(cè)分組的左方向邊界點(diǎn)是否位于同一列,如果是,進(jìn)行后續(xù)步驟。
進(jìn)一步地,如果每個(gè)內(nèi)側(cè)分組的左方向邊界點(diǎn)不位于同一列,所述方法還包括:
針對(duì)內(nèi)側(cè)分組中的左方向邊界點(diǎn),確定位于最內(nèi)側(cè)的左方向邊界點(diǎn),將內(nèi)側(cè)分組左方向邊界點(diǎn)更新為與該最內(nèi)側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)。
進(jìn)一步地,所述將與該最外側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組右方向邊界點(diǎn)之前,所述方法還包括:
判斷每個(gè)內(nèi)側(cè)分組的右方向邊界點(diǎn)是否位于同一列,如果是,進(jìn)行后續(xù)步驟;
所述將與該最外側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組上方邊界點(diǎn)之前,所述方法還包括:
判斷每個(gè)內(nèi)側(cè)分組的上方邊界點(diǎn)是否位于同一行,如果是,進(jìn)行后續(xù)步驟;
所述將與該最外側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組下方邊界點(diǎn)之前,所述方法還包括:
判斷每個(gè)內(nèi)側(cè)分組的下方邊界點(diǎn)是否位于同一行,如果是,進(jìn)行后續(xù)步驟。
進(jìn)一步地,如果每個(gè)內(nèi)側(cè)分組的右方向邊界點(diǎn)不位于同一列,所述方法還包括:
針對(duì)內(nèi)側(cè)分組中的右方向邊界點(diǎn),確定位于最內(nèi)側(cè)的右方向邊界點(diǎn),將內(nèi)側(cè)分組右方向邊界點(diǎn)更新為與該最內(nèi)側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn);
如果每個(gè)內(nèi)側(cè)分組的上方邊界點(diǎn)不位于同一行,所述方法還包括:
針對(duì)內(nèi)側(cè)分組中的上方邊界點(diǎn),確定位于最內(nèi)側(cè)的上方邊界點(diǎn),將內(nèi)側(cè)分組上方邊界點(diǎn)更新為與該最內(nèi)側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn);
如果每個(gè)內(nèi)側(cè)分組的下方邊界點(diǎn)不位于同一行,所述方法還包括:
針對(duì)內(nèi)側(cè)分組中的下方邊界點(diǎn),確定位于最內(nèi)側(cè)的下方邊界點(diǎn),將內(nèi)側(cè)分組下方邊界點(diǎn)更新為與該最內(nèi)側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)。
另一方面,本發(fā)明實(shí)施例公開(kāi)了一種qr碼模塊邊界調(diào)整的裝置,該裝置包括:
生成模塊,用于根據(jù)定位出的qr碼所在的區(qū)域,及該區(qū)域中每個(gè)像素點(diǎn)的灰度值,生成灰度值的梯度投影圖;
劃分模塊,用于根據(jù)所述梯度投影圖中的每個(gè)峰值,對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分,得到qr碼中的每個(gè)模塊;
調(diào)整模塊,用于針對(duì)每個(gè)模塊,按照預(yù)設(shè)的劃分方法將該模塊劃分為多個(gè)矩形區(qū)域;針對(duì)每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn),按照預(yù)設(shè)的方法確定每個(gè)頂點(diǎn)在四個(gè)第一方向的梯度值;針對(duì)每個(gè)第一方向,根據(jù)與該第一方向?qū)?yīng)的行或列,在每行或每列中將梯度值的最大值對(duì)應(yīng)的頂點(diǎn)作為該第一方向的候選點(diǎn),并針對(duì)每個(gè)第一方向?qū)⒚總€(gè)候選點(diǎn)劃分為內(nèi)外兩個(gè)第二方向,針對(duì)每個(gè)第二方向,對(duì)候選點(diǎn)進(jìn)行調(diào)整得到每個(gè)邊界點(diǎn),將調(diào)整后的邊界點(diǎn)依次連接;將所述調(diào)整后的邊界點(diǎn)依次連接后構(gòu)成的封閉區(qū)域作為qr碼模塊所在區(qū)域。
進(jìn)一步地,所述生成模塊,具體用于針對(duì)每個(gè)像素點(diǎn),確定與該像素點(diǎn)左右相鄰的兩個(gè)像素點(diǎn)的灰度值的差的絕對(duì)值,將所述絕對(duì)值作為該像素點(diǎn)的水平梯度值,將每一列的像素點(diǎn)的水平梯度值累加得到水平方向的梯度投影圖;針對(duì)每個(gè)像素點(diǎn),確定與該像素點(diǎn)上下相鄰的兩個(gè)像素點(diǎn)的灰度值的差的絕對(duì)值,將所述絕對(duì)值作為該像素點(diǎn)的垂直梯度值,將每一行的像素點(diǎn)的垂直梯度值累加得到垂直方向的梯度投影圖。
進(jìn)一步地,所述劃分模塊,具體用于將所述水平方向的梯度投影圖的水平方向劃分為第一數(shù)量的范圍區(qū)間,識(shí)別每個(gè)第一范圍區(qū)間中梯度值的峰值,確定每個(gè)峰值所對(duì)應(yīng)的每個(gè)目標(biāo)列,在所述qr碼所在的區(qū)域中采用每個(gè)目標(biāo)列進(jìn)行列劃分;將垂直方向的梯度投影圖的垂直方向劃分為第二數(shù)量的范圍區(qū)間,識(shí)別每個(gè)第二范圍區(qū)間中梯度值的峰值,確定每個(gè)峰值所對(duì)應(yīng)的每個(gè)目標(biāo)行,在所述qr碼所在的區(qū)域中采用每個(gè)目標(biāo)行進(jìn)行行劃分。
進(jìn)一步地,所述調(diào)整模塊,具體用于將每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn)劃分到左右兩個(gè)半?yún)^(qū),將左方向作為第一方向,針對(duì)左半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)右側(cè)的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在左方向的梯度值;將右方向作為第一方向,針對(duì)右半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)左側(cè)的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在右方向的梯度值;將每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn)劃分到上下兩個(gè)半?yún)^(qū),將上方作為第一方向,針對(duì)上半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)下方的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在上方的梯度值;將下方作為第一方向,針對(duì)下半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)上方的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在下方的梯度值。
進(jìn)一步地,所述調(diào)整模塊,具體用于如果候選點(diǎn)為左方向候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將左方向候選點(diǎn)劃分為上下兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的左方向候選點(diǎn),將與該最內(nèi)側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)作為該外側(cè)組左方向邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的左方向候選點(diǎn),將與該最外側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組左方向邊界點(diǎn);如果候選點(diǎn)為右方向候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將右方向候選點(diǎn)劃分為上下兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的右方向候選點(diǎn),將與該最內(nèi)側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn)作為該外側(cè)組右方向邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的右方向候選點(diǎn),將與該最外側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組右方向邊界點(diǎn);如果候選點(diǎn)為上方候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將上方候選點(diǎn)劃分為左右兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的上方候選點(diǎn),將與該最內(nèi)側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn)作為該外側(cè)組上方邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的上方候選點(diǎn),將與該最外側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組上方邊界點(diǎn);如果候選點(diǎn)為下方候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將下方候選點(diǎn)劃分為左右兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的下方候選點(diǎn),將與該最內(nèi)側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)作為該外側(cè)組下方邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的下方候選點(diǎn),將與該最外側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組下方邊界點(diǎn)。
進(jìn)一步地,所述裝置還包括:
判斷模塊,用于判斷每個(gè)內(nèi)側(cè)分組的左方向邊界點(diǎn)是否位于同一列,如果是,觸發(fā)調(diào)整模塊。
進(jìn)一步地,所述調(diào)整模塊,還用于如果每個(gè)內(nèi)側(cè)分組的左方向邊界點(diǎn)不位于同一列,針對(duì)內(nèi)側(cè)分組中的左方向邊界點(diǎn),確定位于最內(nèi)側(cè)的左方向邊界點(diǎn),將內(nèi)側(cè)分組左方向邊界點(diǎn)更新為與該最內(nèi)側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)。
進(jìn)一步地,所述判斷模塊,還用于判斷每個(gè)內(nèi)側(cè)分組的右方向邊界點(diǎn)是否位于同一列,如果是,觸發(fā)調(diào)整模塊;判斷每個(gè)內(nèi)側(cè)分組的上方邊界點(diǎn)是否位于同一行,如果是,觸發(fā)調(diào)整模塊;判斷每個(gè)內(nèi)側(cè)分組的下方邊界點(diǎn)是否位于同一行,如果是,觸發(fā)調(diào)整模塊。
進(jìn)一步地,所述調(diào)整模塊,還用于如果每個(gè)內(nèi)側(cè)分組的右方向邊界點(diǎn)不位于同一列,針對(duì)內(nèi)側(cè)分組中的右方向邊界點(diǎn),確定位于最內(nèi)側(cè)的右方向邊界點(diǎn),將內(nèi)側(cè)分組右方向邊界點(diǎn)更新為與該最內(nèi)側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn);如果每個(gè)內(nèi)側(cè)分組的上方邊界點(diǎn)不位于同一行,針對(duì)內(nèi)側(cè)分組中的上方邊界點(diǎn),確定位于最內(nèi)側(cè)的上方邊界點(diǎn),將內(nèi)側(cè)分組上方邊界點(diǎn)更新為與該最內(nèi)側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn);如果每個(gè)內(nèi)側(cè)分組的下方邊界點(diǎn)不位于同一行,針對(duì)內(nèi)側(cè)分組中的下方邊界點(diǎn),確定位于最內(nèi)側(cè)的下方邊界點(diǎn),將內(nèi)側(cè)分組下方邊界點(diǎn)更新為與該最內(nèi)側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)。
本發(fā)明實(shí)施例提供一種qr碼模塊邊界調(diào)整的方法及裝置,所述方法包括:根據(jù)定位出的qr碼所在的區(qū)域,及該區(qū)域中每個(gè)像素點(diǎn)的灰度值,生成灰度值的梯度投影圖;根據(jù)所述梯度投影圖中的每個(gè)峰值,對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分,得到qr碼中的每個(gè)模塊;針對(duì)每個(gè)模塊,按照預(yù)設(shè)的劃分方法將該模塊劃分為多個(gè)矩形區(qū)域;針對(duì)每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn),按照預(yù)設(shè)的方法確定每個(gè)頂點(diǎn)在四個(gè)第一方向的梯度值;針對(duì)每個(gè)第一方向,根據(jù)與該第一方向?qū)?yīng)的行或列,在每行或每列中將梯度值的最大值對(duì)應(yīng)的頂點(diǎn)作為該第一方向的候選點(diǎn),并針對(duì)每個(gè)第一方向?qū)⒚總€(gè)候選點(diǎn)劃分為內(nèi)外兩個(gè)第二方向,針對(duì)每個(gè)第二方向,對(duì)候選點(diǎn)進(jìn)行調(diào)整得到每個(gè)邊界點(diǎn),將調(diào)整后的邊界點(diǎn)依次連接;將所述調(diào)整后的邊界點(diǎn)依次連接后構(gòu)成的封閉區(qū)域作為qr碼模塊所在區(qū)域。由于在本發(fā)明實(shí)施例中,通過(guò)梯度投影圖中的峰值,對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分,得到qr碼中的每個(gè)模塊,針對(duì)每個(gè)模塊,將該模塊劃分為多個(gè)矩形區(qū)域,根據(jù)每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn)在四個(gè)方向的梯度值,確定出該模塊上下左右四個(gè)方向的候選點(diǎn),并對(duì)四個(gè)方向的候選點(diǎn)進(jìn)行調(diào)整得到邊界點(diǎn),將該調(diào)整后的邊界點(diǎn)依次連接,得到該模塊的邊界,這樣就會(huì)將模塊中的噪聲過(guò)濾掉,使得在過(guò)曝,低對(duì)比度,高噪聲的環(huán)境下,可以更準(zhǔn)確的確定模塊,進(jìn)而提高了采樣模塊信息的準(zhǔn)確度和解碼的準(zhǔn)確率。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)要介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例1提供的一種qr碼模塊邊界調(diào)整過(guò)程示意圖;
圖2為本發(fā)明實(shí)施例1提供的模塊劃分示意圖;
圖3為本發(fā)明實(shí)施例2提供的qr碼所在的區(qū)域劃分示意圖;
圖4為本發(fā)明實(shí)施例3提供的模塊劃分為左右半?yún)^(qū)示意圖;
圖5為本發(fā)明實(shí)施例3提供的模塊劃分為上下半?yún)^(qū)示意圖;
圖6a-6b,圖7a-7b為本發(fā)明實(shí)施例4提供的左半?yún)^(qū)邊界調(diào)整示意圖;
圖8a-8c為本發(fā)明實(shí)施例4提供的右半?yún)^(qū)邊界調(diào)整示意圖;
圖9a-9c為本發(fā)明實(shí)施例4提供的上半?yún)^(qū)邊界調(diào)整示意圖;
圖10a-10c為本發(fā)明實(shí)施例4提供的下半?yún)^(qū)邊界調(diào)整示意圖;
圖11為本發(fā)明實(shí)施例4提供的確定模塊所在區(qū)域示意圖;
圖12為本發(fā)明實(shí)施例提供的一種qr碼模塊邊界調(diào)整裝置結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部份實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
實(shí)施例1:
圖1為本發(fā)明實(shí)施例提供的一種qr碼模塊邊界調(diào)整過(guò)程示意圖,該過(guò)程包括以下步驟:
s101:根據(jù)定位出的qr碼所在的區(qū)域,及該區(qū)域中每個(gè)像素點(diǎn)的灰度值,生成灰度值的梯度投影圖。
本發(fā)明實(shí)施例提供的qr碼模塊邊界調(diào)整的方法應(yīng)用于電子設(shè)備。所述電子設(shè)備包括pc、智能電視、相機(jī)及手機(jī)等。
所述電子設(shè)備根據(jù)快速反應(yīng)(quickresponse、qr)碼的四個(gè)頂點(diǎn),可以確定qr碼所在的區(qū)域,根據(jù)qr碼所在的區(qū)域中的每個(gè)像素點(diǎn)的灰度值,生成該qr碼所在區(qū)域在水平方向和垂直方向的灰度值的梯度投影圖。
具體的,在確定水平方向的灰度值的梯度投影圖時(shí),針對(duì)每個(gè)像素點(diǎn),可以確定與該像素點(diǎn)相鄰的位于該像素點(diǎn)左側(cè)的像素點(diǎn)的灰度值與該像素點(diǎn)的灰度值的差的絕對(duì)值,將所述絕對(duì)值作為該像素點(diǎn)的水平梯度值;當(dāng)然,也可以確定與該像素點(diǎn)相鄰的位于該像素點(diǎn)右側(cè)的像素點(diǎn)的灰度值與該像素點(diǎn)的灰度值的差的絕對(duì)值,將所述絕對(duì)值作為該像素點(diǎn)的水平梯度值,將每一列的像素點(diǎn)的水平梯度值累加得到水平方向的梯度投影圖。
在確定垂直方向的灰度值的梯度投影圖時(shí),針對(duì)每個(gè)像素點(diǎn),可以確定與該像素點(diǎn)相鄰的位于該像素點(diǎn)上方的像素點(diǎn)的灰度值與該像素點(diǎn)的灰度值的差的絕對(duì)值,將所述絕對(duì)值作為該像素點(diǎn)的垂直梯度值;當(dāng)然,也可以確定與該像素點(diǎn)相鄰的位于該像素點(diǎn)下方的像素點(diǎn)的灰度值與該像素點(diǎn)的灰度值的差的絕對(duì)值,將所述絕對(duì)值作為該像素點(diǎn)的垂直梯度值,將每一行的像素點(diǎn)的垂直梯度值累加得到垂直方向的梯度投影圖。
s102:根據(jù)所述梯度投影圖中的每個(gè)峰值,對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分,得到qr碼中的每個(gè)模塊。
所述電子設(shè)備根據(jù)預(yù)設(shè)的劃分方式和生成的水平方向和垂直方向的梯度投影圖,確定出每個(gè)范圍內(nèi)的峰值,根據(jù)每個(gè)峰值確定每個(gè)峰值在qr碼所在的區(qū)域?qū)?yīng)的位置,根據(jù)每個(gè)位置將qr碼所在的區(qū)域進(jìn)行劃分。因?yàn)樗椒较蚝痛怪狈较虻奶荻韧队皥D中記錄的是每列和每行的像素點(diǎn)的梯度值的和,因此確定的峰值是每列和每行的像素點(diǎn)的梯度值的峰值,該每列、每行在qr碼所在的區(qū)域也是對(duì)應(yīng)每列和每行的,因此將劃分后的qr碼所在的區(qū)域中將會(huì)包含每個(gè)小網(wǎng)格,將每個(gè)小網(wǎng)格作為qr碼中的每個(gè)模塊。
當(dāng)然,在對(duì)qr碼所在的區(qū)域進(jìn)行劃分時(shí),也可以根據(jù)經(jīng)驗(yàn),在水平方向的梯度投影圖確定第一設(shè)定數(shù)量的目標(biāo)列,在垂直方向的梯度投影圖上確定第二設(shè)定數(shù)量的目標(biāo)行,在qr碼所在的區(qū)域中采用每個(gè)目標(biāo)列進(jìn)行列劃分,在qr碼所在的區(qū)域中采用每個(gè)目標(biāo)行進(jìn)行行劃分。
s103:針對(duì)每個(gè)模塊,按照預(yù)設(shè)的劃分方法將該模塊劃分為多個(gè)矩形區(qū)域;針對(duì)每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn),按照預(yù)設(shè)的方法確定每個(gè)頂點(diǎn)在四個(gè)第一方向的梯度值;針對(duì)每個(gè)第一方向,根據(jù)與該第一方向?qū)?yīng)的行或列,在每行或每列中將梯度值的最大值對(duì)應(yīng)的頂點(diǎn)作為該第一方向的候選點(diǎn),并針對(duì)每個(gè)第一方向?qū)⒚總€(gè)候選點(diǎn)劃分為內(nèi)外兩個(gè)第二方向,針對(duì)每個(gè)第二方向,對(duì)候選點(diǎn)進(jìn)行調(diào)整得到每個(gè)邊界點(diǎn),將調(diào)整后的邊界點(diǎn)依次連接;將所述調(diào)整后的邊界點(diǎn)依次連接后構(gòu)成的封閉區(qū)域作為qr碼模塊所在區(qū)域。
針對(duì)得到的qr碼中的每個(gè)模塊,按照預(yù)設(shè)的劃分方法將該模塊劃分為多個(gè)矩形區(qū)域,在對(duì)每個(gè)模塊進(jìn)行劃分時(shí),可以將該模塊的長(zhǎng)進(jìn)行n等分,將該模塊的寬進(jìn)行m等分,其中所述m和n相同或不同,劃分后得到多個(gè)矩形區(qū)域,針對(duì)每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn),按照預(yù)設(shè)的方法確定每個(gè)頂點(diǎn)在上下左右四個(gè)第一方向的梯度值,其中,梯度值為與該頂點(diǎn)上下左右相鄰的頂點(diǎn)的灰度值與該頂點(diǎn)的灰度值的差的絕對(duì)值。
因?yàn)槊總€(gè)模塊基本都是正方形,因此為了使確定出的每個(gè)頂點(diǎn)在四個(gè)第一方向的梯度值更加準(zhǔn)確,可以將每個(gè)模塊的長(zhǎng)寬分別進(jìn)行n等分,即把該模塊分成n2個(gè)相同的矩形區(qū)域,得到(n+1)2個(gè)矩形區(qū)域的頂點(diǎn)。如圖2所示,對(duì)模塊的長(zhǎng)寬分別進(jìn)行7等分,即將該模塊分成了49個(gè)矩形區(qū)域,得到了64個(gè)頂點(diǎn)。針對(duì)得到的每個(gè)頂點(diǎn),按照預(yù)設(shè)的方法確定每個(gè)頂點(diǎn)在四個(gè)第一方向的梯度值。
針對(duì)每個(gè)第一方向,根據(jù)與該第一方向?qū)?yīng)的行或列,在每行或每列中將梯度值的最大值對(duì)應(yīng)的頂點(diǎn)作為該第一方向的候選點(diǎn),針對(duì)每個(gè)第一方向的候選點(diǎn),將所述候選點(diǎn)劃分到內(nèi)外兩個(gè)第二方向,其中,針對(duì)每個(gè)第二方向,對(duì)候選點(diǎn)進(jìn)行調(diào)整得到每個(gè)邊界點(diǎn),將調(diào)整后的邊界點(diǎn)依次連接,將所述調(diào)整后的邊界點(diǎn)依次連接后構(gòu)成的封閉區(qū)域作為qr碼模塊所在區(qū)域。
由于在本發(fā)明實(shí)施例中,電子設(shè)備通過(guò)梯度投影圖中的峰值,對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分,得到qr碼中的每個(gè)模塊,針對(duì)每個(gè)模塊,將該模塊劃分為多個(gè)矩形區(qū)域,根據(jù)每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn)在四個(gè)方向的梯度值,確定出該模塊上下左右四個(gè)方向的候選點(diǎn),并對(duì)四個(gè)方向的候選點(diǎn)進(jìn)行調(diào)整得到邊界點(diǎn),將該調(diào)整后的邊界點(diǎn)依次連接,得到該模塊的邊界,這樣就會(huì)將模塊中的噪聲過(guò)濾掉,使得在過(guò)曝,低對(duì)比度,高噪聲的環(huán)境下,可以更準(zhǔn)確的確定模塊,進(jìn)而提高了采樣模塊信息的準(zhǔn)確度和解碼的準(zhǔn)確率。
實(shí)施例2:
在上述實(shí)施例的基礎(chǔ)上,在本發(fā)明實(shí)施例中,所述根據(jù)定位出的qr碼所在的區(qū)域,及該區(qū)域中每個(gè)像素點(diǎn)的灰度值,生成灰度值的梯度投影圖包括:
針對(duì)每個(gè)像素點(diǎn),確定與該像素點(diǎn)左右相鄰的兩個(gè)像素點(diǎn)的灰度值的差的絕對(duì)值,將所述絕對(duì)值作為該像素點(diǎn)的水平梯度值,將每一列的像素點(diǎn)的水平梯度值累加得到水平方向的梯度投影圖;
針對(duì)每個(gè)像素點(diǎn),確定與該像素點(diǎn)上下相鄰的兩個(gè)像素點(diǎn)的灰度值的差的絕對(duì)值,將所述絕對(duì)值作為該像素點(diǎn)的垂直梯度值,將每一行的像素點(diǎn)的垂直梯度值累加得到垂直方向的梯度投影圖。
將qr碼所在的區(qū)域在水平方向和垂直方向,分別生成水平方向的投影圖和垂直方向的梯度投影圖。針對(duì)水平方向的每個(gè)像素點(diǎn),確定與該像素點(diǎn)左右相鄰的兩個(gè)像素點(diǎn)的灰度值的差,并取絕對(duì)值,將該絕對(duì)值作為該像素點(diǎn)在水平方向的梯度值。例如某個(gè)像素點(diǎn)左右相鄰的兩個(gè)像素點(diǎn)的灰度值分別為0和10,則該像素點(diǎn)在水平方向的梯度值為10。如果像素點(diǎn)是水平方向的第一個(gè)像素點(diǎn)或最后一個(gè)像素點(diǎn),可以將該像素點(diǎn)及與該像素點(diǎn)水平相鄰的像素點(diǎn)的灰度值的差的絕對(duì)值,作為該像素點(diǎn)在水平方向的梯度值。以此方法得到qr碼所在的區(qū)域的每個(gè)像素點(diǎn)在水平方向的梯度值后,將每一列的像素點(diǎn)的梯度值累加求和,得到在水平方向該列的像素點(diǎn)的梯度值的和,根據(jù)每一列在水平方向的像素點(diǎn)的梯度值的和生成水平方向的梯度投影圖。
針對(duì)垂直方向的每個(gè)像素點(diǎn),確定與該像素點(diǎn)上下相鄰的兩個(gè)像素點(diǎn)的灰度值的差,并取絕對(duì)值,將該絕對(duì)值作為該像素點(diǎn)在垂直方向的梯度值。例如某個(gè)像素點(diǎn)上下相鄰的兩個(gè)像素點(diǎn)的灰度值分別為255和10,則該像素點(diǎn)在垂直方向的的梯度值為245。如果像素點(diǎn)是垂直方向的第一個(gè)像素點(diǎn)或最后一個(gè)像素點(diǎn),可以將該像素點(diǎn)及與該像素點(diǎn)垂直相鄰的像素點(diǎn)的灰度值的差的絕對(duì)值,作為該像素點(diǎn)在垂直方向的梯度值。以此方法得到qr碼所在的區(qū)域的每個(gè)像素點(diǎn)在垂直方向的梯度值后,將每一行的像素點(diǎn)的梯度值累加求和,得到在垂直方向該行的像素點(diǎn)的梯度值的和,根據(jù)每一行在垂直方向的像素點(diǎn)的梯度值的和生成垂直方向的梯度投影圖。
在生成水平和垂直方向的梯度投影圖后,所述根據(jù)所述梯度投影圖中的每個(gè)峰值,對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分包括:
將所述水平方向的梯度投影圖的水平方向劃分為第一數(shù)量的范圍區(qū)間,識(shí)別每個(gè)第一范圍區(qū)間中梯度值的峰值,確定每個(gè)峰值所對(duì)應(yīng)的每個(gè)目標(biāo)列,在所述qr碼所在的區(qū)域中采用每個(gè)目標(biāo)列進(jìn)行列劃分;
將垂直方向的梯度投影圖的垂直方向劃分為第二數(shù)量的范圍區(qū)間,識(shí)別每個(gè)第二范圍區(qū)間中梯度值的峰值,確定每個(gè)峰值所對(duì)應(yīng)的每個(gè)目標(biāo)行,在所述qr碼所在的區(qū)域中采用每個(gè)目標(biāo)行進(jìn)行行劃分。
根據(jù)生成的梯度投影圖,可以確定梯度投影圖中的每個(gè)峰值,進(jìn)而根據(jù)所述峰值對(duì)應(yīng)的qr碼所在的區(qū)域中的位置對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分。
由于qr碼是由多個(gè)黑色和白色的模塊組成的,以上述方法生成水平方向和垂直方向的梯度投影圖,梯度投影圖中反映的是每一行像素點(diǎn)或每一列像素點(diǎn)的梯度值的和。比如以模塊中心的一列像素點(diǎn)為例進(jìn)行說(shuō)明,該像素點(diǎn)左右相鄰的兩個(gè)像素點(diǎn)的灰度值相同,如果是黑色模塊,則灰度值都為0,如果是白色模塊,灰度值都為255,因此,該像素點(diǎn)的梯度值為0。而處于黑色模塊和白色模塊邊界處的像素點(diǎn),該像素點(diǎn)左右相鄰的像素點(diǎn)的灰度值為0和255,因此,該像素點(diǎn)的梯度值為255。因此可以根據(jù)水平方向的梯度投影圖和垂直方向的梯度投影圖中的峰值,查找每個(gè)模塊的邊界。
具體的,針對(duì)生成的水平方向的梯度投影圖,電子設(shè)備將該水平方向的梯度投影圖的水平方向劃分為第一數(shù)量的范圍區(qū)間,針對(duì)每個(gè)范圍區(qū)間,可以識(shí)別出其中的梯度值的峰值,由于水平方向的梯度投影圖是根據(jù)qr碼所在的區(qū)域中的每一列像素點(diǎn)的梯度值累加求和得到的,水平方向的梯度投影圖中記錄的是每列的像素點(diǎn)的梯度值的和,因此針對(duì)每個(gè)范圍區(qū)間識(shí)別出的峰值是每列的像素點(diǎn)的梯度值的峰值,該每列在qr碼所在的區(qū)域也是對(duì)應(yīng)每列的,將每個(gè)范圍區(qū)間中的峰值對(duì)應(yīng)的qr碼所在的區(qū)域中的列作為目標(biāo)列,在所述qr碼所在的區(qū)域中采用每個(gè)目標(biāo)列進(jìn)行列劃分。
針對(duì)生成的垂直方向的梯度投影圖,電子設(shè)備將該垂直方向的梯度投影圖的垂直方向劃分為第二數(shù)量的范圍區(qū)間,針對(duì)每個(gè)范圍區(qū)間,可以識(shí)別出其中的梯度值的峰值,由于垂直方向的梯度投影圖是根據(jù)qr碼所在的區(qū)域中的每一行像素點(diǎn)的梯度值累加求和得到的,垂直方向的梯度投影圖中記錄的是每行的像素點(diǎn)的梯度值的和,因此針對(duì)每個(gè)范圍區(qū)間識(shí)別出的峰值是每行的像素點(diǎn)的梯度值的峰值,該每行在qr碼所在的區(qū)域也是對(duì)應(yīng)每行的,將每個(gè)范圍區(qū)間中的峰值對(duì)應(yīng)的qr碼所在的區(qū)域中的行作為目標(biāo)行,在所述qr碼所在的區(qū)域中采用每個(gè)目標(biāo)行進(jìn)行行劃分。
如圖3所示,根據(jù)水平方向和垂直方向梯度投影圖中的每個(gè)峰值,在所述qr碼所在的區(qū)域中采用每個(gè)目標(biāo)列進(jìn)行列劃分,在所述qr碼所在的區(qū)域中采用每個(gè)目標(biāo)行進(jìn)行行劃分,劃分后的qr碼所在的區(qū)域中將會(huì)包含每個(gè)小網(wǎng)格,將每個(gè)小網(wǎng)格作為qr碼中的每個(gè)模塊。
由于在本發(fā)明實(shí)施例中,根據(jù)qr碼所在的區(qū)域中的每個(gè)像素點(diǎn)在水平方向和垂直方向的梯度值,生成水平方向和垂直方向的梯度投影圖,根據(jù)水平方向和垂直方向的梯度投影圖中的每個(gè)峰值,將qr碼所在的區(qū)域劃分為多個(gè)行和多個(gè)列,進(jìn)而得到qr碼中的每個(gè)模塊,因此使得根據(jù)所述梯度投影圖中的每個(gè)峰值,對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分,得到qr碼中的每個(gè)模塊更加準(zhǔn)確。
實(shí)施例3:
在上述實(shí)施例的基礎(chǔ)上,為了使確定出的每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn)在四個(gè)第一方向的梯度值更加準(zhǔn)確,在本發(fā)明實(shí)施例中,所述針對(duì)每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn),按照預(yù)設(shè)的方法確定每個(gè)頂點(diǎn)在四個(gè)第一方向的梯度值包括:
將每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn)劃分到左右兩個(gè)半?yún)^(qū),將左方向作為第一方向,針對(duì)左半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)右側(cè)的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在左方向的梯度值;將右方向作為第一方向,針對(duì)右半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)左側(cè)的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在右方向的梯度值;
將每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn)劃分到上下兩個(gè)半?yún)^(qū),將上方作為第一方向,針對(duì)上半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)下方的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在上方的梯度值;將下方作為第一方向,針對(duì)下半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)上方的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在下方的梯度值。
電子設(shè)備針對(duì)得到的qr碼中的每個(gè)模塊,按照預(yù)設(shè)的劃分方法將該模塊劃分為多個(gè)矩形區(qū)域。例如對(duì)模塊的長(zhǎng)寬分別進(jìn)行6等分,即將該模塊分成了36個(gè)矩形區(qū)域,得到了49個(gè)頂點(diǎn)。將得到的49個(gè)頂點(diǎn)任意劃分為左右兩個(gè)半?yún)^(qū),為了使確定的候選點(diǎn)更加準(zhǔn)確,在劃分時(shí)可以盡量使得左右半?yún)^(qū)的頂點(diǎn)的個(gè)數(shù)差最小,例如劃分后左半?yún)^(qū)可以為28個(gè)頂點(diǎn),右半?yún)^(qū)為21個(gè)頂點(diǎn)。為了使確定的候選點(diǎn)更加準(zhǔn)確,可以對(duì)模塊的長(zhǎng)寬分別進(jìn)行7等分,即將該模塊分成了49個(gè)矩形區(qū)域,得到了64個(gè)頂點(diǎn)。將得到的64個(gè)頂點(diǎn)平均劃分為左右兩個(gè)半?yún)^(qū),如圖4所示,左右半?yún)^(qū)分別包含32個(gè)頂點(diǎn)。
針對(duì)位于左半?yún)^(qū)中的32個(gè)頂點(diǎn),將左方向作為第一方向,需要確定位于左半?yún)^(qū)的每個(gè)頂點(diǎn)的左方向的梯度值,具體在確定時(shí),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)右側(cè)的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在左方向的梯度值。例如圖4中的第一行的由左到右的8個(gè)頂點(diǎn)的灰度值依次為250,240,245,249,254,248,245,250,根據(jù)上述確定每個(gè)頂點(diǎn)的梯度值的方法,則針對(duì)位于左半?yún)^(qū)的頂點(diǎn),第一行的由左到右的四個(gè)頂點(diǎn)的左方向的梯度值依次為10,5,4,6。針對(duì)位于右半?yún)^(qū)的32個(gè)頂點(diǎn),將右方向作為第一方向,需要確定位于右半?yún)^(qū)的每個(gè)頂點(diǎn)的右方向的梯度值,具體在確定時(shí),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)左側(cè)的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在右方向的梯度值。如圖4中的第一行的由左到右的8個(gè)頂點(diǎn)的灰度值,針對(duì)位于右半?yún)^(qū)的頂點(diǎn),第一行的由右到左的四個(gè)頂點(diǎn)的右方向的梯度值依次為5,3,6,5。
在劃分上下半?yún)^(qū)時(shí),如果是49個(gè)頂點(diǎn),可以將該49個(gè)頂點(diǎn)任意劃分為上下兩個(gè)半?yún)^(qū),為了使確定的候選點(diǎn)更加準(zhǔn)確,在劃分時(shí)可以盡量使得上下半?yún)^(qū)的頂點(diǎn)的個(gè)數(shù)差最小,例如劃分后上半?yún)^(qū)可以為28個(gè)頂點(diǎn),下半?yún)^(qū)為21個(gè)頂點(diǎn)。為了使確定的候選點(diǎn)更加準(zhǔn)確,還以本發(fā)明實(shí)施例得到64個(gè)頂點(diǎn)進(jìn)行說(shuō)明,將得到的64個(gè)頂點(diǎn)平均劃分為上下兩個(gè)半?yún)^(qū),如圖5所示,上下半?yún)^(qū)分別包含32個(gè)頂點(diǎn)。
針對(duì)位于上半?yún)^(qū)中的32個(gè)頂點(diǎn),將上方作為第一方向,需要確定位于上半?yún)^(qū)的每個(gè)頂點(diǎn)的上方的梯度值,具體在確定時(shí),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)下側(cè)的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在上方的梯度值。例如圖5中的第一列的由上到下的8個(gè)頂點(diǎn)的灰度值依次為250,245,248,249,253,248,248,252,根據(jù)上述確定每個(gè)頂點(diǎn)的梯度值的方法,則針對(duì)位于上半?yún)^(qū)的頂點(diǎn),第一列的由上到下的四個(gè)頂點(diǎn)的上方的梯度值依次為5,3,1,4。針對(duì)位于下半?yún)^(qū)的32個(gè)頂點(diǎn),將下方作為第一方向,需要確定位于下半?yún)^(qū)的每個(gè)頂點(diǎn)的下方的梯度值,具體在確定時(shí),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)上側(cè)的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在下方的梯度值,如圖5中的第一列的由上到下的8個(gè)頂點(diǎn)的灰度值,針對(duì)位于下半?yún)^(qū)的頂點(diǎn),第一列的由下到上的四個(gè)頂點(diǎn)的下方的梯度值依次為4,0,5,4。
針對(duì)上述每個(gè)半?yún)^(qū)中,確定的對(duì)應(yīng)的每個(gè)頂點(diǎn)在對(duì)應(yīng)的第一方向的梯度值,針對(duì)每個(gè)第一方向,根據(jù)與該第一方向?qū)?yīng)的行或列,在每行或每列中將梯度值的最大值對(duì)應(yīng)的頂點(diǎn)作為該第一方向的候選點(diǎn)。具體的當(dāng)左方向或右方向?yàn)榈谝环较驎r(shí),在該第一方向?qū)?yīng)的每行中,將梯度值的最大值對(duì)應(yīng)的頂點(diǎn)作為該第一方向的候選點(diǎn),當(dāng)上或下為第一方向時(shí),在該第一方向?qū)?yīng)的每列中,將梯度值的最大值對(duì)應(yīng)的頂點(diǎn)作為該第一方向的候選點(diǎn)。
如上所述,針對(duì)位于左方向的頂點(diǎn),第一行的左方向的梯度值由左到右依次為10,5,4,6,因此針對(duì)位于左方向的頂點(diǎn),由左到右第一個(gè)頂點(diǎn)即為第一行的候選點(diǎn);針對(duì)位于右方向的頂點(diǎn),第一行的右方向的梯度值由右到左依次為5,3,6,5,因此針對(duì)位于右方向的頂點(diǎn),由右到左第三個(gè)頂點(diǎn)即為第一行的候選點(diǎn);針對(duì)位于上方的頂點(diǎn),第一列的上方的梯度值由上到下依次為5,3,1,4,因此針對(duì)位于上方的頂點(diǎn),由上到下第一個(gè)頂點(diǎn)即為第一列的候選點(diǎn);針對(duì)位于下方的頂點(diǎn),第一列的下方的梯度值由下到上依次為4,0,5,4,因此針對(duì)位于下方的頂點(diǎn),由下到上第三個(gè)頂點(diǎn)即為第一列的候選點(diǎn)。
另外,當(dāng)針對(duì)于每個(gè)第一方向,該第一方向的同一行或同一列的梯度值的最大值有至少兩個(gè)時(shí),可以將至少兩個(gè)梯度值的最大值對(duì)應(yīng)的頂點(diǎn)都作為候選點(diǎn),也可以任意選取其中的一個(gè)梯度值的最大值對(duì)應(yīng)的頂點(diǎn)作為候選點(diǎn),為了提高確定的候選點(diǎn)的準(zhǔn)確性,可以取相對(duì)靠近于該模塊中心的頂點(diǎn)作為候選點(diǎn)。例如,針對(duì)位于左方向第一行的頂點(diǎn),計(jì)算得出梯度值由左到右依次為3,7,7,5,即第一行由左到右第二個(gè)和第三個(gè)頂點(diǎn)的左方向的梯度值都為最大值,由于該第三個(gè)頂點(diǎn)相對(duì)第二個(gè)頂點(diǎn)靠近于該模塊的中心,因此取第三個(gè)頂點(diǎn)作為位于左方向第一行的候選點(diǎn)。
實(shí)施例4:
在上述實(shí)施例的基礎(chǔ)上,在針對(duì)每個(gè)第一方向確定出候選點(diǎn)后,針對(duì)每個(gè)第一方向?qū)⒚總€(gè)候選點(diǎn)劃分為內(nèi)外兩個(gè)第二方向,針對(duì)每個(gè)第二方向,對(duì)候選點(diǎn)進(jìn)行調(diào)整得到每個(gè)邊界點(diǎn)。為了使確定的邊界點(diǎn)更加準(zhǔn)確,在本發(fā)明實(shí)施例中,所述針對(duì)每個(gè)第二方向,對(duì)候選點(diǎn)進(jìn)行調(diào)整得到每個(gè)邊界點(diǎn)包括:
如果候選點(diǎn)為左方向候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將左方向候選點(diǎn)劃分為上下兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的左方向候選點(diǎn),將與該最內(nèi)側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)作為該外側(cè)組左方向邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的左方向候選點(diǎn),將與該最外側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組左方向邊界點(diǎn);
如果候選點(diǎn)為右方向候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將右方向候選點(diǎn)劃分為上下兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的右方向候選點(diǎn),將與該最內(nèi)側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn)作為該外側(cè)組右方向邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的右方向候選點(diǎn),將與該最外側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組右方向邊界點(diǎn);
如果候選點(diǎn)為上方候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將上方候選點(diǎn)劃分為左右兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的上方候選點(diǎn),將與該最內(nèi)側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn)作為該外側(cè)組上方邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的上方候選點(diǎn),將與該最外側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組上方邊界點(diǎn);
如果候選點(diǎn)為下方候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將下方候選點(diǎn)劃分為左右兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的下方候選點(diǎn),將與該最內(nèi)側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)作為該外側(cè)組下方邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的下方候選點(diǎn),將與該最外側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組下方邊界點(diǎn)。
因?yàn)楸景l(fā)明實(shí)施例中識(shí)別出的每個(gè)第一方向的候選點(diǎn)為可能位于邊界上的點(diǎn),該每個(gè)第一方向的候選點(diǎn),其可能構(gòu)成qr碼模塊所在區(qū)域,因此針對(duì)每個(gè)第一方向的候選點(diǎn),可以將其作為qr碼模塊所在區(qū)域的邊界,從而可以根據(jù)每個(gè)第一方向的候選點(diǎn),確定qr碼模塊內(nèi)的區(qū)域和qr碼模塊外的區(qū)域,因此將qr碼模塊內(nèi)的區(qū)域?qū)?yīng)的方向作為候選點(diǎn)的內(nèi)側(cè),qr碼模塊外的區(qū)域?qū)?yīng)的方向作為該候選點(diǎn)的外側(cè)。
如果第一方向?yàn)樽蠓较?,確定左方向的候選點(diǎn)的內(nèi)外第二方向包括,將該候選點(diǎn)的左側(cè)作為外方向,將其右側(cè)作為內(nèi)方向;如果第一方向?yàn)橛曳较颍槾_定右方向的候選點(diǎn)的內(nèi)外兩個(gè)第二方向包括,將該候選點(diǎn)的右側(cè)作為外方向,將其左側(cè)作為內(nèi)方向;如果第一方向?yàn)樯戏剑_定上方的候選點(diǎn)的內(nèi)外兩個(gè)第二方向包括:將該候選點(diǎn)的上側(cè)作為外方向,將其下側(cè)作為內(nèi)方向;如果第一方向?yàn)橄路?,確定下方的候選點(diǎn)的內(nèi)外兩個(gè)第二方向包括:將該候選點(diǎn)的下側(cè)作為外方向,將其上側(cè)作為內(nèi)方向。
具體的,如果候選點(diǎn)為左方向候選點(diǎn),以一個(gè)具體的例子對(duì)候選點(diǎn)的調(diào)整過(guò)程進(jìn)行說(shuō)明,如圖6a所示,圖中左半?yún)^(qū)有32個(gè)頂點(diǎn),其中黑色的點(diǎn)為候選點(diǎn),根據(jù)上述實(shí)施例提供的方法,確定出左半?yún)^(qū)的候選點(diǎn)由左到右分別為,第一行第一個(gè)頂點(diǎn)11,第二行第四個(gè)頂點(diǎn)24,第三行第二個(gè)頂點(diǎn)32,第四行第三個(gè)頂點(diǎn)43,第五行第四個(gè)頂點(diǎn)54,第六行第二個(gè)頂點(diǎn)62,第七行第二個(gè)頂點(diǎn)72,第八行第三個(gè)頂點(diǎn)83。將左方向的八個(gè)候選點(diǎn)分為四個(gè)組,其中,第一行和第二行的候選點(diǎn)為第一外側(cè)組,第三行和第四行的候選點(diǎn)為第一內(nèi)側(cè)分組,第五行和第六行的候選點(diǎn)為第二內(nèi)側(cè)分組,第七行和第八行的候選點(diǎn)為第二外側(cè)組。
針對(duì)第一外側(cè)組和第二外側(cè)組,識(shí)別每個(gè)外側(cè)組中位于最內(nèi)側(cè)的候選點(diǎn),將與該最內(nèi)側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)作為該外側(cè)組邊界點(diǎn)。根據(jù)此原則,第一外側(cè)組中,最內(nèi)側(cè)的候選點(diǎn)為第二行的第四個(gè)頂點(diǎn)24,因此將第一行的候選點(diǎn)調(diào)整到第四個(gè)頂點(diǎn)14,第二外側(cè)組中,最內(nèi)側(cè)的候選點(diǎn)為第八行的第三個(gè)頂點(diǎn)83,因此將第七行的候選點(diǎn)調(diào)整到第三個(gè)頂點(diǎn)73。針對(duì)第一內(nèi)側(cè)分組和第二內(nèi)側(cè)分組,識(shí)別每個(gè)內(nèi)側(cè)分組中位于最外側(cè)的候選點(diǎn),將與該最外側(cè)的候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組邊界點(diǎn),根據(jù)此原則,第一內(nèi)側(cè)分組中,最外側(cè)的候選點(diǎn)為第三行的第二個(gè)頂點(diǎn)32,因此將第四行的候選點(diǎn)調(diào)整到第二個(gè)頂點(diǎn)42,第二內(nèi)側(cè)分組中,最外側(cè)的候選點(diǎn)為第六行的第二個(gè)頂點(diǎn)62,因此將第五行的候選點(diǎn)調(diào)整到第二個(gè)頂點(diǎn)52。針對(duì)左方向,對(duì)候選點(diǎn)進(jìn)行調(diào)整后的得到的邊界點(diǎn)如圖6b所示,其中黑色的點(diǎn)為邊界點(diǎn)。
內(nèi)側(cè)組可以包含一個(gè)內(nèi)側(cè)分組,也可以包含兩個(gè)以上的內(nèi)側(cè)分組,如果包含兩個(gè)以上的內(nèi)側(cè)分組,在本發(fā)明實(shí)施例中,兩個(gè)以上的內(nèi)側(cè)分組中的候選點(diǎn)調(diào)整后得到的邊界點(diǎn)有可能不位于同一列,因此,為了進(jìn)一步的保證調(diào)整后的邊界點(diǎn)的準(zhǔn)確性,在本實(shí)施例中,所述將與該最外側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組左方向邊界點(diǎn)之前,所述方法還包括:
判斷每個(gè)內(nèi)側(cè)分組的左方向邊界點(diǎn)是否位于同一列,如果是,進(jìn)行后續(xù)步驟。
如果每個(gè)內(nèi)側(cè)分組的左方向邊界點(diǎn)不位于同一列,所述方法還包括:
針對(duì)內(nèi)側(cè)分組中的左方向邊界點(diǎn),確定位于最內(nèi)側(cè)的左方向邊界點(diǎn),將內(nèi)側(cè)分組左方向邊界點(diǎn)更新為與該最內(nèi)側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)。
如圖7a所示,將候選點(diǎn)調(diào)整后,第一內(nèi)側(cè)分組的邊界點(diǎn)位于由左到右第三列,分別為頂點(diǎn)33和43,第二內(nèi)側(cè)分組的邊界點(diǎn)位于由左到右第二列,分別為頂點(diǎn)52和62,此時(shí)兩個(gè)內(nèi)側(cè)分組的左方向邊界點(diǎn)不位于同一列,則確定位于最內(nèi)側(cè)的左方向邊界點(diǎn),將內(nèi)側(cè)分組左方向邊界點(diǎn)更新為與該最內(nèi)側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn),即,將第二內(nèi)側(cè)分組中的第三列的頂點(diǎn)53和63更新為第二內(nèi)測(cè)分組的邊界點(diǎn),更新后得到的邊界點(diǎn)如圖7b所示。
具體的,如果候選點(diǎn)為右方向候選點(diǎn),以一個(gè)具體的例子對(duì)候選點(diǎn)的調(diào)整過(guò)程進(jìn)行說(shuō)明,如圖8a所示,圖中右半?yún)^(qū)有32個(gè)頂點(diǎn),根據(jù)上述實(shí)施例提供的方法,確定出右半?yún)^(qū)的候選點(diǎn)由右到左分別為,第一行第二個(gè)頂點(diǎn)17,第二行第一個(gè)頂點(diǎn)28,第三行第三個(gè)頂點(diǎn)36,第四行第四個(gè)頂點(diǎn)45,第五行第二個(gè)頂點(diǎn)57,第六行第三個(gè)頂點(diǎn)66,第七行第三個(gè)頂點(diǎn)76,第八行第一個(gè)頂點(diǎn)88。將右方向的八個(gè)候選點(diǎn)分為四個(gè)組,其中,第一行和第二行的候選點(diǎn)為第一外側(cè)組,第三行和第四行的候選點(diǎn)為第一內(nèi)側(cè)分組,第五行和第六行的候選點(diǎn)為第二內(nèi)側(cè)分組,第七行和第八行的候選點(diǎn)為第二外側(cè)組。
針對(duì)第一外側(cè)組和第二外側(cè)組,識(shí)別每個(gè)外側(cè)組中位于最內(nèi)側(cè)的候選點(diǎn),將與該最內(nèi)側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn)作為該外側(cè)組邊界點(diǎn),根據(jù)此原則,第一外側(cè)組中,最內(nèi)側(cè)的候選點(diǎn)為第一行的第二個(gè)頂點(diǎn)17,因此將第二行的候選點(diǎn)調(diào)整到第二個(gè)頂點(diǎn)27,第二外側(cè)組中,最內(nèi)側(cè)的候選點(diǎn)為第七行的第三個(gè)頂點(diǎn)76,因此將第八行的候選點(diǎn)調(diào)整到第三個(gè)頂點(diǎn)86。針對(duì)第一內(nèi)側(cè)分組和第二內(nèi)側(cè)分組,識(shí)別每個(gè)內(nèi)側(cè)分組中位于最外側(cè)的候選點(diǎn),將與該最外側(cè)的候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組邊界點(diǎn),根據(jù)此原則,第一內(nèi)側(cè)分組中,最外側(cè)的候選點(diǎn)為第三行的第三個(gè)頂點(diǎn)36,因此將第四行的候選點(diǎn)調(diào)整到第三個(gè)頂點(diǎn)46,第二內(nèi)側(cè)分組中,最外側(cè)的候選點(diǎn)為第五行的第二個(gè)頂點(diǎn)57,因此將第六行的候選點(diǎn)調(diào)整到第二個(gè)頂點(diǎn)67。針對(duì)右方向,對(duì)候選點(diǎn)進(jìn)行調(diào)整后的得到的邊界點(diǎn)如圖8b所示。
內(nèi)側(cè)組可以包含一個(gè)內(nèi)側(cè)分組,也可以包含兩個(gè)以上的內(nèi)側(cè)分組,如果包含兩個(gè)以上的內(nèi)側(cè)分組,在本發(fā)明實(shí)施例中,兩個(gè)以上的內(nèi)側(cè)分組中的候選點(diǎn)調(diào)整后得到的邊界點(diǎn)有可能不位于同一列,因此,為了進(jìn)一步的保證調(diào)整后的邊界點(diǎn)的準(zhǔn)確性,在本實(shí)施例中,所述將與該最外側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組右方向邊界點(diǎn)之前,所述方法還包括:
判斷每個(gè)內(nèi)側(cè)分組的右方向邊界點(diǎn)是否位于同一列,如果是,進(jìn)行后續(xù)步驟。
如果每個(gè)內(nèi)側(cè)分組的右方向邊界點(diǎn)不位于同一列,所述方法還包括:
針對(duì)內(nèi)側(cè)分組中的右方向邊界點(diǎn),確定位于最內(nèi)側(cè)的右方向邊界點(diǎn),將內(nèi)側(cè)分組右方向邊界點(diǎn)更新為與該最內(nèi)側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn)。
如圖8b所示,將候選點(diǎn)調(diào)整后,第一內(nèi)側(cè)分組的邊界點(diǎn)位于由右到左第三列,分別為頂點(diǎn)36和46,第二內(nèi)側(cè)分組的邊界點(diǎn)位于由右到左第二列,分別為頂點(diǎn)57和67,此時(shí)兩個(gè)內(nèi)側(cè)分組的右方向邊界點(diǎn)不位于同一列,則確定位于最內(nèi)側(cè)的右方向邊界點(diǎn),將內(nèi)側(cè)分組右方向邊界點(diǎn)更新為與該最內(nèi)側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn),即,將第二內(nèi)側(cè)分組中的第三列的頂點(diǎn)56和66更新為第二內(nèi)測(cè)分組的邊界點(diǎn),更新后得到的邊界點(diǎn)如圖8c所示。
具體的,如果候選點(diǎn)為上方候選點(diǎn),以一個(gè)具體的例子對(duì)候選點(diǎn)的調(diào)整過(guò)程進(jìn)行說(shuō)明,如圖9a所示,圖中上半?yún)^(qū)有32個(gè)頂點(diǎn),根據(jù)上述實(shí)施例提供的方法,確定出上半?yún)^(qū)的候選點(diǎn)由上到下分別為,第一列第一個(gè)頂點(diǎn)11,第二列第三個(gè)頂點(diǎn)32,第三列第四個(gè)頂點(diǎn)43,第四列第三個(gè)頂點(diǎn)34,第五列第三個(gè)頂點(diǎn)35,第六列第二個(gè)頂點(diǎn)26,第七列第二個(gè)頂點(diǎn)27,第八列第四個(gè)頂點(diǎn)48。將上方的八個(gè)候選點(diǎn)分為四個(gè)組,其中,第一列和第二列的候選點(diǎn)為第一外側(cè)組,第三列和第四列的候選點(diǎn)為第一內(nèi)側(cè)分組,第五列和第六列的候選點(diǎn)為第二內(nèi)側(cè)分組,第七列和第八列的候選點(diǎn)為第二外側(cè)組。
針對(duì)第一外側(cè)組和第二外側(cè)組,識(shí)別每個(gè)外側(cè)組中位于最內(nèi)側(cè)的候選點(diǎn),將與該最內(nèi)側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn)作為該外側(cè)組邊界點(diǎn),根據(jù)此原則,第一外側(cè)組中,最內(nèi)側(cè)的候選點(diǎn)為第二列的第三個(gè)頂點(diǎn)32,因此將第一列的候選點(diǎn)調(diào)整到第三個(gè)頂點(diǎn)31,第二外側(cè)組中,最內(nèi)側(cè)的候選點(diǎn)為第八列的第四個(gè)頂點(diǎn)48,因此將第七列的候選點(diǎn)調(diào)整到第四個(gè)頂點(diǎn)47。針對(duì)第一內(nèi)側(cè)分組和第二內(nèi)側(cè)分組,識(shí)別每個(gè)內(nèi)側(cè)分組中位于最外側(cè)的候選點(diǎn),將與該最外側(cè)的候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組邊界點(diǎn),根據(jù)此原則,第一內(nèi)側(cè)分組中,最外側(cè)的候選點(diǎn)為第四列的第三個(gè)頂點(diǎn)34,因此將第三列的候選點(diǎn)調(diào)整到第三個(gè)頂點(diǎn)33,第二內(nèi)側(cè)分組中,最外側(cè)的候選點(diǎn)為第六列的第二個(gè)頂點(diǎn)26,因此將第五列的候選點(diǎn)調(diào)整到第二個(gè)頂點(diǎn)25。針對(duì)上方,對(duì)候選點(diǎn)進(jìn)行調(diào)整后的得到的邊界點(diǎn)如圖9b所示。
內(nèi)側(cè)組可以包含一個(gè)內(nèi)側(cè)分組,也可以包含兩個(gè)以上的內(nèi)側(cè)分組,如果包含兩個(gè)以上的內(nèi)側(cè)分組,在本發(fā)明實(shí)施例中,兩個(gè)以上的內(nèi)側(cè)分組中的候選點(diǎn)調(diào)整后得到的邊界點(diǎn)有可能不位于同一行,因此,為了進(jìn)一步的保證調(diào)整后的邊界點(diǎn)的準(zhǔn)確性,在本實(shí)施例中,所述將與該最外側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組上方邊界點(diǎn)之前,所述方法還包括:
判斷每個(gè)內(nèi)側(cè)分組的上方邊界點(diǎn)是否位于同一行,如果是,進(jìn)行后續(xù)步驟。
如果每個(gè)內(nèi)側(cè)分組的上方邊界點(diǎn)不位于同一行,所述方法還包括:
針對(duì)內(nèi)側(cè)分組中的上方邊界點(diǎn),確定位于最內(nèi)側(cè)的上方邊界點(diǎn),將內(nèi)側(cè)分組上方邊界點(diǎn)更新為與該最內(nèi)側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn)。
如圖9b所示,將候選點(diǎn)調(diào)整后,第一內(nèi)側(cè)分組的邊界點(diǎn)位于由上到下第三行,分別為頂點(diǎn)33和34,第二內(nèi)側(cè)分組的邊界點(diǎn)位于由上到下第二行,分別為25和26,此時(shí)兩個(gè)內(nèi)側(cè)分組的上方邊界點(diǎn)不位于同一行,則確定位于最內(nèi)側(cè)的上方邊界點(diǎn),將內(nèi)側(cè)分組上方邊界點(diǎn)更新為與該最內(nèi)側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn),即,將第二內(nèi)側(cè)分組中的第三行的頂點(diǎn)35和36更新為第二內(nèi)測(cè)分組的邊界點(diǎn),更新后得到的邊界點(diǎn)如圖9c所示。
具體的,如果候選點(diǎn)為下方候選點(diǎn),以一個(gè)具體的例子對(duì)候選點(diǎn)的調(diào)整過(guò)程進(jìn)行說(shuō)明,如圖10a所示,圖中下半?yún)^(qū)有32個(gè)頂點(diǎn),根據(jù)上述實(shí)施例提供的方法,確定出下半?yún)^(qū)的候選點(diǎn)由下到上分別為,第一列第三個(gè)頂點(diǎn)61,第二列第二個(gè)頂點(diǎn)72,第三列第四個(gè)頂點(diǎn)53,第四列第二個(gè)頂點(diǎn)74,第五列第三個(gè)頂點(diǎn)65,第六列第一個(gè)頂點(diǎn)86,第七列第一個(gè)頂點(diǎn)87,第八列第三個(gè)頂點(diǎn)68。將上方的八個(gè)候選點(diǎn)分為四個(gè)組,其中,第一列和第二列的候選點(diǎn)為第一外側(cè)組,第三列和第四列的候選點(diǎn)為第一內(nèi)側(cè)分組,第五列和第六列的候選點(diǎn)為第二內(nèi)側(cè)分組,第七列和第八列的候選點(diǎn)為第二外側(cè)組。
針對(duì)第一外側(cè)組和第二外側(cè)組,識(shí)別每個(gè)外側(cè)組中位于最內(nèi)側(cè)的候選點(diǎn),將與該最內(nèi)側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)作為該外側(cè)組邊界點(diǎn),根據(jù)此原則,第一外側(cè)組中,最內(nèi)側(cè)的候選點(diǎn)為第一列的第三個(gè)頂點(diǎn)61,因此將第二列的候選點(diǎn)調(diào)整到第三個(gè)頂點(diǎn)62,第二外側(cè)組中,最內(nèi)側(cè)的候選點(diǎn)為第八列的第三個(gè)頂點(diǎn)68,因此將第七列的候選點(diǎn)調(diào)整到第三個(gè)頂點(diǎn)67。針對(duì)第一內(nèi)側(cè)分組和第二內(nèi)側(cè)分組,識(shí)別每個(gè)內(nèi)側(cè)分組中位于最外側(cè)的候選點(diǎn),將與該最外側(cè)的候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組邊界點(diǎn),根據(jù)此原則,第一內(nèi)側(cè)分組中,最外側(cè)的候選點(diǎn)為第四列的第二個(gè)頂點(diǎn)74,因此將第三列的候選點(diǎn)調(diào)整到第二個(gè)頂點(diǎn)73,第二內(nèi)側(cè)分組中,最外側(cè)的候選點(diǎn)為第六列的第一個(gè)頂點(diǎn)86,因此將第五列的候選點(diǎn)調(diào)整到第一個(gè)頂點(diǎn)85。針對(duì)下方,對(duì)候選點(diǎn)進(jìn)行調(diào)整后的得到的邊界點(diǎn)如圖10b所示。
內(nèi)側(cè)組可以包含一個(gè)內(nèi)側(cè)分組,也可以包含兩個(gè)以上的內(nèi)側(cè)分組,如果包含兩個(gè)以上的內(nèi)側(cè)分組,在本發(fā)明實(shí)施例中,兩個(gè)以上的內(nèi)側(cè)分組中的候選點(diǎn)調(diào)整后得到的邊界點(diǎn)有可能不位于同一行,因此,為了進(jìn)一步的保證調(diào)整后的邊界點(diǎn)的準(zhǔn)確性,在本實(shí)施例中,所述將與該最外側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組下方邊界點(diǎn)之前,所述方法還包括:
判斷每個(gè)內(nèi)側(cè)分組的下方邊界點(diǎn)是否位于同一行,如果是,進(jìn)行后續(xù)步驟。
如果每個(gè)內(nèi)側(cè)分組的下方邊界點(diǎn)不位于同一行,所述方法還包括:
針對(duì)內(nèi)側(cè)分組中的下方邊界點(diǎn),確定位于最內(nèi)側(cè)的下方邊界點(diǎn),將內(nèi)側(cè)分組下方邊界點(diǎn)更新為與該最內(nèi)側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)。
如圖10b所示,將候選點(diǎn)調(diào)整后,第一內(nèi)側(cè)分組的邊界點(diǎn)位于由下到上第二行,分別為頂點(diǎn)73和74,第二內(nèi)側(cè)分組的邊界點(diǎn)位于由下到上第一行,分別為85和86,此時(shí)兩個(gè)內(nèi)側(cè)分組的下方邊界點(diǎn)不位于同一行,則確定位于最內(nèi)側(cè)的下方邊界點(diǎn),將內(nèi)側(cè)分組下方邊界點(diǎn)更新為與該最內(nèi)側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn),即,將第二內(nèi)側(cè)分組中的第三行的頂點(diǎn)75和76更新為第二內(nèi)測(cè)分組的邊界點(diǎn),更新后得到的邊界點(diǎn)如圖10c所示。
在本發(fā)明實(shí)施例中,將上下左右四個(gè)方向調(diào)整后的邊界點(diǎn)依次連接,將每個(gè)方向的邊界點(diǎn)依次連接后構(gòu)成的封閉區(qū)域作為qr碼模塊所在區(qū)域,如圖11所示的除去封閉區(qū)域的邊界點(diǎn)之后的陰影區(qū)域即為本發(fā)明實(shí)施例中確定的qr碼模塊所在的區(qū)域。另外,如果除去邊界點(diǎn)之后的區(qū)域內(nèi)不存在上述所說(shuō)的頂點(diǎn),則不去除封閉區(qū)域的邊界點(diǎn),將該封閉區(qū)域作為確定的qr碼模塊所在的區(qū)域。
圖12為本發(fā)明實(shí)施例提供的一種qr碼模塊邊界調(diào)整裝置結(jié)構(gòu)示意圖,該裝置包括:
生成模塊121,用于根據(jù)定位出的qr碼所在的區(qū)域,及該區(qū)域中每個(gè)像素點(diǎn)的灰度值,生成灰度值的梯度投影圖;
劃分模塊122,用于根據(jù)所述梯度投影圖中的每個(gè)峰值,對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分,得到qr碼中的每個(gè)模塊;
調(diào)整模塊123,用于針對(duì)每個(gè)模塊,按照預(yù)設(shè)的劃分方法將該模塊劃分為多個(gè)矩形區(qū)域;針對(duì)每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn),按照預(yù)設(shè)的方法確定每個(gè)頂點(diǎn)在四個(gè)第一方向的梯度值;針對(duì)每個(gè)第一方向,根據(jù)與該第一方向?qū)?yīng)的行或列,在每行或每列中將梯度值的最大值對(duì)應(yīng)的頂點(diǎn)作為該第一方向的候選點(diǎn),并針對(duì)每個(gè)第一方向?qū)⒚總€(gè)候選點(diǎn)劃分為內(nèi)外兩個(gè)第二方向,針對(duì)每個(gè)第二方向,對(duì)候選點(diǎn)進(jìn)行調(diào)整得到每個(gè)邊界點(diǎn),將調(diào)整后的邊界點(diǎn)依次連接;將所述調(diào)整后的邊界點(diǎn)依次連接后構(gòu)成的封閉區(qū)域作為qr碼模塊所在區(qū)域。
所述生成模塊121,具體用于針對(duì)每個(gè)像素點(diǎn),確定與該像素點(diǎn)左右相鄰的兩個(gè)像素點(diǎn)的灰度值的差的絕對(duì)值,將所述絕對(duì)值作為該像素點(diǎn)的水平梯度值,將每一列的像素點(diǎn)的水平梯度值累加得到水平方向的梯度投影圖;針對(duì)每個(gè)像素點(diǎn),確定與該像素點(diǎn)上下相鄰的兩個(gè)像素點(diǎn)的灰度值的差的絕對(duì)值,將所述絕對(duì)值作為該像素點(diǎn)的垂直梯度值,將每一行的像素點(diǎn)的垂直梯度值累加得到垂直方向的梯度投影圖。
所述劃分模塊122,具體用于將所述水平方向的梯度投影圖的水平方向劃分為第一數(shù)量的范圍區(qū)間,識(shí)別每個(gè)第一范圍區(qū)間中梯度值的峰值,確定每個(gè)峰值所對(duì)應(yīng)的每個(gè)目標(biāo)列,在所述qr碼所在的區(qū)域中采用每個(gè)目標(biāo)列進(jìn)行列劃分;將垂直方向的梯度投影圖的垂直方向劃分為第二數(shù)量的范圍區(qū)間,識(shí)別每個(gè)第二范圍區(qū)間中梯度值的峰值,確定每個(gè)峰值所對(duì)應(yīng)的每個(gè)目標(biāo)行,在所述qr碼所在的區(qū)域中采用每個(gè)目標(biāo)行進(jìn)行行劃分。
所述調(diào)整模塊123,具體用于將每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn)劃分到左右兩個(gè)半?yún)^(qū),將左方向作為第一方向,針對(duì)左半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)右側(cè)的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在左方向的梯度值;將右方向作為第一方向,針對(duì)右半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)左側(cè)的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在右方向的梯度值;將每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn)劃分到上下兩個(gè)半?yún)^(qū),將上方作為第一方向,針對(duì)上半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)下方的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在上方的梯度值;將下方作為第一方向,針對(duì)下半?yún)^(qū)的頂點(diǎn),根據(jù)每個(gè)頂點(diǎn)與該頂點(diǎn)相鄰且位于該頂點(diǎn)上方的頂點(diǎn)的灰度值差的絕對(duì)值,確定每個(gè)頂點(diǎn)在下方的梯度值。
所述調(diào)整模塊123,具體用于如果候選點(diǎn)為左方向候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將左方向候選點(diǎn)劃分為上下兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的左方向候選點(diǎn),將與該最內(nèi)側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)作為該外側(cè)組左方向邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的左方向候選點(diǎn),將與該最外側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組左方向邊界點(diǎn);如果候選點(diǎn)為右方向候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將右方向候選點(diǎn)劃分為上下兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的右方向候選點(diǎn),將與該最內(nèi)側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn)作為該外側(cè)組右方向邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的右方向候選點(diǎn),將與該最外側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn)作為該內(nèi)側(cè)分組右方向邊界點(diǎn);如果候選點(diǎn)為上方候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將上方候選點(diǎn)劃分為左右兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的上方候選點(diǎn),將與該最內(nèi)側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn)作為該外側(cè)組上方邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的上方候選點(diǎn),將與該最外側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組上方邊界點(diǎn);如果候選點(diǎn)為下方候選點(diǎn),且所述候選點(diǎn)位于外側(cè),將下方候選點(diǎn)劃分為左右兩個(gè)外側(cè)組,針對(duì)每個(gè)外側(cè)組,識(shí)別該外側(cè)組中位于最內(nèi)側(cè)的下方候選點(diǎn),將與該最內(nèi)側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)作為該外側(cè)組下方邊界點(diǎn);針對(duì)內(nèi)測(cè)組,將內(nèi)側(cè)組劃分為至少一個(gè)內(nèi)側(cè)分組,針對(duì)每個(gè)內(nèi)側(cè)分組,識(shí)別該內(nèi)側(cè)分組中位于最外側(cè)的下方候選點(diǎn),將與該最外側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)作為該內(nèi)側(cè)分組下方邊界點(diǎn)。
所述裝置還包括:
判斷模塊124,用于判斷每個(gè)內(nèi)側(cè)分組的左方向邊界點(diǎn)是否位于同一列,如果是,觸發(fā)調(diào)整模塊123。
所述調(diào)整模塊123,還用于如果每個(gè)內(nèi)側(cè)分組的左方向邊界點(diǎn)不位于同一列,針對(duì)內(nèi)側(cè)分組中的左方向邊界點(diǎn),確定位于最內(nèi)側(cè)的左方向邊界點(diǎn),將內(nèi)側(cè)分組左方向邊界點(diǎn)更新為與該最內(nèi)側(cè)的左方向候選點(diǎn)位于同一列的頂點(diǎn)。
所述判斷模塊124,還用于判斷每個(gè)內(nèi)側(cè)分組的右方向邊界點(diǎn)是否位于同一列,如果是,觸發(fā)調(diào)整模塊123;判斷每個(gè)內(nèi)側(cè)分組的上方邊界點(diǎn)是否位于同一行,如果是,觸發(fā)調(diào)整模塊123;判斷每個(gè)內(nèi)側(cè)分組的下方邊界點(diǎn)是否位于同一行,如果是,觸發(fā)調(diào)整模塊123。
所述調(diào)整模塊123,還用于如果每個(gè)內(nèi)側(cè)分組的右方向邊界點(diǎn)不位于同一列,針對(duì)內(nèi)側(cè)分組中的右方向邊界點(diǎn),確定位于最內(nèi)側(cè)的右方向邊界點(diǎn),將內(nèi)側(cè)分組右方向邊界點(diǎn)更新為與該最內(nèi)側(cè)的右方向候選點(diǎn)位于同一列的頂點(diǎn);如果每個(gè)內(nèi)側(cè)分組的上方邊界點(diǎn)不位于同一行,針對(duì)內(nèi)側(cè)分組中的上方邊界點(diǎn),確定位于最內(nèi)側(cè)的上方邊界點(diǎn),將內(nèi)側(cè)分組上方邊界點(diǎn)更新為與該最內(nèi)側(cè)的上方候選點(diǎn)位于同一行的頂點(diǎn);如果每個(gè)內(nèi)側(cè)分組的下方邊界點(diǎn)不位于同一行,針對(duì)內(nèi)側(cè)分組中的下方邊界點(diǎn),確定位于最內(nèi)側(cè)的下方邊界點(diǎn),將內(nèi)側(cè)分組下方邊界點(diǎn)更新為與該最內(nèi)側(cè)的下方候選點(diǎn)位于同一行的頂點(diǎn)。
本發(fā)明實(shí)施例提供一種qr碼模塊邊界調(diào)整的方法及裝置,所述方法包括:根據(jù)定位出的qr碼所在的區(qū)域,及該區(qū)域中每個(gè)像素點(diǎn)的灰度值,生成灰度值的梯度投影圖;根據(jù)所述梯度投影圖中的每個(gè)峰值,對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分,得到qr碼中的每個(gè)模塊;針對(duì)每個(gè)模塊,按照預(yù)設(shè)的劃分方法將該模塊劃分為多個(gè)矩形區(qū)域;針對(duì)每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn),按照預(yù)設(shè)的方法確定每個(gè)頂點(diǎn)在四個(gè)第一方向的梯度值;針對(duì)每個(gè)第一方向,根據(jù)與該第一方向?qū)?yīng)的行或列,在每行或每列中將梯度值的最大值對(duì)應(yīng)的頂點(diǎn)作為該第一方向的候選點(diǎn),并針對(duì)每個(gè)第一方向?qū)⒚總€(gè)候選點(diǎn)劃分為內(nèi)外兩個(gè)第二方向,針對(duì)每個(gè)第二方向,對(duì)候選點(diǎn)進(jìn)行調(diào)整得到每個(gè)邊界點(diǎn),將調(diào)整后的邊界點(diǎn)依次連接;將所述調(diào)整后的邊界點(diǎn)依次連接后構(gòu)成的封閉區(qū)域作為qr碼模塊所在區(qū)域。由于在本發(fā)明實(shí)施例中,電子設(shè)備通過(guò)梯度投影圖中的峰值,對(duì)所述qr碼所在的區(qū)域進(jìn)行劃分,得到qr碼中的每個(gè)模塊,針對(duì)每個(gè)模塊,將該模塊劃分為多個(gè)矩形區(qū)域,根據(jù)每個(gè)矩形區(qū)域的每個(gè)頂點(diǎn)在四個(gè)方向的梯度值,確定出該模塊上下左右四個(gè)方向的候選點(diǎn),并對(duì)四個(gè)方向的候選點(diǎn)進(jìn)行調(diào)整得到邊界點(diǎn),將該調(diào)整后的邊界點(diǎn)依次連接,得到該模塊的邊界,這樣就會(huì)將模塊中的噪聲過(guò)濾掉,使得在過(guò)曝,低對(duì)比度,高噪聲的環(huán)境下,可以更準(zhǔn)確的確定模塊,進(jìn)而提高了采樣模塊信息的準(zhǔn)確度和解碼的準(zhǔn)確率。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。