二维码水印加密并行化嵌入及提取方法
刘永俊1,2,秦立浩1
【摘 要】摘要:提出了一种并行化LSB(Parallel Least Significant Bit)算法,实现了二维码图像水印的嵌入、提取.对待处理图像数据进行分块并利用Open MP的编译制导指令进行任务分担,实现了运算过程的并行化.该方法嵌入水印的二维码图像具有较好的防伪验证功能,而且适合以电子形式保存,并行化处理方法较传统串行算法可缩短1/3左右的时间. 【期刊名称】常熟理工学院学报 【年(卷),期】2017(031)002 【总页数】4
【关键词】图像表示;数字水印;并行化算法
二维码图像具有容量大、可靠性高、全方位识别等特点,QR码被广泛应用于电子票证、火车票验证以及移动支付等领域.因此提高二维码的安全性和处理速度显得尤为重要.在二维码中嵌入特殊的水印信息可以解决数字内容的版权保护和信息安全问题,而充分挖掘CPU多核计算性能则可以提高处理速度.李娜等[1]对当前数字水印嵌入算法作了全面的研究和综述,分析了它的发展前景以及存在的问题.Ming Sun等[2]提出两种基于离散小波变换(Discrete Wavelet Transform,DWT)的QR码数字水印,分别可以嵌入随机序列和图片.Jau-Ji Shen等[3]针对PDF417码提出一种称作关联水印的盲水印算法,该算法可以提高水印的嵌入容量并可将PDF417码用于数据认证.Vongpradhip S等[4]针对QR码提出一种基于离散余弦变换(Discrete Cosine Transform,DCT)变换的数字水印算法,可以将加密信息隐藏于DCT
域的中频系数中.吕望述等[5]分析了对载体LSB替换隐写实现方法的RS攻击和如何抗RS攻击.苏亚娟[6]提出了将矩阵编码引入LSB替换,在保证一定峰值信噪比的前提下使得嵌入量提升了一倍.朱本威等[7]提出了基于改进的LSB的空域二维码水印嵌入算法,解决了电子形式数字水印的保存问题.
1 LSB水印嵌入/提取算法概述
1.1 基本思想
LSB(Least Singificant Bit)算法的基本原理是根据数字图像可分解为8个位平面图,改变最低位平面对原有图像的影响非常小.在二维码图像中,通过修改最低的几位就能达到隐藏大量信息的目的.
QR二维码的图像是由N*N个深色或者浅色的模块组成.在嵌入水印之前,先对二维码的灰度图像进行二值化处理,处理过程是遍历每一个像素点,设定一个阈值,对于小于等于阈值的像素,将其RGB分量都置0,也就是变成黑色,对于大于阈值的像素,将其RGB分量都置255,也就是变成白色.这样,原来的深色模块就为黑色,浅色模块就为白色.最后用RGB分量图构造成一个三维数组图像.选择其中的黑色模块进行LSB修改,这样能减少人眼对图像发生的变化产生明显的差异感.
在二维码图像上的像素按行排列时,若连续若干行中行与行间像素值相同,则这若干行模块处于同一层,如图1所示行与行处于不同层.上一层的下边界即为两层交界处,也就是嵌入行.从深色、浅色模块组成上,深色模块处于上一层,浅色模块处于下一层,深浅模块交界处是指深色模块下边界.两层交界处中的深浅模块交界处是嵌入段(用灰色阴影描出).
在非位置探测区域寻找具体嵌入位置包含两条规则:一是嵌入行处于两层交界
处;二是嵌入行中深浅模块交界处为嵌入段.
找到嵌入位置后嵌入水印,水印采用一组伪随机序列构成,在水印信息嵌入的过程中,每次从序列中提取2 bit大小的信息,然后根据表1方式改变对应像素最低位的值.其编码规则如表1所示. 1.2 水印嵌入方法
1)遍历二维码图像的每两行像素,如果第一行像素的像素值不同于第二行像素的像素值,则第一行可能为嵌入水印行,进入步骤2);
2)在可能嵌入水印行排除位置探测区的像素.并开始判断起始位,起始位判断规则是:如果该像素点为黑色且满足条件a(如图2所示,点左边和左下角像素点为黑色,下边像素点为白色),或者该像素点为黑色且满足条件b(如图3所示,左边像素点为白色,下边像素点为白色),则记录此像素坐标为水印起始位并进入步骤3),否则判断下一像素点;
3)从水印起始位像素坐标的后一位开始进行结束位判断,所述结束位判断为:如果该像素点为黑色且满足条件c(如图4所示,点右边像素点和右下角像素点为黑色,下边像素点为白色),或者该像素点为黑色且满足条件d(如图5所示,点右边像素点为白色,下边像素点为白色),则记录此像素坐标为水印结束位并进入步骤4),否则判断下一像素点;
4)顺序提取水印信息的2 bit大小的信息,按前述设定编码规则,改变水印起始位到水印结束位的每个像素RGB分量的最低位,如果水印结束位是该行最后一个像素,返回步骤1),找寻嵌入行;否则返回步骤2)从水印结束位对应像素点开始进行起始位判断,直至所有水印信息嵌入完毕. 1.3 水印提取方法
二维码水印加密并行化嵌入及提取方法
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)