本發(fā)明屬于計算機信息編碼技術(shù)領(lǐng)域,具體涉及一種彩色二維碼的實現(xiàn)方法。
背景技術(shù):
二維碼在許多領(lǐng)域得到了廣泛應(yīng)用,目前主要有QR、Data Matrix和PDF417等多種二維碼編碼方式。無論哪一種編碼方式,雖然編碼規(guī)則和數(shù)據(jù)格式不同,但其本質(zhì)上都是二進制編碼,即采用兩種不同顏色(常用黑白色)分別表示0和1。詞語“二維碼”對應(yīng)的QR編碼,分別采用黑白色和紅黃色進行表達。在二維碼圖像的使用過程中,圖像中每一個像素點的色彩可以有很多種,如計算機中24位真彩色共有224種不同顏色,而目前的編碼方式僅采用了兩種顏色,容量低。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種彩色二維碼的實現(xiàn)方法,以解決現(xiàn)有二維碼容量低的問題。
本發(fā)明采用以下技術(shù)方案:一種彩色二維碼的實現(xiàn)方法,包括編碼和解碼兩個步驟,編碼時采用傳統(tǒng)的二維碼編碼算法生成雙色二維碼,對生成的多幅雙色二維碼圖逐個像素點按位進行數(shù)學(xué)運算,利用24位真彩色的編碼規(guī)則來形成彩色二維碼;解碼時將彩色二維碼的每個像素點的每一位提取出來,形成多幅雙色二維碼,采用傳統(tǒng)的二維碼解碼算法提取所包含的信息。
進一步的,編碼的具體方法為:
步驟1.1、將待編碼的數(shù)據(jù)分解為n個長度為P、以及一個長度為M-n*P的原始數(shù)據(jù)塊,數(shù)據(jù)塊的序號依次標(biāo)記為1,2,……,n,n+1;
其中,設(shè)現(xiàn)有二維碼編碼方式中單幅圖像的數(shù)據(jù)容量最大為P個字節(jié),待編碼的數(shù)據(jù)總長度為M個字節(jié);0≤n≤23,1≤M-n*P≤P;
步驟1.2、采用現(xiàn)有的二維碼編碼方式,生成n+1個原始數(shù)據(jù)塊所對應(yīng)的n+1個雙色二維碼圖像,其序號依次標(biāo)記為1,2,……,n,n+1;
步驟1.3、獲得每幅雙色二維碼圖像的二維像素矩陣bk,k=1,2,……,n,n+1;由于現(xiàn)有的雙色二維碼圖像為二值圖,因此得到的矩陣中每一個元素的取值為0或1;
步驟1.4、利用n+1個像素矩陣bk按下式生成新的像素矩陣C:
C(i,j)=b1(i,j)+b2(i,j)*2+b3(i,j)*22+……+bn(i,j)*2n-1+bn+1(i,j)*2n,
其中,i=1,2,……,L2、j=1,2,……,L1,二維碼圖像最大寬度為L1個像素、最大高度為L2個像素;
步驟1.5、利用步驟1.4中獲得的矩陣C,按照24位真彩色編碼規(guī)則生成彩色圖像,該圖像即為彩色二維碼圖像。
進一步的,步驟1.1中,M的最大值為24*P,當(dāng)M超出此最大值時應(yīng)當(dāng)拆解成兩組或多組待編碼的數(shù)據(jù)。
進一步的,步驟1.3中,如果像素矩陣bn+1的大小小于L1×L2,則將其大小擴充至L1×L2,擴充部分的矩陣元素取值均設(shè)置為1或0。
進一步的,解碼的具體方法為:
(1)對步驟1.5中生成的彩色二維碼圖像,循環(huán)進行二十四次數(shù)據(jù)處理,得到24幅雙色二維碼圖像;
(2)將24幅雙色二維碼圖像逐個按傳統(tǒng)二維碼的解碼處理方法進行解碼,得到24個數(shù)據(jù)塊;
(3)按24個數(shù)據(jù)塊順序連接起來即為該彩色二維碼圖像所包含的信息。
進一步的,解碼過程的循環(huán)處理的方法為:
(1)根據(jù)24位真彩色的編碼規(guī)則,將彩色二維碼圖像的像素色彩轉(zhuǎn)換成整數(shù)值矩陣C,矩陣的行元素數(shù)量為H1,列元素數(shù)量為H2;
(2)生成新矩陣b,它的元素b(i,j)=(C(i,j)AND 2n-1)/2n-1,其中n=1,2,…,24,表示循環(huán)處理的次數(shù);AND表示計算機技術(shù)中的“按位與”運算;i=1,2,……,H2、j=1,2,……,H1;
(3)矩陣b的元素均為0或1,將其轉(zhuǎn)換為傳統(tǒng)的雙色二維碼圖像。
本發(fā)明的有益效果是:在傳統(tǒng)二維碼的編碼處理方法之后增加了一道處理過程,將多幅傳統(tǒng)二維碼圖像疊加為彩色二維碼;在傳統(tǒng)二維碼的解碼處理方法之前增加了一道處理過程,將彩色二維碼分解成多幅傳統(tǒng)二維碼。單幅本發(fā)明的彩色二維碼圖像的數(shù)據(jù)容量,達到了同樣尺寸雙色二維碼的數(shù)據(jù)容量的24倍,容量得到大幅擴充;而且采用本發(fā)明的實現(xiàn)方法,在編碼和解碼時,無需進行復(fù)雜的數(shù)學(xué)運算和圖像處理,仍可采用原有的二維碼編碼和解碼算法。
【附圖說明】
圖1a至圖1d為實施例中第1幅、第11幅、第21幅和第24幅的二維碼圖像;
圖2為實施例中生成的24位真彩色二維碼圖像;
圖3a至圖3d為實施例中第1幅、第11幅、第21幅和第24幅雙色二維碼圖像。
【具體實施方式】
下面通過附圖和實施例,對本發(fā)明的技術(shù)方案做進一步的詳細描述。
本發(fā)明的一種彩色二維碼的實現(xiàn)方法包括編碼和解碼兩個步驟,編碼時采用傳統(tǒng)的二維碼編碼算法生成雙色二維碼,對生成的多幅雙色二維碼圖逐個像素點按位進行數(shù)學(xué)運算,利用24位真彩色的編碼規(guī)則來形成彩色二維碼;解碼時將彩色二維碼的每個像素點的每一位提取出來,形成多幅雙色二維碼,采用傳統(tǒng)的二維碼解碼算法提取所包含的信息。本發(fā)明特點是在傳統(tǒng)二維碼的編碼處理方法之后增加了一道處理過程,將多幅傳統(tǒng)二維碼圖像疊加為彩色二維碼;在傳統(tǒng)二維碼的解碼處理方法之前增加了一道處理過程,將彩色二維碼分解成多幅傳統(tǒng)二維碼。發(fā)明點在于合成算法和分解算法。
一、編碼:
步驟1.1、將待編碼的數(shù)據(jù)分解為n個長度為P、以及一個長度為M-n*P的原始數(shù)據(jù)塊,數(shù)據(jù)塊的序號依次標(biāo)記為1,2,……,n,n+1;
其中,設(shè)現(xiàn)有編碼方式中單幅圖像的數(shù)據(jù)容量最大為P個字節(jié),待編碼的數(shù)據(jù)總長度為M個字節(jié);0≤n≤23,1≤M-n*P≤P;M的最大值為24*P,當(dāng)M超出此最大值時應(yīng)當(dāng)拆解成兩組或多組待編碼的數(shù)據(jù)。
步驟1.2、采用現(xiàn)有的二維碼編碼方式,生成n+1個原始數(shù)據(jù)塊所對應(yīng)的n+1個雙色二維碼圖像,其序號依次標(biāo)記為1,2,……,n,n+1;
步驟1.3、獲得每幅雙色二維碼圖像的二維像素矩陣bk,k=1,2,……,n,n+1;由于現(xiàn)有的雙色二維碼圖像為二值圖,因此得到的矩陣中每一個元素的取值為0或1;
前n個像素矩陣的大小為L1×L2,第n+1個像素矩陣的大小根據(jù)第n+1個數(shù)據(jù)塊的長度而變化,最大為L1×L2;
如果像素矩陣bn+1的大小小于L1×L2,則將其大小擴充至L1×L2,擴充部分的矩陣元素取值均設(shè)置為1或0。
步驟1.4、利用n+1個像素矩陣bk按下式生成新的像素矩陣C:
C(i,j)=b1(i,j)+b2(i,j)*2+b3(i,j)*22+……+bn(i,j)*2n-1+bn+1(i,j)*2n,
其中,i=1,2,……,L2、j=1,2,……,L1,二維碼圖像最大寬度為L1個像素、最大高度為L2個像素;
步驟1.5、利用步驟1.4中獲得的矩陣C,按照24位真彩色編碼方式生成彩色圖像,該圖像即為彩色二維碼圖像。
二、解碼的具體方法為:
假定按5.1所述方法生成的24位真彩色二維碼圖像寬度和高度分別為L1和L2個像素。
(1)對步驟1.5中生成的彩色二維碼圖像,循環(huán)進行二十四次數(shù)據(jù)處理,得到24幅雙色二維碼圖像;
(2)將24幅雙色二維碼圖像逐個按傳統(tǒng)二維碼的解碼處理方法進行解碼,得到24個數(shù)據(jù)塊;
(3)按24個數(shù)據(jù)塊順序連接起來即為該彩色二維碼圖像所包含的信息。
其中,解碼過程的循環(huán)處理的方法為:
(a)根據(jù)24位真彩色的編碼規(guī)則,將彩色二維碼圖像的像素色彩轉(zhuǎn)換成整數(shù)值矩陣C,矩陣的行元素數(shù)量為H1,列元素數(shù)量為H2;
(b)生成新矩陣b,它的元素b(i,j)=(C(i,j)AND 2n-1)/2n-1,其中n=1,2,…,24,表示循環(huán)處理的次數(shù);AND表示計算機技術(shù)中的“按位與”運算;i=1,2,……,H2、j=1,2,……,H1;
(c)矩陣b的元素均為0或1,將其轉(zhuǎn)換為傳統(tǒng)的雙色二維碼圖像。
實施例:
(1)編碼過程
1.1需要轉(zhuǎn)換的字符串如下:
1.0000000000-03.162277660-14.142135624-054.7722557511.4142135624-04.472135955-20.000000000-077.4596669241.7320508076-05.477225575-24.494897428-094.8683298052.0000000000-06.324555320-28.284271247-109.5445115012.2360679775-07.071067812-31.622776602-122.4744871392.4494897428 -07.745966692-34.641016151-134.1640786502.6457513111-08.366600265-37.416573868-144.9137674622.8284271247-08.944271910-40.000000000-154.9193338483.0000000000-09.486832981-42.426406871-164.3167672523.1622776602-10.000000000-44.721359550-173.2050807573.3166247904-10.488088482-46.904157598-181.6590212463.4641016151-10.954451150-48.989794856-189.7366596103.6055512755-11.401754251-50.990195136-197.4841765813.7416573868-11.832159566-52.915026221-204.9390153193.8729833462-12.247448714-54.772255751-212.1320343564.0000000000-12.649110641-56.568542495-219.0890230024.1231056256-13.038404810-58.309518948-225.8317958134.2426406871-13.416407865-60.000000000-232.3790007724.3588989435-13.784048752-61.644140030-238.7467277264.4721359550-14.142135624-63.245553203-244.9489742784.5825756950-14.491376746-64.807406984-250.9980079604.6904157598-14.832396974-66.332495807-256.9046515734.7958315233-15.165750888-67.823299831-262.6785107315.6568542495-17.888543820-80.000000000-309.838667697
1.2、將原始數(shù)據(jù)分成24個數(shù)據(jù)塊(每一個數(shù)據(jù)塊為一行)
1.0000000000-03.162277660-14.142135624-054.772255751
1.4142135624-04.472135955-20.000000000-077.459666924
1.7320508076-05.477225575-24.494897428-094.868329805
2.0000000000-06.324555320-28.284271247-109.544511501
2.2360679775-07.071067812-31.622776602-122.474487139
2.4494897428-07.745966692-34.641016151-134.164078650
2.6457513111-08.366600265-37.416573868-144.913767462
2.8284271247-08.944271910-40.000000000-154.919333848
3.0000000000-09.486832981-42.426406871-164.316767252
3.1622776602-10.000000000-44.721359550-173.205080757
3.3166247904-10.488088482-46.904157598-181.659021246
3.4641016151-10.954451150-48.989794856-189.736659610
3.6055512755-11.401754251-50.990195136-197.484176581
3.7416573868-11.832159566-52.915026221-204.939015319
3.8729833462-12.247448714-54.772255751-212.132034356
4.0000000000-12.649110641-56.568542495-219.089023002
4.1231056256-13.038404810-58.309518948-225.831795813
4.2426406871-13.416407865-60.000000000-232.379000772
4.3588989435-13.784048752-61.644140030-238.746727726
4.4721359550-14.142135624-63.245553203-244.948974278
4.5825756950-14.491376746-64.807406984-250.998007960
4.6904157598-14.832396974-66.332495807-256.904651573
4.7958315233-15.165750888-67.823299831-262.678510731
5.6568542495-17.888543820-80.000000000-309.838667697
1.3、采用雙色法生成每一個數(shù)據(jù)塊的二維碼,每一幅圖像的像素數(shù)量為194*194,其中,第1幅、第11幅、第21幅、第24幅的二維碼,分別如圖3a至圖3d所示。
1.4、提取每一個像素點對應(yīng)的二進制代碼,并計算出新圖像對應(yīng)的色彩值。隨機列出7個位置的色彩值,如表1所示:
表1
1.5、如圖2所示,生成24位真彩色二維碼。
(2)解碼過程:
2.1、將彩色二維碼逐個像素提取其色彩對應(yīng)的數(shù)值,隨機列舉7個位置的色彩值,如表2所示:
表2
2.2、將每一個像素色彩對應(yīng)的數(shù)值轉(zhuǎn)換按算法轉(zhuǎn)換為對應(yīng)的二進制串,隨機列舉一些二進制代碼,如表3所示:
表3
2.3、將所有的二進制串,逐位提取出來,作為雙色二維碼對應(yīng)位置的像素值,生成雙色二維碼圖像,其中,第1幅、第11幅、第21幅、第24幅雙色二維碼圖像分別如圖3a至圖3d所示。
2.4、對雙色二維碼進行解碼,得到每一幅二維碼所包含的信息。
1.0000000000-03.162277660-14.142135624-054.772255751
1.4142135624-04.472135955-20.000000000-077.459666924
1.7320508076-05.477225575-24.494897428-094.868329805
2.0000000000-06.324555320-28.284271247-109.544511501
2.2360679775-07.071067812-31.622776602-122.474487139
2.4494897428-07.745966692-34.641016151-134.164078650
2.6457513111-08.366600265-37.416573868-144.913767462
2.8284271247-08.944271910-40.000000000-154.919333848
3.0000000000-09.486832981-42.426406871-164.316767252
3.1622776602-10.000000000-44.721359550-173.205080757
3.3166247904-10.488088482-46.904157598-181.659021246
3.4641016151-10.954451150-48.989794856-189.736659610
3.6055512755-11.401754251-50.990195136-197.484176581
3.7416573868-11.832159566-52.915026221-204.939015319
3.8729833462-12.247448714-54.772255751-212.132034356
4.0000000000-12.649110641-56.568542495-219.089023002
4.1231056256-13.038404810-58.309518948-225.831795813
4.2426406871-13.416407865-60.000000000-232.379000772
4.3588989435-13.784048752-61.644140030-238.746727726
4.4721359550-14.142135624-63.245553203-244.948974278
4.5825756950-14.491376746-64.807406984-250.998007960
4.6904157598-14.832396974-66.332495807-256.904651573
4.7958315233-15.165750888-67.823299831-262.678510731
5.6568542495-17.888543820-80.000000000-309.838667697
2.5、將上述信息連接起來就是彩色二維碼所表達的信息。
在二維碼圖像的使用過程中,圖像中每一個像素點的色彩可以有很多種,如計算機中24位真彩色共有224種不同顏色,而目前的編碼方式僅采用了兩種顏色,容量低。很顯然采用多種顏色(如4種、8種甚至更多)可以大幅提高二維碼的容量。目前已經(jīng)出現(xiàn)的“三維彩碼”(簡稱三維碼、彩碼),采用4種顏色(紅、綠、藍和黑)甚至更多種顏色來表達信息。雖然部分三維碼圖像與現(xiàn)有二維碼非常相似,但是該編碼是完全重新設(shè)計的編碼模式,其所用的編碼、解碼和圖像識別算法等均需重新設(shè)計。
采用本發(fā)明的一種彩色二維碼的實現(xiàn)方法后,單幅二維碼圖像的數(shù)據(jù)容量達到了同樣尺寸雙色二維碼的數(shù)據(jù)容量的24倍。而且在編碼和解碼時,無需進行復(fù)雜的數(shù)學(xué)運算和圖像處理,仍可采用原有的二維碼編碼和解碼算法。
如QR碼的版本設(shè)為3、糾錯等級為低、模塊大小為6時,生成的二維碼圖像像素為194*194,最大容納53個字符。采用本發(fā)明后,可以容納1272個字符,數(shù)據(jù)容量提高到原來的24倍。在編碼時,仍采用原有的任一種二維碼編碼算法,只需要將多幅二維碼圖像按照編碼過程中的算法,將同一坐標(biāo)位置的像素“疊加”處理即可生成彩色二維碼圖像。在解碼時,只需要將獲得的彩色圖像按照解碼過程的算法逐個像素“提取”出多幅雙色二維碼圖像,然后采用原有的二維碼解碼算法,即可得到二維碼所表達的信息。