APP下载

基于FPGA的JPEG图像数字水印系统

2022-02-18陈鑫石东张颖

数据采集与处理 2022年1期
关键词:二值鲁棒性编码

陈鑫,石东,张颖

(南京航空航天大学电子信息工程学院,南京 211106)

引 言

数字水印的概念最初由Van Schyndel等在1994年提出,并自此迅速成为研究热点[1]。而图像水印是数字水印技术应用最为广泛的水印类型,在多媒体水印技术中占有极其重要的地位[2]。

传统的图像水印算法是基于空域实现,通过直接修改原始图像的像素值来实现水印信息嵌入。Van Schyndel等[3]提出了利用m序列修改图像数据最低位的水印嵌入方法,这种LSB(Least significant bits)算法利用了m序列良好的自相关性,便于水印的检测与提取,但抗攻击能力弱、稳健性差。随后Bender等[4]提出一种Patchwork算法。其基本思想是随机选取像素点,增加一个点的亮度值,然后相应降低另一个点的亮度值,借以隐藏水印信息。但是总体来说这类算法都比较脆弱,通过一些常规的信号处理操作,就能轻易抹掉隐藏的水印信息。

因此,研究者开始通过修改图像变换域中的变换系数来嵌入水印信息,包括离散傅氏变换、离散余弦变换、离散小波变换和奇异值分解等[5]。为了实现水印的隐蔽性与鲁棒性之间的平衡,很多研究工作基于这几种图像变换自身的特点,对水印嵌入算法提出了不同程度的改进。曾琳玲[6]就提出了一种同时结合Arnold变换、离散小波变换和奇异值分解的双彩色图像水印算法。

但是,JPEG压缩是一种不可恢复的有损图像压缩方式,针对这种图像的可逆水印比较困难,水印嵌入需要和具体的图像压缩算法进行结合。Akira等[7]通过修改每个8×8块DCT系数的最后一个非零数后的零系数,即用新的非零数值替换原位置的“0”,一次可以嵌入若干比特水印信息。刘磊等[8]利用JPEG图像DCT系数的零系数间隔确定修改的位置,利用间隔中零系数的个数确定水印嵌入量,进而嵌入水印信息。何顺等[9]随后提出一种改进的水印算法。每一个带有零间隔的DCT块分别嵌入2位水印信息,并且将这2位水印信息嵌入到DCT块最后一个非零系数之后的第1或者第2位零系数中,提升了水印图像的不可见性。

本文在上述研究基础上,给出了一种基于JPEG压缩域的改进LSB嵌入算法,该算法利用DCT系数的符号位与最低位进行水印信息的嵌入,不仅具有嵌入容量大的优点,还具有良好的隐蔽性。最终,为了验证本系统的实用性,还设计了一套完整的JPEG水印编码软硬件系统解决方案,实现了在JPEG图像中水印信息的实时嵌入以及上位机对水印编码的控制和回显预览。

1 系统总体设计框架

1.1 水印嵌入流程

传统JPEG编码流程包含5个部分:YCbCr色彩空间转换(RGBtoYCbCr)、二维离散余弦变换(2D⁃DCT)、之字形扫描、量化编码和熵编码。

如图1所示,本文选择在量化编码和熵编码之间嵌入水印,主要有两点原因:(1)根据人类对低频分量敏感、对高频分量不敏感的视觉特性,在图像的DCT频域内进行针对性地水印嵌入,提高算法不可见性与鲁棒性;(2)防止量化编码破坏水印信息。

因此,本文含有水印嵌入的JPEG编码过程有4个步骤,具体如下:

(1)对原始载体图像I进行YCbCr色度空间转换与重采样,再进行DCT变换、之字形扫描与量化编码。

(2)对原始水印图像W进行预处理,包括二值化处理与K次的Arnold变换,得到待嵌入二值水印序列W′,具体内容如第2节所示。

(3)水印嵌入模块从水印信息预处理模块读取二值水印序列,根据第3节中的嵌入算法对量化后的DCT系数矩阵进行水印嵌入,并将嵌入了水印的DCT系数矩阵送入后面的熵编码模块。

(4)继续进行JPEG压缩编码流程中的熵编码,得到含水印的JPEG图像。

1.2 水印提取流程

水印提取的过程实质上是水印嵌入的逆过程,在下文不再赘述。过程如下:

(1)对嵌入水印后的JPEG图像I′进行熵解码的解压缩操作。

(2)在JPEG熵解码后的系数矩阵中,选出对应的DCT系数矩阵,根据第3节中的嵌入算法,进行逆运算,最终得到加密的水印序列W′。

(3)根据嵌入密钥K,对提取出的水印序列W′作(T-K)次Arnold变换,恢复其相关性,最终得到有意义的水印信息。

2 水印信息预处理模块

2.1 RGB彩色图像二值化处理

RGB彩色图像二值化处理用于将彩色水印图像或者二值水印图像转换为一维二值水印信息序列,以压缩水印信息量。其过程是首先将图像转为灰度图,然后设置阈值,将灰度图转为黑白图。

图像灰度值计算为

黑白图转换公式为

式中:Gray为图像灰度值,Tg为参考阈值。为了方便计算与提高运算速度,采用图像灰度值的中值127作为参考阈值。从而,生成了一个数据位宽为1的二维二值水印序列。若原始彩色水印图像是24位色,则信息量压缩到原来的1/24。

2.2 Arnold置乱变换

Arnold置乱变换用于水印信息的加密以及增强水印的鲁棒性。

对于一个N×N的数值矩阵,其二维Arnold置乱变换为

式中:0≤xi,yi,xi+1,yi+1≤N-1,N为数值矩阵阶数,mod为模N运算。

通过上述变换公式,Arnold置乱变换将(xi,yi)处的矩阵值移动到(xi+1,yi+1)处。通过多次Arnold置乱变换,最终能得到杂乱无序的二值水印序列。但是Arnold置乱变换具有周期性,对其再经过若干次Arnold变换后,一定会恢复到Arnold置乱变换之前的原始二值序列。因此,Arnold置乱变换的周期特性非常有利于数字水印的提取。

由表1可知,随着矩阵阶数的增加,Arnold变换周期也随之增加。综合考虑置乱变换的计算量大小以及水印算法的隐蔽性,本文采用阶数32、周期24的置乱变换,即将二值水印序列分割为多个32×32的小块,各个小块独立进行Arnold置乱,减少计算工作量。

表1 常用阶数的最小Arnold置乱周期(T)Table 1 Minimum Arnold scrambling period of common order

图2为水印序列Arnold变换实现的结构框图。读地址的高5位Raddr[14:10]用于选择不同的块,Raddr[9:0]则送入Arnold读地址映射单元。

图2 Arnold变换实现结构框图Fig.2 Block diagram of Arnold transform

Arnold读地址映射器实际上是一个1 024×10 b的数据RAM,存放对0~1 023连续计数值进行Ar⁃nold变换后的结果,指示了当前外部读地址的提取数据在原始RAM中水印序列的存储位置。可以用于加速Arnold置乱变换的运算过程。例如,若Arnold读地址映射器地址0存放的数值为28,则外部模块提取的Arnold变换置换的第0个数据存放在二值水印ROM地址为28的位置中。

3 改进LSB算法

本文将传统时域(空域)中的LSB算法应用到DCT变换域,并对其作了适当的改进,设计实现了一种嵌入容量可调的LSB嵌入算法,通过修改量化后的DCT系数值来实现水印的嵌入。

算法的实现过程描述如下,对量化后的8×8 DCT系数矩阵进行之字形扫描,然后选定一个嵌入起始地址AddrL(取值0~63)和欲嵌入信息位的长度BitLen,对起始地址往后的BitLen长度内的DCT系数Qi作运算后得到Q′i,具体运算过程如下:

(1)如式(4)所示,DCT系数Qi的高11位保持不变。

(2)若DCT系数Qi嵌入的二值水印为1,Qi[0]运算公式则为

(3)若嵌入的二值水印为0,Qi[0]运算公式则为

式中:i为当前DCT系数块的Z字形扫描序列,且0≤i≤63,Qi为量化后的DCT系数,数据位宽为12,Q′i为嵌入水印后的DCT系数值。

由上述内容可知,改进的LSB算法的本质是利用DCT系数值的最高位与最低位的关系,修改最低位的值来实现水印嵌入。并且通过AddrL与BitLen的设置,实现了0~64嵌入容量的自由调节。

当嵌入二值水印为1时,若原载体图像的DCT系数为正偶数、0或者负奇数时,嵌入过程不会改变原DCT系数值。由于量化后的DCT系数中存在大量的0值系数,故当二值水印序列中1的占比较大时,对DCT系数矩阵的改动也会相应减少,适用于白色分量居多的二值水印图像。相较于传统LSB算法的直接暴力地用水印信息替换最低位,该算法对原图的影响更小,不可见性更好。

此外,综合考虑人类视觉对频域系数的敏感特性和水印的鲁棒性与不可见性,本文选择起始地址AddrL为6的中频系数区域进行水印嵌入,并且设定水印信息嵌入长度BitLen=16,每个8×8的图像块嵌入16 b的水印信息序列。分别采用本文设计的LSB嵌入算法和传统LSB算法对图3(a)中量化后的DCT系数矩阵进行水印嵌入,嵌入16 b的全1水印序列(16’hFFFF),最后结果如图3(b)和图3(c)所示。斜线小方块表示嵌入前后变化了的DCT系数值。可以发现对于全1序列前者仅修改了4个DCT系数实现了16 b水印信息的嵌入,改动量为传统LSB算法的二分之一。

图3 嵌入结果对比Fig.3 Embedding results comparison

4 系统验证

4.1 验证平台

本文采用Xilinx的Virtex⁃7 VC707评估套件作为硬件开发测试平台,内部系统时钟频率为250 MHz,分辨率1 920像素×1 440像素、数据量7.9 MB的BMP图像作为测试图像,对本文设计内容进行实测验证。

为了方便控制硬件模块,本文还设计一个上位机软件,实现对图像的传输及水印嵌入过程的控制。上位机的GUI界面由图像加载界面、图像预览界面、命令控制寄存器配置界面、DMA参数配置界面和Log信息预览界面5部分组成。

4.2 不可见性测试

图4为原始载体图像、原始水印图像、嵌入水印的JPEG水印载体图像以及无水印的原始JPEG图像对比示意图。图4(c)与图4(d)的峰值信噪比(PSNR)为41.10 dB。但是,相比于原始JPEG图像,水印信息的嵌入并未引起JPEG水印载体图像的失真,因此该水印算法具有主观上良好的不可见性。

图4 二维码水印嵌入结果Fig.4 Watermark embedding result of QR code

表2以PSNR作为不可见性指标,将本文改进的LSB算法与复现的传统LSB算法,以及和已经发表的论文进行了对比。文献[6]嵌入的数据量更多,但是PSNR指标低于本文结果的14.26%。在嵌入数据的比特数相同及更少的情况下,其他设计的PSNR是本文结果的70.39%~83.99%,由此可见本文实现的水印嵌入算法具有更好的不可见性。

表2 PSNR性能对比Table 2 PSNR performance comparison

4.3 鲁棒性测试

为了验证本文改进LSB算法的鲁棒性,本文对嵌入了水印信息的图像进行各种攻击实验,然后从被攻击后的图像中再提取水印图像,并以相似系数(NC)为指标与原水印进行比较分析。

图5所示的是裁剪32×32的小块后,攻击后的图像和提取出的水印图像。图6为均值0,方差0.005的高斯噪声和椒盐噪声攻击实验的结果。图7为压缩质量Q为50的JPEG压缩攻击实验结果。

如图5~7所示,水印载体图像在受到各种噪声攻击后,仍能提取出水印信息,显示改进LSB方法具有一定的抗攻击能力。同时,表3将本文改进的LSB算法与传统LSB算法进行鲁棒性的性能对比。由表3可知改进LSB的NC值更大,有更好的还原性能。

图5 裁剪32×32攻击实验结果Fig.5 Experimental results of 32×32 clip⁃ping attack

图6 噪声攻击实验(噪声密度0.005)Fig.6 Experimental results of noise attack(noise density is 0.005)

图7 JPEG压缩攻击实验(Q=50)Fig.7 Experimental results of JPEG compress attack(Q=50)

表3 NC性能对比Table 3 NC performance comparison

4.4 处理速度测试

本文最后还进行了处理速度测试。由于本文提出的改进LSB方法易于采用流水线设计,所以处理速度主要取决于搭载硬件的电路性能。在输入接口数据宽度为128 b时,处理数据带宽最高可达128 b×250 MHz=32 Gb/s,体现了基于FPGA实现水印嵌入功能的优越性。

5 结束语

本文对JPEG图像数字水印进行了深入的研究与设计,提出了一种结合图像压缩算法的改进LSB嵌入方法。该方法不仅嵌入容量大,隐蔽性好,还利于硬件实现。在Xilinx Virtex⁃7 VC707评估套件上输入接口数据宽度为128 b时,处理数据带宽最高可达32 Gb/s。基于FPGA设计完成了JPEG数字水印系统,最后通过测试平台对水印编码系统的水印嵌入功能进行了测试与验证,验证了本系统的实用性。但是,在图像中增加嵌入的水印数据量,将会恶化PSNR指标和鲁棒性。如何在嵌入数据量、PSNR指标和鲁棒性上取得较好的平衡,目前还未得以解决,这也是今后本文进一步的研究方向。

猜你喜欢

二值鲁棒性编码
生活中的编码
武汉轨道交通重点车站识别及网络鲁棒性研究
《全元诗》未编码疑难字考辨十五则
荒漠绿洲区潜在生态网络增边优化鲁棒性分析
子带编码在图像压缩编码中的应用
基于确定性指标的弦支结构鲁棒性评价
Genome and healthcare
面向网络边缘应用的新一代神经网络
基于二值图像数字水印算法研究
基于稀疏表示的二值图像超分辨率重建算法