彩色圖片二維碼解碼方法
【專利摘要】一般彩色圖像采用R\G\B三原色記錄數(shù)據(jù),本發(fā)明提供的一種彩色圖片二維碼解碼方法通過對R\G\B分量判斷圖像邊緣,盡興深色、淺色的邊界分割,再通過位置探測圖形的特征,區(qū)分出深色與淺色,并進(jìn)行后續(xù)的解碼,得到最終解碼結(jié)果。本發(fā)明利用彩色二維碼的R\G\B分量確定邊緣,并通過二維碼位置探測圖形判斷深色模塊和淺色模塊,并最終解碼,使解碼方法支持彩色圖像的解碼,提高產(chǎn)品的市場競爭力。
【專利說明】
彩色圖片二維碼解碼方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明涉及一種對彩色二維碼進(jìn)行解碼的方法。
【背景技術(shù)】
[0002]比較常見的二維碼圖片為灰度圖像。但隨著近幾年的發(fā)展,已出現(xiàn)多樣化的二維碼,其中彩色二維碼就是其中一種新的樣式。與普通灰度圖像的二維碼圖片相比,彩色圖像的二維碼圖片的碼圖區(qū)域和背景區(qū)域不再是黑或者白,而具有一定的色彩,若采用灰度圖像的二維碼對彩色圖像的二維碼圖片進(jìn)行解碼算法,則需要先將彩色圖像轉(zhuǎn)換為灰度圖像,然后再進(jìn)行解碼。上述方法可能出現(xiàn)灰度對比度太低,甚至深色模塊、淺色模塊形成反差的現(xiàn)象(原來應(yīng)為深色模塊的表現(xiàn)為淺色模塊,或原來應(yīng)為淺色模塊的表現(xiàn)為深色模塊)。例如,RVAB彩色圖像轉(zhuǎn)換為灰度圖像時(shí),如果采用轉(zhuǎn)換公式0.299R+0.587G+0.114B,如果深色的顏色(1?,6,8) = (235,0,0),淺色的顏色(1?,6,8) = (0,120,0),那么灰度轉(zhuǎn)換后,深色和淺色的灰度都約等于70,完全看不出存在二維碼。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是提供一種彩色二維碼的解碼方法。
[0004]為了達(dá)到上述目的,本發(fā)明的技術(shù)方案是提供了一種彩色圖片二維碼解碼方法,其特征在于,包括以下步驟:
[0005]步驟1、獲得帶有二維碼的彩色圖片后,對彩色圖片中的像素點(diǎn)逐行掃描,得到每行像素點(diǎn)行的所有邊緣位置,對于任意一行像素點(diǎn)行而言,所有邊緣位置的獲取方法包括以下步驟:
[0006]步驟1.1、設(shè)定第一閾值及第二閾值,將最大值MAX初始化為0,將當(dāng)前像素點(diǎn)行中的第一個(gè)像素點(diǎn)設(shè)定為當(dāng)前像素點(diǎn);
[0007]步驟1.2、判斷當(dāng)前像素點(diǎn)是否為像素點(diǎn)行的最后一個(gè)像素點(diǎn),若是,則退出當(dāng)前像素點(diǎn)行的計(jì)算,若不是,則將當(dāng)前像素點(diǎn)的下一個(gè)像素點(diǎn)設(shè)定為當(dāng)前相鄰像素點(diǎn);
[0008]步驟1.3、計(jì)算當(dāng)前像素點(diǎn)與當(dāng)前相鄰像素點(diǎn)的RGB三分量落差之和FALL,F(xiàn)ALL=P2.R-P1.R| + |P2.G-P1.G| + |P2.B-P1.B,式中,P2.R、P2.G及P2.B為當(dāng)前相鄰像素點(diǎn)的RGB三分量,Pl.R、P1.G及Pl.B為當(dāng)前像素點(diǎn)的RGB三分量;
[0009]步驟1.4、判斷RGB三分量落差之和FALL是否大于第一閾值,若否,則將當(dāng)前相鄰像素點(diǎn)設(shè)為當(dāng)前像素點(diǎn)后,返回步驟1.2,若是,則進(jìn)入步驟1.5;
[0010]步驟1.5、將當(dāng)前像素點(diǎn)記錄為邊緣線段開始位置ST;
[0011 ]步驟1.6、比較最大值MAX與RGB三分量落差之和FALL的大小,若RGB三分量落差之和FALL不大于最大值MAX,進(jìn)入步驟1.8,若RGB三分量落差之和FALL大于最大值MAX,則將最大值MAX更新為RGB三分量落差之和FALL,進(jìn)入步驟1.7;
[0012]步驟1.7、將當(dāng)前相鄰像素點(diǎn)的下一個(gè)像素點(diǎn)設(shè)為當(dāng)前相鄰像素點(diǎn),計(jì)算得到當(dāng)前像素點(diǎn)與當(dāng)前相鄰像素點(diǎn)的RGB三分量落差之和FALL后返回步驟1.6;
[0013]步驟1.8、判斷最大值MAX是否大于第二閾值,若是,則將當(dāng)前相鄰像素點(diǎn)的上一個(gè)像素點(diǎn)記錄為邊緣線段結(jié)束位置SD,進(jìn)入步驟1.9,若否,則將最大值MAX初始化為O后,并將邊緣線段開始位置ST的下一個(gè)像素點(diǎn)設(shè)為當(dāng)前像素點(diǎn)后返回步驟1.2;
[0014]步驟1.9、取邊緣線段開始位置ST與邊緣線段結(jié)束位置SD的中點(diǎn)作為一個(gè)邊緣位置,將邊緣線段結(jié)束位置SD設(shè)為當(dāng)前像素點(diǎn),并將最大值MAX初始化為O后,返回步驟1.2;
[0015]步驟2、得到一行像素點(diǎn)行的所有邊緣位置后,計(jì)算連續(xù)邊緣的距離,并判斷是否存在連續(xù)距離的比例接近位置探測圖形的特征比例,若存在,則判斷為位置探測圖形,并局部地將中點(diǎn)所在位置判斷為深色模塊;
[0016]步驟3、依次找出圖像中所有滿足條件的位置探測圖形,并根據(jù)位置探測圖形應(yīng)有的位置關(guān)系,判斷位置探測圖形組;
[0017]步驟4、分別對位置探測圖形組進(jìn)行解碼,此時(shí)將位置探測圖形的中心判斷為深色模塊,并根據(jù)邊緣位置,間隔地將圖像依次判斷為深色模塊、淺色模塊。
[0018]優(yōu)選地,在所述步驟2中,局部地將中點(diǎn)所在位置判斷為深色模塊后,對是否為位置探測圖形進(jìn)行進(jìn)一步確認(rèn)。
[0019]優(yōu)選地,所述步驟4包括:
[0020]步驟4.1、根據(jù)位置探測圖形,計(jì)算出二維碼的最小單元模塊寬度;
[0021]步驟4.2、根據(jù)最小單元模塊寬度,將二維碼圖區(qū)域分割成若干行、若干列,每個(gè)行區(qū)域?qū)挾葎偤脼樽钚∧K寬度;
[0022]步驟4.3、以每個(gè)行、列的中心所在的直線進(jìn)行邊緣檢測,并以位置探測圖形的中心為深色模塊為基礎(chǔ),判斷每個(gè)模塊為深色模塊或者是淺色模塊;
[0023]步驟4.4、按照深色模塊為I,淺色模塊為0,并根據(jù)二維碼對應(yīng)的協(xié)議標(biāo)準(zhǔn)進(jìn)行解碼,得出解碼結(jié)果。
[0024]本發(fā)明利用彩色二維碼的R\G\B分量確定邊緣,并通過二維碼位置探測圖形判斷深色模塊和淺色模塊,并最終解碼,使解碼方法支持彩色圖像的解碼,提高產(chǎn)品的市場競爭力。
【附圖說明】
[0025]圖1為以QR碼為例的過程參考圖;
[0026]圖2為模塊劃分圖。
【具體實(shí)施方式】
[0027]為使本發(fā)明更明顯易懂,茲以優(yōu)選實(shí)施例,并配合附圖作詳細(xì)說明如下。
[0028]本發(fā)明提供了一種彩色圖片二維碼解碼方法,包括以下步驟:
[0029]步驟1、獲取彩色二維碼圖像,每個(gè)像素點(diǎn)存在R\G\B三個(gè)分量。
[0030]步驟2、對彩色圖片中的像素點(diǎn)逐行掃描,得到每行像素點(diǎn)行的所有邊緣位置,對于任意一行像素點(diǎn)行而言,所有邊緣位置的獲取方法包括以下步驟:
[0031]步驟2.1、設(shè)定第一閾值及第二閾值,將最大值MAX初始化為0,將當(dāng)前像素點(diǎn)行中的第一個(gè)像素點(diǎn)設(shè)定為當(dāng)前像素點(diǎn);
[0032]步驟2.2、判斷當(dāng)前像素點(diǎn)是否為像素點(diǎn)行的最后一個(gè)像素點(diǎn),若是,則退出當(dāng)前像素點(diǎn)行的計(jì)算,若不是,則將當(dāng)前像素點(diǎn)的下一個(gè)像素點(diǎn)設(shè)定為當(dāng)前相鄰像素點(diǎn);
[0033 ]步驟2.3、計(jì)算當(dāng)前像素點(diǎn)與當(dāng)前相鄰像素點(diǎn)的RGB三分量落差之和FALL,F(xiàn)ALL =P2.R-P1.R| + |P2.G-P1.G| + |P2.B-P1.B,式中,P2.R、P2.G及P2.B為當(dāng)前相鄰像素點(diǎn)的RGB三分量,Pl.R、P1.G及Pl.B為當(dāng)前像素點(diǎn)的RGB三分量;
[0034]步驟2.4、判斷RGB三分量落差之和FALL是否大于第一閾值,若否,則將當(dāng)前相鄰像素點(diǎn)設(shè)為當(dāng)前像素點(diǎn)后,返回步驟2.2,若是,則進(jìn)入步驟2.5;
[0035]步驟2.5、將當(dāng)前像素點(diǎn)記錄為邊緣線段開始位置ST;
[0036]步驟2.6、比較最大值MAX與RGB三分量落差之和FALL的大小,若RGB三分量落差之和FALL不大于最大值MAX,進(jìn)入步驟2.8,若RGB三分量落差之和FALL大于最大值MAX,則將最大值MAX更新為RGB三分量落差之和FALL,進(jìn)入步驟2.7;
[0037]步驟2.7、將當(dāng)前相鄰像素點(diǎn)的下一個(gè)像素點(diǎn)設(shè)為當(dāng)前相鄰像素點(diǎn),計(jì)算得到當(dāng)前像素點(diǎn)與當(dāng)前相鄰像素點(diǎn)的RGB三分量落差之和FALL后返回步驟2.6;
[0038]步驟2.8、判斷最大值MAX是否大于第二閾值,若是,則將當(dāng)前相鄰像素點(diǎn)的上一個(gè)像素點(diǎn)記錄為邊緣線段結(jié)束位置SD,進(jìn)入步驟2.9,若否,則將最大值MAX初始化為O后,并將邊緣線段開始位置ST的下一個(gè)像素點(diǎn)設(shè)為當(dāng)前像素點(diǎn)后返回步驟2.2;
[0039]步驟1.9、取邊緣線段開始位置ST與邊緣線段結(jié)束位置SD的中點(diǎn)作為一個(gè)邊緣位置,將邊緣線段結(jié)束位置SD設(shè)為當(dāng)前像素點(diǎn),并將最大值MAX初始化為O后,返回步驟2.2。
[0040]為更好的理解,舉例如下:設(shè)某一個(gè)像素點(diǎn)行的像素點(diǎn)Pl至P13(R、G、B)數(shù)據(jù)如下:
[0041]P1(50,0,0)、P2(50,0,0)、P3(50,30,0)、P4(50,20,0)、P5(50,60,0)、P6(50,70,0)、P7(50,90,0)、P8(50,80,0)、P9(50,90,0)、P10(50,70,0)、P11(50,30,0)、P12(50,0,0)、P13(50,0,0)o
[0042]P1P2 = 0(以P1P2簡記,表示三分量落差之和);
[0043 ] P2P3 = 30,超過第一閾值,則記 ST = P2;
[0044]P2P4 = 20,比P2P3小,表示達(dá)到最大值,但P2P3 = 30,小于第二閾值,則丟失這些數(shù)據(jù),繼續(xù)尋找下一個(gè)閾值;
[0045]P3P4 = 10;
[0046]P4P5 = 40,超過第一閾值,則記 ST = P4 ;
[0047]P4P6 = 50;
[0048]P4P7 = 70;
[0049]P4P8 = 60,比P4P7小,表示達(dá)到最大值,P4P7大于第二閾值,則確定一個(gè)邊緣,ED =P7,取P4、P7的中點(diǎn)作為邊緣位置;
[0050]P7P8 = 10;
[0051]P8P9 = 10;
[0052]P9P10 = 20,超過第一閾值,ST = P9;
[0053]P9P11=60;
[0054]P9P12 = 90;
[0055]P9P13 = 90,與P9P12相等,表示達(dá)到最大值,P9P12大于第二閾值,則確定一個(gè)邊緣,ED = 12,取P9、P12的中點(diǎn)作為邊緣位置。
[0056]步驟3、得到一行像素點(diǎn)行的所有邊緣位置后,計(jì)算連續(xù)邊緣的距離,并判斷是否存在連續(xù)距離的比例接近位置探測圖形的特征比例,若存在,則判斷為位置探測圖形,并局部地將中點(diǎn)所在位置判斷為深色模塊。
[0057]以QR碼的為例,位置探測圖形的特征比例為1:1:3:1:1,所述“接近”的判斷方法,參照現(xiàn)有技術(shù)判斷位置探測圖形的方法,若接近該特征比例,則初步判斷為位置探測圖形,并局部地將中點(diǎn)所在位置判斷為深色模塊,并進(jìn)一步進(jìn)行確認(rèn)是否為位置探測圖形。所述進(jìn)一步確認(rèn),也參考現(xiàn)有技術(shù)判斷位置圖形的方法。包括垂直于水平方向、以及與水平方向成45度、90度的方向上,以上述方法進(jìn)行確定邊緣,并檢測邊緣之間的距離是否接近特征比例。以QR碼為例,參考圖1,圖1中小圈圈均表示檢測到的邊緣,在同一直線上連續(xù)的邊緣之間的距離比例,均接近位置探測圖形的特征比例,則判斷為檢測到位置探測圖形。
[0058]步驟4、依次找出圖像中所有滿足條件的位置探測圖形,并根據(jù)位置探測圖形應(yīng)有的位置關(guān)系,判斷位置探測圖形組。
[0059]以QR碼為例,一共有3個(gè)位置探測圖形,為等腰直角關(guān)系。
[0060]步驟5、分別對位置探測圖形組進(jìn)行解碼,此時(shí)將位置探測圖形的中心判斷為深色模塊,并根據(jù)邊緣位置,間隔地將圖像依次判斷為深色模塊、淺色模塊。
[0061]步驟5.1、根據(jù)位置探測圖形,計(jì)算出二維碼的最小單元模塊寬度;
[0062]步驟5.2、根據(jù)最小單元模塊寬度,將二維碼圖區(qū)域分割成若干行、若干列,每個(gè)行區(qū)域?qū)挾葎偤脼樽钚∧K寬度;
[0063]步驟5.3、以每個(gè)行、列的中心所在的直線進(jìn)行邊緣檢測,并以位置探測圖形的中心為深色模塊為基礎(chǔ),判斷每個(gè)模塊為深色模塊或者是淺色模塊;
[0064]參考圖2,直線I及直線2為穿過每一行、列模塊的中心線,通過該中心線的邊緣,確定深色模塊、淺色模塊。如圖2中的直線I,穿過位置探測圖形的中心,可確定位置探測圖形的中心為深色模塊,按照邊緣位置,可間隔地確定該行各個(gè)分割區(qū)域的模塊屬于淺色還是深色的,然后再以此為基礎(chǔ),可以確定豎向各個(gè)分割區(qū)域的模塊屬于淺色的還是深色的。
[0065]步驟5.4、按照深色模塊為I,淺色模塊為0,并根據(jù)二維碼對應(yīng)的協(xié)議標(biāo)準(zhǔn)進(jìn)行解碼,得出解碼結(jié)果。
[0066]步驟6、輸出解碼結(jié)果。
[0067]以上所述僅為本發(fā)明的實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等同變換,或直接或間接運(yùn)用在相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種彩色圖片二維碼解碼方法,其特征在于,包括以下步驟: 步驟1、獲得帶有二維碼的彩色圖片后,對彩色圖片中的像素點(diǎn)逐行掃描,得到每行像素點(diǎn)行的所有邊緣位置,對于任意一行像素點(diǎn)行而言,所有邊緣位置的獲取方法包括以下步驟: 步驟1.1、設(shè)定第一閾值及第二閾值,將最大值MAX初始化為O,將當(dāng)前像素點(diǎn)行中的第一個(gè)像素點(diǎn)設(shè)定為當(dāng)前像素點(diǎn); 步驟1.2、判斷當(dāng)前像素點(diǎn)是否為像素點(diǎn)行的最后一個(gè)像素點(diǎn),若是,則退出當(dāng)前像素點(diǎn)行的計(jì)算,若不是,則將當(dāng)前像素點(diǎn)的下一個(gè)像素點(diǎn)設(shè)定為當(dāng)前相鄰像素點(diǎn); 步驟1.3、計(jì)算當(dāng)前像素點(diǎn)與當(dāng)前相鄰像素點(diǎn)的RGB三分量落差之和FALL,F(xiàn)ALL =P2.R-P1.R| + |P2.G-P1.G| + |P2.B-P1.B,式中,P2.R、P2.G及P2.B為當(dāng)前相鄰像素點(diǎn)的RGB三分量,Pl.R、P1.G及Pl.B為當(dāng)前像素點(diǎn)的RGB三分量; 步驟1.4、判斷RGB三分量落差之和FALL是否大于第一閾值,若否,則將當(dāng)前相鄰像素點(diǎn)設(shè)為當(dāng)前像素點(diǎn)后,返回步驟1.2,若是,則進(jìn)入步驟1.5; 步驟1.5、將當(dāng)前像素點(diǎn)記錄為邊緣線段開始位置ST; 步驟1.6、比較最大值MAX與RGB三分量落差之和FALL的大小,若RGB三分量落差之和FALL不大于最大值MAX,進(jìn)入步驟1.8,若RGB三分量落差之和FALL大于最大值MAX,則將最大值MAX更新為RGB三分量落差之和FALL,進(jìn)入步驟1.7; 步驟1.7、將當(dāng)前相鄰像素點(diǎn)的下一個(gè)像素點(diǎn)設(shè)為當(dāng)前相鄰像素點(diǎn),計(jì)算得到當(dāng)前像素點(diǎn)與當(dāng)前相鄰像素點(diǎn)的RGB三分量落差之和FALL后返回步驟1.6; 步驟1.8、判斷最大值MAX是否大于第二閾值,若是,則將當(dāng)前相鄰像素點(diǎn)的上一個(gè)像素點(diǎn)記錄為邊緣線段結(jié)束位置SD,進(jìn)入步驟1.9,若否,則將最大值MAX初始化為O后,并將邊緣線段開始位置ST的下一個(gè)像素點(diǎn)設(shè)為當(dāng)前像素點(diǎn)后返回步驟1.2; 步驟1.9、取邊緣線段開始位置ST與邊緣線段結(jié)束位置SD的中點(diǎn)作為一個(gè)邊緣位置,將邊緣線段結(jié)束位置SD設(shè)為當(dāng)前像素點(diǎn),并將最大值MAX初始化為O后,返回步驟1.2; 步驟2、得到一行像素點(diǎn)行的所有邊緣位置后,計(jì)算連續(xù)邊緣的距離,并判斷是否存在連續(xù)距離的比例接近位置探測圖形的特征比例,若存在,則判斷為位置探測圖形,并局部地將中點(diǎn)所在位置判斷為深色模塊; 步驟3、依次找出圖像中所有滿足條件的位置探測圖形,并根據(jù)位置探測圖形應(yīng)有的位置關(guān)系,判斷位置探測圖形組; 步驟4、分別對位置探測圖形組進(jìn)行解碼,此時(shí)將位置探測圖形的中心判斷為深色模塊,并根據(jù)邊緣位置,間隔地將圖像依次判斷為深色模塊、淺色模塊。2.如權(quán)利要求1所述的一種彩色圖片二維碼解碼方法,其特征在于,在所述步驟2中,局部地將中點(diǎn)所在位置判斷為深色模塊后,對是否為位置探測圖形進(jìn)行進(jìn)一步確認(rèn)。3.如權(quán)利要求1所述的一種彩色圖片二維碼解碼方法,其特征在于,所述步驟4包括: 步驟4.1、根據(jù)位置探測圖形,計(jì)算出二維碼的最小單元模塊寬度; 步驟4.2、根據(jù)最小單元模塊寬度,將二維碼圖區(qū)域分割成若干行、若干列,每個(gè)行區(qū)域?qū)挾葎偤脼樽钚∧K寬度; 步驟4.3、以每個(gè)行、列的中心所在的直線進(jìn)行邊緣檢測,并以位置探測圖形的中心為深色模塊為基礎(chǔ),判斷每個(gè)模塊為深色模塊或者是淺色模塊; 步驟4.4、按照深色模塊為I,淺色模塊為O,并根據(jù)二維碼對應(yīng)的協(xié)議標(biāo)準(zhǔn)進(jìn)行解碼,得出解碼結(jié)果。
【文檔編號】G06K7/14GK105975892SQ201610288694
【公開日】2016年9月28日
【申請日】2016年5月4日
【發(fā)明人】劉寧
【申請人】上?;屎托畔⒖萍加邢薰?br>