发明名称 基于块分类的PNG电子发票图像水印嵌入与认证方法
摘要 本发明公开了一种用于PNG电子发票图像内容保护的水印嵌入与认证方法,其作法主要是:将PNG电子发票图像分块并根据图像块的内容及其是否含有可改变像素点将图像块分为关键类、均匀类与非均匀类;将RGB三个分量的图像块内容分别加密后生成水印信息,根据分量图像块类别的不同选择相应的水印嵌入位置;通过比较图像块重构水印及提取水印的一致性判断该图像块的真实性,并采用横向邻域扩展检测法进一步提高篡改检测性能,最后通过综合RGB三个分量的检测情况得到待检测电子发票的认证结果。该方法在保证实现水印不可见的同时,对PNG图像大小的增加少;其对篡改的检测准确性高,误检率低,能够有效抵抗替换、添加、删除及拼贴等篡改。
申请公布号 CN104036447B 申请公布日期 2017.04.05
申请号 CN201410090182.6 申请日期 2014.03.12
申请人 西南交通大学 发明人 陈帆;秦瑶;和红杰
分类号 G06T1/00(2006.01)I 主分类号 G06T1/00(2006.01)I
代理机构 成都博通专利事务所 51208 代理人 陈树明
主权项 一种基于块分类的PNG电子发票图像的水印嵌入与认证方法,包括如下步骤:A、块分类A1、图像分块:将尺寸为(18m+u)×(18n+v)的发票图像中的(1:18m,1:18n)区域的R、G和B分量中的一个分量图像X划分成m×n个互不重叠的18×18分量图像块,即X={X<sub>i</sub>|i=1,2…N},X<sub>i</sub>={x<sub>i,j</sub>|j=1,2…18×18};其中,m为分量图像X的行数除以18的商,u为分量图像X的行数除以18的余数,n为分量图像X的列数除以18的商,v为分量图像X的列数除以18的余数,i为分量图像块X<sub>i</sub>的编号,N=m×n为分量图像块个数,j为分量图像块X<sub>i</sub>内像素的编号;A2、可改变像素点判定:将分量图像块X<sub>i</sub>中的像素点x<sub>i,j</sub>分为I类像素点和II类像素点,分别记为X<sub>i</sub><sup>1</sup>和X<sub>i</sub><sup>2</sup>;<maths num="0001"><math><![CDATA[<mrow><msub><mi>x</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>&Element;</mo><mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><msubsup><mi>X</mi><mi>i</mi><mn>1</mn></msubsup><mo>,</mo></mrow></mtd><mtd><mrow><mi>i</mi><mi>f</mi><mi> </mi><mi>j</mi><mo>=</mo><mn>54</mn><mi>a</mi><mo>+</mo><mn>3</mn><mi>b</mi><mo>-</mo><mn>37</mn><mo>,</mo><mi>a</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mo>...</mo><mn>6</mn><mo>,</mo><mi>b</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mo>...</mo><mn>6</mn></mrow></mtd></mtr><mtr><mtd><mrow><msubsup><mi>X</mi><mi>i</mi><mn>2</mn></msubsup><mo>,</mo></mrow></mtd><mtd><mrow><mi>o</mi><mi>t</mi><mi>h</mi><mi>e</mi><mi>r</mi><mi>w</mi><mi>i</mi><mi>s</mi><mi>e</mi></mrow></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0001168245420000011.GIF" wi="1432" he="189" /></maths>用标识元素p<sub>i,j</sub>组成的标识矩阵P<sub>i</sub>={p<sub>i,j</sub>|j=1,2…18×18}记录分量图像块X<sub>i</sub>中对应像素点x<sub>i,j</sub>的可改变性;标识元素p<sub>i,j</sub>的值为0的对应像素点x<sub>i,j</sub>为不可改变像素点,标识元素p<sub>i,j</sub>的值为1的对应像素点x<sub>i,j</sub>为可改变像素点;标识矩阵P<sub>i</sub>={p<sub>i,j</sub>|j=1,2…18×18}中所有元素p<sub>i,j</sub>的初始值均为0,并由下式计算出所有I类像素点的p<sub>i,j</sub>值,对标识矩阵P<sub>i</sub>中相应的元素p<sub>i,j</sub>的值进行更新:<maths num="0002"><math><![CDATA[<mrow><msub><mi>p</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>=</mo><mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><mn>1</mn><mo>,</mo></mrow></mtd><mtd><mrow><mi>i</mi><mi>f</mi><mi> </mi><msub><mi>psd</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>&le;</mo><mn>1.0</mn></mrow></mtd></mtr><mtr><mtd><mrow><mn>0</mn><mo>,</mo></mrow></mtd><mtd><mrow><mi>o</mi><mi>t</mi><mi>h</mi><mi>e</mi><mi>r</mi><mi>w</mi><mi>i</mi><mi>s</mi><mi>e</mi></mrow></mtd></mtr></mtable></mfenced><mo>,</mo><mi>j</mi><mo>=</mo><mn>54</mn><mi>a</mi><mo>+</mo><mn>3</mn><mi>b</mi><mo>-</mo><mn>37</mn><mo>,</mo><mi>a</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mo>...</mo><mn>6</mn><mo>,</mo><mi>b</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mo>...</mo><mn>6</mn></mrow>]]></math><img file="FDA0001168245420000012.GIF" wi="1769" he="184" /></maths>其中,psd<sub>i,j</sub>是通过二值化以编号j=54a+3b‑37的像素点为中心,编号为j±1,j±18,j±18±1的像素点为八邻域组成的3×3图像块,计算得到的中心点的像素扩展差;A3、块分类:统计分量图像块X<sub>i</sub>中可改变像素点的个数L<sub>i</sub>,L<sub>i</sub>=∑p<sub>i,j</sub>,j=1,2,…,18×18,分量图像块X<sub>i</sub>中的L<sub>i</sub>个可改变像素点按从左至右、从上至下的顺序记为<img file="FDA0001168245420000021.GIF" wi="126" he="69" />c=1,2,…L<sub>i</sub>且<img file="FDA0001168245420000022.GIF" wi="203" he="67" />将开票日期、代码、号码、收款单位、税号、项目信息、金额和发票专用章所在的分量图像块X<sub>i</sub>归为关键类;不是关键类且可改变像素点的个数L<sub>i</sub>&gt;0的分量图像块归为非均匀类;不是关键类且可改变像素点的个数L<sub>i</sub>=0的分量图像块归为均匀类;B、水印的生成与嵌入B1、水印嵌入位置选择:对均匀类的分量图像块X<sub>i</sub>,通过密钥Key1在该分量图像块X<sub>i</sub>的II类像素点中选择8个像素点<img file="FDA0001168245420000023.GIF" wi="131" he="70" />这8个像素点的最低位作为图像块X<sub>i</sub>内的可嵌入水印位置,其中,h=1,2,…8,<img file="FDA0001168245420000024.GIF" wi="248" he="79" />q<sub>h</sub>为密钥Key1从分量图像块X<sub>i</sub>内选出的8个像素的编号;对非均匀类或关键类的分量图像块X<sub>i</sub>,可嵌入水印位置分为两部分:第一部分为密钥Key1在其II类像素点中选择的8个像素点<img file="FDA0001168245420000025.GIF" wi="97" he="69" />的最低位;第二部分为分量图像块X<sub>i</sub>中L<sub>i</sub>个可改变像素点<img file="FDA0001168245420000026.GIF" wi="99" he="71" />的低4位,共L<sub>i</sub>×4个嵌入位置;B2、映射位置生成:基于用户密钥Key2生成长度为N的实值伪随机序列R={r<sub>i</sub>|i=1,2,…,N},根据R生成块链{(X<sub>i</sub>,X<sub>i’</sub>)|i,i’∈[1,N]}以确定每个分量图像块X<sub>i</sub>相对应的分量映射块,其中i’为R中元素r<sub>i</sub>的值在R中按大小排序后的位置;B3、水印生成与嵌入:对于每个分量图像块X<sub>i</sub>,首先将分量图像块X<sub>i</sub>中的由B1步选择的8个像素点<img file="FDA0001168245420000027.GIF" wi="86" he="62" />和标识元素p<sub>i,j</sub>=1的对应像素点x<sub>i,j</sub>的像素值置为100,其余像素值不变,得到矩阵<img file="FDA0001168245420000028.GIF" wi="99" he="71" />然后根据其分量映射块X<sub>i’</sub>的类别完成水印的生成与嵌入:若其分量映射块X<sub>i’</sub>为均匀类,则将矩阵<img file="FDA0001168245420000029.GIF" wi="83" he="75" />相应二进制编码流进行哈希运算,得到长度为8的分量图像块X<sub>i</sub>的二值水印信息序列W<sub>i</sub>,<img file="FDA00011682454200000210.GIF" wi="477" he="79" /><img file="FDA00011682454200000211.GIF" wi="294" he="63" />通过依次修改分量映射块X<sub>i’</sub>内8个可嵌入像素<img file="FDA00011682454200000212.GIF" wi="396" he="71" />实现水印信息W<sub>i</sub>的嵌入,即:<img file="FDA0001168245420000031.GIF" wi="1054" he="102" />若其分量映射块X<sub>i’</sub>为非均匀类或关键类,则将矩阵<img file="FDA0001168245420000032.GIF" wi="81" he="70" />相应二进制编码流进行哈希运算,得到长度为L<sub>i’</sub>×4+8的分量图像块X<sub>i</sub>的二值水印信息序列W<sub>i</sub>,<img file="FDA0001168245420000033.GIF" wi="991" he="82" />通过依次修改分量映射块X<sub>i’</sub>内8个像素<img file="FDA0001168245420000034.GIF" wi="397" he="72" />和L<sub>i’</sub>个可改变像素<img file="FDA0001168245420000035.GIF" wi="102" he="69" />实现水印信息W<sub>i</sub>的嵌入,即:<img file="FDA0001168245420000036.GIF" wi="1861" he="230" />C、含水印彩色电子发票图像生成将发票图像中的区域(1:18m,1:18n)的R、G和B分量中的剩余分量进行以上A、B步的相同操作,直至得到发票图像含水印的全部分量,形成含水印的完整彩色电子发票图像;D、接收图像的块分类D1、图像分块:含水印的完整彩色电子发票图像经传输,接收后得到尺寸为(18m+u)×(18n+v)的彩色电子发票图像中的(1:18m,1:18n)区域的R、G和B分量中的一个接收分量图像Y;将接收分量图像Y划分成m×n个互不重叠的18×18接收分量图像块Y<sub>i</sub>,即Y={Y<sub>i</sub>|i=1,2…N},Y<sub>i</sub>={y<sub>i,j</sub>|j=1,2…18×18};其中,m为接收分量图像Y的行数除以18的商,u为接收分量图像Y的行数除以18的余数,n为接收分量图像Y的列数除以18的商,v为接收分量图像Y的列数除以18的余数,i为接收分量图像块Y<sub>i</sub>的编号,N=m×n为接收分量图像块个数,j为接收分量图像块Y<sub>i</sub>内像素的编号;D2、可改变像素点判定:将接收分量图像块Y<sub>i</sub>中的像素点y<sub>i,j</sub>分为I类像素点和II类像素点,分别记为Y<sub>i</sub><sup>1</sup>和Y<sub>i</sub><sup>2</sup>;<maths num="0003"><math><![CDATA[<mrow><msub><mi>y</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>&Element;</mo><mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><msubsup><mi>Y</mi><mi>i</mi><mn>1</mn></msubsup><mo>,</mo></mrow></mtd><mtd><mrow><mi>i</mi><mi>f</mi><mi> </mi><mi>j</mi><mo>=</mo><mn>54</mn><mi>a</mi><mo>+</mo><mn>3</mn><mi>b</mi><mo>-</mo><mn>37</mn><mo>,</mo><mi>a</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mo>...</mo><mn>6</mn><mo>,</mo><mi>b</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mo>...</mo><mn>6</mn></mrow></mtd></mtr><mtr><mtd><mrow><msubsup><mi>Y</mi><mi>i</mi><mn>2</mn></msubsup><mo>,</mo></mrow></mtd><mtd><mrow><mi>o</mi><mi>t</mi><mi>h</mi><mi>e</mi><mi>r</mi><mi>w</mi><mi>i</mi><mi>s</mi><mi>e</mi></mrow></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0001168245420000041.GIF" wi="1398" he="190" /></maths>用接收标识元素p<sup>*</sup><sub>i,j</sub>组成的接收标识矩阵P<sup>*</sup><sub>i</sub>={p<sup>*</sup><sub>i,j</sub>|j=1,2…18×18}记录接收分量图像块Y<sub>i</sub>中对应像素点y<sub>i,j</sub>的可改变性;接收标识元素p<sup>*</sup><sub>i,j</sub>的值为0的对应像素点y<sub>i,j</sub>为不可改变像素点,接收标识元素p<sup>*</sup><sub>i,j</sub>的值为1的对应像素点y<sub>i,j</sub>为可改变像素点;接收标识矩阵P<sup>*</sup><sub>i</sub>={p<sup>*</sup><sub>i,j</sub>|j=1,2…18×18}中所有元素p<sup>*</sup><sub>i,j</sub>的初始值均为0,并由下式计算出I类像素点的p<sup>*</sup><sub>i,j</sub>值,对接收标识矩阵P<sup>*</sup><sub>i</sub>中相应的元素p<sup>*</sup><sub>i,j</sub>的值进行更新:<maths num="0004"><math><![CDATA[<mrow><msubsup><mi>p</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mo>*</mo></msubsup><mo>=</mo><mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><mn>1</mn><mo>,</mo></mrow></mtd><mtd><mrow><mi>i</mi><mi>f</mi><mi> </mi><msubsup><mi>psd</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mo>*</mo></msubsup><mo>&le;</mo><mn>1.0</mn></mrow></mtd></mtr><mtr><mtd><mrow><mn>0</mn><mo>,</mo></mrow></mtd><mtd><mrow><mi>o</mi><mi>t</mi><mi>h</mi><mi>e</mi><mi>r</mi><mi>w</mi><mi>i</mi><mi>s</mi><mi>e</mi></mrow></mtd></mtr></mtable></mfenced><mo>,</mo><mi>j</mi><mo>=</mo><mn>54</mn><mi>a</mi><mo>+</mo><mn>3</mn><mi>b</mi><mo>-</mo><mn>37</mn><mo>,</mo><mi>a</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mo>...</mo><mn>6</mn><mo>,</mo><mi>b</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mo>...</mo><mn>6</mn></mrow>]]></math><img file="FDA0001168245420000042.GIF" wi="1750" he="191" /></maths>其中,psd<sup>*</sup><sub>i,j</sub>是通过二值化以编号j=54a+3b‑37的像素点为中心,编号为j±1,j±18,j±18±1的像素点为八邻域组成的3×3图像块,计算得到的中心点的像素扩展差;D3、块分类:统计接收分量图像块Y<sub>i</sub>中可改变像素点的个数L<sub>i</sub><sup>*</sup>,<img file="FDA0001168245420000043.GIF" wi="685" he="80" />接收分量图像块Y<sub>i</sub>中L<sub>i</sub><sup>*</sup>个可改变像素点的编号按从左至右、从上至下的顺序记为<img file="FDA0001168245420000044.GIF" wi="130" he="70" />c=1,2,…L<sub>i</sub><sup>*</sup>且<img file="FDA0001168245420000045.GIF" wi="195" he="94" />将开票日期、代码、号码、收款单位、税号、项目信息、金额和发票专用章所在的接收分量图像块Y<sub>i</sub>归为关键类;不是关键类且可改变像素点的个数L<sub>i</sub><sup>*</sup>&gt;0的接收分量图像块归为非均匀类;不是关键类且可改变像素点的个数L<sub>i</sub><sup>*</sup>=0的接收分量图像块归为均匀类;E、水印的重构与提取E1、映射位置生成:用B2步中的用户密钥Key2生成长度为N的实值伪随机序列R={r<sub>i</sub>|i=1,2,…,N},根据R生成块链{(Y<sub>i</sub>,Y<sub>i’</sub>)|i,i’∈[1,N]}以确定每个接收分量图像块Y<sub>i</sub>相对应的分量映射块,其中i’为R中元素r<sub>i</sub>的值在R中按大小排序后的位置;E2、水印提取:对每个接收分量图像块Y<sub>i</sub>,根据其接收分量映射块Y<sub>i’</sub>所属类别的不同提取水印信息W<sub>i</sub><sup>#</sup>:若接收分量映射块Y<sub>i’</sub>为均匀类,则用B1步的密钥Key1在该接收分量图像块Y<sub>i’</sub>中选出8个像素点<img file="FDA0001168245420000051.GIF" wi="147" he="66" />并从该8个像素点的最低位提取出接收分量图像块Y<sub>i</sub>的水印信息W<sub>i</sub><sup>#</sup>={w<sup>#</sup><sub>i,k</sub>|k=1,2,…,8},其中h=1,2,…8,<img file="FDA0001168245420000052.GIF" wi="270" he="82" />q<sub>h</sub>为从接收分量图像块Y<sub>i’</sub>内选出的像素的编号;若接收分量映射块Y<sub>i’</sub>为非均匀类或关键类,则用B1步的密钥Key1在该接收分量映射块Y<sub>i’</sub>内选出8个像素点<img file="FDA0001168245420000053.GIF" wi="114" he="70" />的最低位及L<sub>i’</sub><sup>*</sup>个可改变像素点<img file="FDA0001168245420000054.GIF" wi="103" he="71" />的低4位提取出接收分量图像块Y<sub>i</sub>的水印信息序列W<sub>i</sub><sup>#</sup>={w<sup>#</sup><sub>i,k</sub>|k=1,2,…,L<sub>i’</sub><sup>*</sup>×4+8};E3、水印重构:对每个接收分量图像块Y<sub>i</sub>,根据其接收分量映射块Y<sub>i’</sub>所属类别重构水印信息W<sub>i</sub><sup>*</sup>:若接收分量映射块Y<sub>i’</sub>为均匀类,则将B3步中的分量图像块X<sub>i</sub>替换为接收分量图像块Y<sub>i</sub>,再按B3步的同样操作,重构出长度为8的接收分量图像块Y<sub>i</sub>的水印信息W<sub>i</sub><sup>*</sup>={w<sup>*</sup><sub>i,k</sub>|k=1,2,…,8};若接收分量图像块Y<sub>i’</sub>为非均匀类或关键类,则将B3步中的分量图像块X<sub>i</sub>替换为接收分量图像块Y<sub>i</sub>,再按B3步的同样操作,重构出长度为L<sub>i’</sub><sup>*</sup>×4+8接收分量图像块Y<sub>i</sub>的水印信息W<sub>i</sub><sup>*</sup>={w<sup>*</sup><sub>i,k</sub>|k=1,2,…L<sub>i’</sub><sup>*</sup>×4+8};F、篡改认证F1、比较矩阵:比较重构水印W<sub>i</sub><sup>*</sup>与提取水印W<sub>i</sub><sup>#</sup>得到接收分量图像的比较矩阵D={d<sub>i</sub>|i=1,2,…,N},<maths num="0005"><math><![CDATA[<mrow><msub><mi>d</mi><mi>i</mi></msub><mo>=</mo><mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><mn>0</mn><mo>,</mo></mrow></mtd><mtd><mrow><mi>i</mi><mi>f</mi><mi> </mi><msubsup><mi>W</mi><mi>i</mi><mo>*</mo></msubsup><mo>=</mo><msubsup><mi>W</mi><mi>i</mi><mo>#</mo></msubsup></mrow></mtd></mtr><mtr><mtd><mrow><mn>1</mn><mo>,</mo></mrow></mtd><mtd><mrow><mi>o</mi><mi>t</mi><mi>h</mi><mi>e</mi><mi>r</mi><mi>w</mi><mi>i</mi><mi>s</mi><mi>e</mi></mrow></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0001168245420000061.GIF" wi="533" he="174" /></maths>F2、初态篡改检测矩阵:计算比较矩阵D的八邻域特征矩阵Δ={δ<sub>i</sub>|i=1,2,…,N},δ<sub>i</sub>=Σd<sub>j</sub>,j=i±1,i±n,i±n±1根据比较矩阵D及其八邻域特征矩阵Δ,生成初态篡改检测矩阵T<sup>0</sup>=(t<sub>i</sub><sup>0</sup>|i=1,2,…,N),<img file="FDA0001168245420000068.GIF" wi="759" he="181" />F3、次态1篡改检测矩阵:根据初态篡改检测矩阵T<sup>0</sup>,生成横向邻域扩展的次态1篡改检测矩阵T<sup>1</sup>=(t<sub>i</sub><sup>1</sup>|i=1,2,…,N);<img file="FDA0001168245420000069.GIF" wi="1239" he="303" />其中<img file="FDA0001168245420000064.GIF" wi="1303" he="87" /><img file="FDA0001168245420000065.GIF" wi="590" he="79" />F4、次态2篡改检测矩阵:根据F2步的初态检测矩阵T<sup>0</sup>,生成次态2篡改检测矩阵T<sup>2</sup>=(t<sub>i</sub><sup>2</sup>|i=1,2,…,N);<img file="FDA0001168245420000066.GIF" wi="1030" he="310" />其中<img file="FDA0001168245420000067.GIF" wi="947" he="87" />F5、接收分量图像块真实性判定:对关键类接收分量图像块Y<sub>i</sub>,若(t<sub>i</sub><sup>0</sup>=1)或(t<sub>i</sub><sup>0</sup>=0且t<sub>i</sub><sup>2</sup>=1),判定该接收分量图像块Y<sub>i</sub>为篡改块;若t<sub>i</sub><sup>0</sup>=0且t<sub>i</sub><sup>2</sup>=0,判定该接收分量图像块Y<sub>i</sub>未被篡改;对均匀类和非均匀类接收分量图像块Y<sub>i</sub>,若(t<sub>i</sub><sup>0</sup>=1且t<sub>i</sub><sup>1</sup>=1)或(t<sub>i</sub><sup>0</sup>=0且t<sub>i</sub><sup>2</sup>=1),判定该接收分量图像块Y<sub>i</sub>被篡改;若(t<sub>i</sub><sup>0</sup>=1且t<sub>i</sub><sup>1</sup>=0)或(t<sub>i</sub><sup>0</sup>=0且t<sub>i</sub><sup>2</sup>=0),判定该接收分量图像块Y<sub>i</sub>未被篡改;G、彩色图像块真实性判定将接收彩色电子发票图像中的区域(1:18m,1:18n)的R、G和B分量中的剩余分量进行以上D、E和F步的相同操作,直至得到接收发票图像三个分量的分量图像块的判断结果;若同一序号i的三个分量图像块Y<sub>i</sub>中有两个以上被判为篡改,则最终判定该接收电子发票中的彩色图像块为篡改块,并用选定的颜色在接收图像上该篡改块位置进行标示;否则判为真实彩色图像块。
地址 610031 四川省成都市二环路北一段111号