面向防伪认证的PDF417=维码水印技术的实现
1 引言(Introduction)
二维条码本质上是一种特殊的二值图像,像素点集中只有0和1,即黑和白。结构简单,易于生成和读取,在商品识别、票证识别等方面有广泛运用。向二维条码中添加水印可以达到证件防伪和信息隐藏的目的。最常见的二维条码有QR(Quick Response)码和PDF417,本文重点研究的是PDF417(Portable Data File 417)码。
文献[1]提出了基于QR码的盲数字图像水印技术,使用密钥和抗攻击嵌入域提高的鲁棒性和视觉不可见性。文献[2]使用密钥技术对水印信息进行加密处理,提升了水印信息的安全性。文献[3]提出了基于DWT和SVD的防伪QR码水印算法,防伪性能和水印质量高。文献[4]提出了一种先用freeman链码和B样条曲线误差预处理后再将水印信息内容的散列值嵌入到图像中的方法,容量有所提高,但其算法实现复杂,信息受限。文献[5]使用小波变换在QR码中实现了水印嵌入。文献[6]利用变形技术,适当的改变原有图像的宽度已达到嵌入水印的目的,但水印容量较低。文献[7]在DCT(Discrete Cosine Transform)的基础上实现了一种利用了PDF417编码方法的水印嵌入算法,其水印信息的容量和稳健性有较大提高。文献[8]提出了一种了基于PDF417条码自身结构特点的水印信息隐藏方法,将条空结构进行适量的微调,在保证条码信息不丢失不畸变的前提下,将信息隐藏到条码中,但其抗水平畸变性能差。文献[9]在文献[8]的基础上修改了识别方法,牺牲容量换取了较好的鲁棒性。本文提出了一种基于文献[8]的竖直方向微调条空结构的水印明隐藏方法。
2 相关工作(Related work)
2.1 PDF417二维条码的基本原理
PDF417二维条码是由王寅君博士发明的,其识别的原子单位是模组,数字图像中每个模组可有若干个像素构成,每个PDF417的码字包含了长度不等的4个黑条与4个白条,单条宽度不超过6个模组宽,总数为17个模组宽度,故得名417。如图1所示,完整的PDF417条码由起始区、左层指示器、数据区、右层指示区、结束区组成。起始区和结束区标记了条码的开始和结束位置,左右层指示区表明了解码所需的,数据区存放条码所携带的信息。
图1 PDF417条码结构
Fig.1 The structure of PDF417 bar code
2.2 相关文献方法
面向防伪认证的PDF417水印技术主要包含嵌入和提取两个步骤。嵌入阶段需要计算容量和水印长度并进行一定的预处理,如添加校验信息、加密和编码压缩,将水印信息按一定的算法嵌入条码中。而提取阶段则要提取水印信息并进行相对应的解压、解密和校验。
文献[8]提出了一种基于条空的PDF417码的水印方法,其本质是在PDF417码允许误差范围内调整每个模块的宽度,其与标准值的差表明是否为1,连起来即为比特流形式的水印信息。其原理图如所示。这种方法可以顺利嵌入水印,并且暗隐藏模式下在视觉上不易被发现。但是由于利用了PDF417码允许误差的特点,导致实际图像发生误差允许内变形后水印信息误读,数据读取异常,鲁棒性较差。
图2 基于条空的水印方法
Fig.2 The watermark method based on bar blanks
文献[9]在文献[8]的基础下提出了一种新的基于码字条空误差的水印判断方法,根据一个码字中嵌入水印导致误差的正负来判断1和0,其原理图如图3所示。这种方法大大提升了水印信息的鲁棒性,但是容量也大打折扣。
图3 基于码字条空误差的判断方法
Fig.3 The judgment method based on error of the bar
blanks of code words
3 本文提出的算法(The algorithm proposed in this
paper)
本文提出了一种基于文献[8]的改进算法,在竖直方向上微调条空结构,几乎不影响水平方向的条空结构。使用本方法可以增加鲁棒性又不会缺失大量的容量。
3.1 预处理
3.1.1 图像二值化
图像在传播的过程中经常会被统一转换成彩色图像,如在安卓系统中图片在显示时会统一转换成bitmap位图,其色彩方案是ARGB。为了降低程序运行的难度和处理的数据量,需要先将其二值化处理。
首先分别读取R、G、B的数值,然后根据式(1)将图像转换成灰度图像,再根据式(2)的阈值将其二值化,其中A参数不影响结果,因此忽略。
(1)
(2)
另外一种获得二值化图像的方法是将像素与0x00808080按位与(80H=1000000B=128D),获得的值与0进行比较从而快速判断像素的黑白值。由于二维码图像的直方图会有明显且较宽的分界,此方法不会有太大的误差,处理速度更快。
表1 两种颜色二值化后的结果
Tab.1 The results of binaryzation for two colors
ARGB A R G B ARGB A R G B
原始值(灰色) FF 6F 6F 6F 原始值(乳白色) FF C9 DF 8A
按位与后 00 00 00 00 按位与后 00 80 80 80
判断结果 黑色 判断结果 白色
3.1.2 角度矫正
二维码在扫描后的图片会产生不同程度空间的倾斜,因此在处理前需要先将其矫正。利用Hough变换求出其边界再将其旋转到水平位置[4]。
3.1.3 水印预处理
若对水印本身有加密需要,可以再进行一定的加密算法。为了防止水印被篡改,还可以添加校验位,校验失败即认为水印是伪造的。如使用BASE64进行预编码。
3.1.4 图像定位和码字检测
图像经过预处理后可认为是理想情况,可以进行水印操作。首先确定二维码的四个顶点位置和模块大小。从头和尾进行定位两个对角点即可得到二维码有效区域。PDF417码拥有固定的起始区和结束区,因此可以快速得到模块宽度。对于未加工过的模块,其模块高度和条码高度必然满足式(3)的关系:
(3)
因此可以遍历数据区每个模块的高度,排除不满足式(3)后选取最小的值即为模块高度。由于PDF417码中的每个码字都有4个黑条和4个白条,数据区的每一行都不会出现全白或全黑的情况,此法具有较高的可靠性。
3.1.5 色块识别
以一个16*4的模块为例,读取其中一个色块即可获得模块的颜色信息,但是如果在这个色块出现严重噪声将会导致识别错误,因此可以读取35个点以排除误差。16*4模块如果进行边缘取反处理,那么其高度应为2即其水印部分只有2*4,选择35个点即可可靠获得模块颜色信息。
3.1.6 可用空间判断
本文提出的算法对嵌入空间有一定要求,上下同色的边界处改变色块会造成视觉显著变化,不适合隐藏,因此需要找出所有上下模组颜色不同的区域作为水印空间。这些水印空间有两种情况,即上黑下白和上白下黑。嵌入水印信息1时在边界白色区域添加一定高度黑条。
改变色块的高度影响分辨能力,越高越容易被发现,甚至影响PDF417码本身的识别,越低越容易导致程序本身无法识别。因此,本文中改变色块区域的高度均采用式(4),其中为码字高,[]表示取整数部分。
(4)
3.2 本文提出的水印嵌入算法
具体嵌入步骤如下:
(1)生成原始二维码和水印信息的比特流。
(2)对原始二维码进行定位。
(3)遍历可用空间。
(4)读取一位水印信息,为0不修改,为1添加黑条。
(5)判断可用空间是否用完,或水印是否全嵌入完毕。若空间有剩余,水印未嵌入完毕,重复步骤(3)。
(6)输出嵌入水印后的二维码图像。
程序流程图如图4所示。
图4 本文提出的水印嵌入算法流程图
Fig.4 The flow chart of the algorithm for watermark
embedding proposed in this paper
3.3 水印的提取
水印的提取算法与嵌入类似,具体步骤如下:
(1)图像预处理。
(2)对二维码图像进行定位。
(3)遍历可用空间。
(4)判断是否嵌入水印,嵌入水印比特流添加1,否则添加0。
(5)可用空间仍有空间则重复步骤(3)。
(6)输出比特流。
算法流程图如图5所示。
图5 本文提出的水印读取算法流程图
Fig.5 The flow chart of the algorithm for watermark
extraction proposed in this paper
4 实验结果及性能分析(Experimental results and
performance analysis)
4.1 鲁棒性分析
JPEG是一种对图像的有损压缩,量化质量因子Q为1100,Q越高,信息损失越少。本文对一个嵌入水印的PDF417码进行了Q=10、Q=40、Q=70的压缩攻击,均顺利得到正确的条码信息和水印信息。
表2 不同Q下二维码读取结果
Tab.2 The results of reading two-dimensional code
in different values of Q
质量因子 (a)原始 (b)Q=70 (c)Q=40 (d)Q=10
PDF417码图像
条码信息 华东理工大学 华东理工大学 华东理工大学 华东理工大学
水印信息 信息学院 信息学院 信息学院 信息学院
通过放大表2中d的PDF417码图像,可以发现图像已经有很大程度的失真。
图6 Q=10的局部放大图
Fig.6 The partial enlarged drawing when Q is
equals to 10
打印扫描会使图像损失信息、图形失真,在打印精度低的打印机和扫描机上尤为显著。
(a)打印扫描后图像整体图
(a)The global image after printing and scanning
(b)打印扫描后图像局部放大图
(b)The partial enlarged drawing after printing and scanning
(c)预处理后局部放大图
(c)The partial enlarged drawing after pretreatment
图7 打印扫描攻击结果分析