JPEG图像多域可逆信息隐藏及载荷分配算法
2022-08-12殷赵霞郭红念马文静吕皖丽张新鹏
殷赵霞 郭红念 杜 洋 马文静 吕皖丽 张新鹏
1(智能计算与信号处理教育部重点实验室(安徽大学) 合肥 230601)2(复旦大学计算机科学技术学院 上海 200433)
随着信息技术的发展,信息安全问题日益凸显,最近信息安全得到深入研究,主流方案包括加密[1]和信息隐藏[2].其中信息隐藏技术根据应用场景不同可分3类:数字水印[3]、隐写[4]与隐写分析[5]以及可逆信息隐藏[6](reversible data hiding, RDH).数字水印用于版权保护和完整性认证等领域,其最重要的属性是鲁棒性.隐写用于隐蔽通信,更加侧重于不可感知性,隐写分析检测是否存在秘密信息以至破坏隐蔽通信.RDH因其能无损地恢复原始载体,在军事、医学等领域得到广泛关注[7].目前很多RDH方法针对空域图像特性而设计,包括无损压缩法[8-9]、差值扩展法[10-11]和直方图平移法[12-13].JPEG(joint photographic experts group)是目前应用最广泛的压缩图像格式,由于JPEG图像中可利用冗余少且其对文件大小压缩率有一定要求,基于JPEG图像的RDH方法研究更具挑战和应用意义.迄今为止,基于JPEG图像的RDH方法可分为2类:1)基于离散余弦变换(discrete cosine transform, DCT)系数域修改[14-23],通过修改DCT系数来嵌入附加信息;2)基于熵编码域修改[24-28],通过修改JPEG码流来嵌入附加信息,该方法不会对载密图像造成视觉质量失真.
针对第1类基于DCT系数域修改的方法由文献[14]首次提出并给出2种方案:1)通过对交流 (alternating current, AC) 系数的最低有效位进行无损压缩以腾出空间用于嵌入附加信息;2)将缩放因子设置为2,即将量化表中的量化步长除以2,并将相应的量化AC系数乘以2以嵌入附加信息.文献[15]改进了文献[14],将缩放因子设置为k,并根据8×8块中不同位置的单位失真确定量化表的修改范围.文献[16]使用多轮直方图对修改策略嵌入附加信息.文献[17]采用直方图平移方式以幅值为±1的AC系数为峰值点实现信息嵌入,并采用块选择策略以减少视觉失真.文献[20]提出负影响模型,同时优化视觉质量和文件扩展.文献[21]采用多目标优化策略实现视觉质量和文件扩展的平衡.文献[22]通过多重直方图嵌入附加信息,并提出块平滑和频率平滑来提高性能.文献[23]提出了基于失真扩展代价的JPEG图像RDH,并定义单位失真增长比作为视觉质量与文件扩展的综合指标.基于DCT系数域修改的方法一定会引起文件膨胀与视觉质量失真.
第2类基于熵编码域修改的方法由文献[24]首次提出,由于需要采用重映射策略进行错误遮蔽,该方法会对载密图像造成一定程度视觉质量失真.随后,文献[25]在此基础上提出一种保持载密图像无失真且文件大小不变的方法,通过构建相同长度已使用和未使用变长码(variable-length code, VLC)之间的映射来嵌入附加信息.文献[26]通过VLC频率排序和映射优化提高嵌入容量.这些方法[25-26]在嵌入附加信息后,载密图像的视觉质量和文件大小保持不变,但是它们[25-26]的共同缺点是嵌入容量低.文献[27]在2018年提出一种新的基于熵编码域修改的方法,该方法在保持视觉质量不变的情况下提高了嵌入容量,但存在较大的文件扩展.2020年,文献[28]提出构建不等长编码之间的映射以实现高嵌入容量,并进一步建立模拟嵌入模型以减少文件扩展.
综上所述,基于DCT系数域修改的方法会导致视觉质量失真和文件扩展,但其嵌入容量较大,可以适用于更多应用场景.基于熵编码域修改的方法在低嵌入容量时不会导致文件扩展[25-26],但在高嵌入容量下会导致较大的文件扩展[27-28].对此,提出了一种JPEG多域RDH算法,为了保证所提算法能够更有效地减小视觉质量失真与文件扩展,本文进一步提出了JPEG图像多域RDH下的载荷分配算法.为了同时兼顾视觉质量与文件扩展,本文进行了多次的模拟嵌入以选择最优结果.实验结果表明,所提算法在文件扩展方面优于所有的方法,在视觉质量方面,所提算法则优于所有的基于DCT系数域修改的方法.
本文的主要贡献有2个方面:
1) 提出了JPEG图像多域RDH算法,将基于DCT系数域修改的方法与基于熵编码域修改的方法相结合.
2) 设计了一个基于VLC频率直方图的载荷分配算法.
1 相关工作
本节首先简要介绍JPEG图像压缩过程,在此基础上对2类JPEG图像RDH方法的嵌入规则进行简要回顾.
1.1 JPEG图像压缩过程
JPEG图像压缩过程如图1所示.首先将原始图像分为若干个8×8块,对每个块进行DCT;然后用量化表对每个块进行量化,并将量化后的DCT系数编码成中间格式.其中,直流系数采用差分脉冲编码调制编码,交流系数采用游程编码,编码为中间格式RLV(run/length, value),run/length用哈夫曼编码得到VLC码,value采用变长整数编码将VLC码与变长整数编码相结合,并与其他JPEG图像辅助信息进行整合,最终可得到压缩后的JPEG码流.
Fig. 1 JPEG images compression process图1 JPEG图像压缩过程
每个VLC对应于熵编码域中AC系数的RLV.VLC由哈夫曼编码得到,哈夫曼编码规则是将较短的码分配给频率较高的VLC,将较长的码分配给频率较低的VLC.AC系数对应于162个VLC,包括“0/0”“F/0”和160个run/length从“0/1”到“F/A”的编码,VLC的长度在2~16 b之间.
1.2 基于DCT系数域修改的嵌入规则
我们介绍了基于DCT系数域修改的JPEG图像RDH代表性文献[14-23].这些方法的实质是对DCT系数进行修改以嵌入附加信息.其中文献[17]利用直方图平移技术[12]将数据嵌入到非零AC系数中,文献[20-23]等在此基础上提出了一系列改进.以文献[17]为例,这类方法的嵌入规则简要描述为
其中,S(u,v)表示频率(u,v)处的原始DCT系数,b∈{0,1}表示即将嵌入的附加信息位,S′(u,v)表示频率(u,v)处的载密DCT系数.
1.3 基于熵编码域修改的嵌入规则
与基于DCT系数域修改的方法不同,基于熵编码域修改的方法不修改DCT系数,只修改熵编码信息,其本质是在VLC码之间建立映射,通过使未使用的VLC替换已使用的VLC来嵌入附加信息“1”,不替换则表示嵌入“0”.如果映射的VLC码的长度相同,则不会导致文件扩展[25-26],但嵌入容量有限,反之则会导致文件扩展[27-28],但显著提高嵌入容量.
图2展示了基于熵编码域修改的嵌入规则示例.首先将JPEG图像头文件中DHT段的VLC分为2类:已使用的VLC和未使用的VLC,记为VLCi,然后确立映射规则,如图2中VLC5,VLC6,VLC7,VLC8分别与VLC1,VLC2,VLC3,VLC4映射.如果嵌入的附加信息位为“0”,则VLC保持不变;如果嵌入的附加信息位为“1”,则用未使用的VLC替换已使用的VLC.需要注意的是,在已使用的VLC和未使用的VLC之间建立的映射关系可以是1对1或1对多,不能是多对1,因为多对1的映射会导致解码错误.
Fig. 2 Embedding data by modifying entropycoding domain图2 基于熵编码域修改的方法嵌入规则
2 JPEG图像多域RDH及载荷分配算法
为了有效减小载密图像的失真,本文提出JPEG图像多域RDH及载荷分配算法,其框架如图3所示:
Fig. 3 The framework of multi-domain RDH in JPEG images图3 JPEG图像多域RDH框架
载荷分配算法将附加信息分为M1和M2两部分,首先用基于DCT系数域修改的RDH方法嵌入M1,然后用基于熵编码域修改的方法嵌入M2.需要注意的是,先在熵编码域嵌入后在DCT系数域嵌入会导致编码错误,因此嵌入顺序不能调换.
那么,JPEG图像多域RDH关键问题在于合理分配附加信息到2个域中以实现尽可能小的视觉失真与文件扩展,即载荷分配算法的设计.
2.1 基于VLC频率直方图的载荷分配算法
由于文献[27]中建立的VLC频率直方图可以直观表现出编码域中不同编码的数量,方便根据已分配的载荷自适应选择峰值点以进行信息嵌入,因此本文修改编码域时采用的是文献[27]的算法.但所提算法的编码域嵌入过程与文献[27]略有不同,文献[27]通过载荷自适应选择峰值点,然后将峰值点与零值点之间的VLC根据频率大小降序排序,这样做并没有充分减少JPEG编码冗余.所提算法在选择峰值点之前对VLC频率直方图预处理,即所有VLC按照频率降序排序,然后根据载荷自适应选择峰值点,进一步减小编码冗余.
熵编码域的文件扩展是由2个操作引起的.通过预处理,可以得到按照频率降序排序的VLC频率直方图,依据文献[27],先根据附加信息的长度对VLC频率直方图平移,如图4(a)所示,然后修改VLC频率直方图以嵌入附加信息,如图4(b)所示.显然,该方法中的文件扩展由直方图平移和直方图修改引起,实验表明,由于2个相邻VLC码的长度差较小甚至为0,因此相比于由直方图平移引起的文件扩展,由直方图修改引起的文件扩展通常更小.因此,在2幅相同的图像上,根据文献[27]嵌入2个不同长度的附加信息,在选择的峰值点相同的条件下,即直方图平移操作相同时,导致的文件扩展可能很相近甚至相同,换句话说,载荷在一定范围内变化时,导致的文件扩展可能是一个固定值.
Fig. 4 The data embedding process of reference [27]图4 文献[27]的数据嵌入过程
通过分析,我们得出结论:1)载荷分配算法应保持熵编码域的文件扩展在一定范围内的同时最大化载荷;2)分配在熵编码域中的载荷长度应等于某个VLC频率.
分配在熵编码域中的载荷长度等于某个VLC频率,这在实际操作时会有困难,因为对DCT系数的修改会导致熵编码域发生变化,为了解决这个问题,本文采取的策略是实时修改VLC频率直方图.例如,一个AC系数的中间格式run/length为“0/1”,其编码后对应的VLC码为“00”;而另一个AC系数的中间格式run/length为“0/2”,其编码后对应的VLC码为“01”.如果对AC系数修改导致run/length编码后对应的VLC码由“00”变为“01”,则VLC码为“00”的频率将减少1,而VLC码为“01”的频率将增加1.修改AC系数阶段,若run/length不变,则VLC频率不变.本文采用多次模拟嵌入的方式,最终在所有的结果中选择最优值.以F={f1,f2,…,f162}和L分别表示VLC频率直方图和附加信息长度,第i次模拟嵌入时载荷分配算法步骤为:
算法1.载荷分配算法.
输入:初始化VLC频率直方图,附加信息总长度;
输出:更新后的VLC频率直方图,分配在2个域的附加信息长度.
步骤1. 在修改DCT系数域时,每嵌入1 b附加信息,记下该AC系数修改前与修改后的run/length.
2.2 附加信息的嵌入与提取
梳理了基于DCT系数域修改的代表性文献[14-23],本文以文献[20]为例描述DCT域的修改与嵌入算法.为了方便叙述,本文将分配在DCT系数域中的载荷长度记为L1,分配在熵编码域的载荷长度记为L2,总长度记为L.所提算法的具体嵌入步骤如下:
算法2.附加信息嵌入算法.
步骤1. 设i=1,对原始灰度JPEG图像进行解码,得到若干个量化后的8×8 DCT系数块D和VLC频率直方图,对VLC频率直方图按VLC频率排序,得到新的VLC频率直方图F={f1,f2,…,f162}.
步骤2. 根据零AC系数的个数对若干个DCT系数块D进行降序排序得到D′.
步骤3.根据总载荷长度L和频率选择策略选择前k个频率(仅考虑文件扩展).根据L和k,从D′中按顺序选择尽可能少的块.
步骤6.设i=i+1,返回步骤1,直到i=Z,计算得到所有结果的峰值信噪比用S={s1,s2,…,sz}表示,文件扩展表示为E={e1,e2,…,ez},分别将S和Z中每个元素都改为该元素在所有元素中的排名,其中S中的元素的排名按照从小到大,E中的元素的排名按照从大到小.
步骤7.S&E表示权衡视觉质量与文件扩展的综合指标,S&E越大表示此次嵌入的效果越佳.引入参数β(0<β<1),通过调节β值以权衡文件扩展与视觉质量,如β=0,则只关注于文件扩展,如β=1,则只关注于视觉质量.我们得到每次嵌入的结果S&E:
S&E(i)=βsi+(1-β)ei,
(2)
其中,si与ei分别表示第i次嵌入时的峰值信噪比与文件扩展的在Z次嵌入中的排名.
步骤8.从最终结果S&E中选择最大值,作为载荷分配最佳的嵌入结果.
所有附加信息嵌入之后,生成载密JPEG图像.在附加信息提取阶段,首先提取嵌入在熵编码域的附加信息,然后提取嵌入在DCT系数域中的附加信息.附加信息提取和原始图像恢复的过程如下:
算法3.附加信息提取算法.
步骤1. 解析JPEG图像的DHT段和熵编码段,计算编码段中VLC的频率,然后根据DHT段的run/length序列生成VLC频率分布直方图.
步骤2. 在DHT段中找到2个run/length相同的VLC,即P和零点Z′.
步骤3. 扫描熵编码段,根据文献[27]提取附加信息,直到提取L2位附加信息,并生成部分恢复的JPEG图像.
步骤4. 根据run′和L2,从排序后的DCT系数块中选择尽可能少的块.
步骤5. 设run=0,从n′个DCT块中,频率属于前k′个选定频率的且零游程长度等于run的非零AC系数,按照文献[20]提取附加信息并恢复原始系数.
步骤6. 设run=run+1,重复步骤5,直到提取L1位,生成恢复的JPEG灰度图像.
2.3 辅助信息
为了保证所提算法的可逆性,需要将辅助信息存放在JPEG图像头文件中.在DCT系数域的嵌入阶段,附加信息嵌入完毕之后需要记下所选频率、所选块数、DCT系数域最后一个附加信息嵌入时的零游程长度,以及L1和L2的长度.在8×8的DCT系数块中,直流系数不携带附加信息,其余63个交流系数均可能作为附加信息的载体,因此所选频率用63 b的频率选择图表示,被选中的为“1”,没有被选中的为“0”.以512×512的灰度图像为例,块数一共212个,因此用12 b表示选择的块数.在DCT系数域的嵌入阶段,零游程长度的最小值为0,最大值为63,即零游程长度可以用6 b表示.嵌入在DCT系数域或者熵编码域的附加信息长度一般不大于212×26,因此用2个18 b分别表示L1和L2.辅助信息的总长度为63+12+6+18+18共117 b.
3 实验结果
我们从UCID[29]数据库中随机选取50幅图像测试,将这50幅图像用标准哈夫曼表压缩成质量因子(quality factor,QF)分别为50,70,90的JPEG图像,将50幅图像的测试结果平均得到最终结果.峰值信噪比(peak signal to noise ratio,PSNR)和文件扩展(filesize expansion,FE)是评估JPEG图像RDH的最重要指标,若PSNR越大或FE越小,表示载密图像与原始图像越接近,则算法性能越好.为了证明所提算法的先进性,我们将其与目前最先进的方法进行比较,包括基于DCT系数域修改的方法[20-23]和基于熵编码域修改的方法[28].
3.1 视觉质量与文件扩展
基于熵编码域修改的方法[28]只修改熵编码域,不会造成视觉质量失真,本文不与之比较PSNR.在不同质量因子下的实验结果如图5~7所示,其中横坐标是嵌入不同长度的载荷,纵坐标是文件扩展或PSNR.需要注意的是,在文献[20]中,为权衡文件扩展和视觉质量,引入了参数α,当α=1时,只考虑文件扩展,而PSNR较低;反之,参数α=0时,只考虑视觉质量,文件扩展较大.因此,当比较文件扩展时,该参数α=1,当比较PSNR时,α=0.为了更好地权衡视觉质量与文件扩展,所提算法中的参数β设置为0.6与0.7.
从图5~7可以看出,当质量因子为50,70,90时,无论所提算法中的β是0.7或是0.6,所提算法的文件扩展都明显优于其他所有方法[20-23,28],并且
Fig. 5 Average file expansion and PSNR when QF=50图5 QF=50时的平均文件扩展和峰值信噪比
Fig. 6 Average file expansion and PSNR when QF=70图6 QF=70时的平均文件扩展和峰值信噪比
Fig. 7 Average file expansion and PSNR when QF=90图7 QF=90时的平均文件扩展和峰值信噪比
可以看出文献[23]与文献[20]的文件扩展非常相近,甚至在质量因子为70,90的时候优于基于熵编码域修改的文献[28],这得益于文献[23]对导致文件扩展原因的深入探索.在质量因子为90、载荷为2 000 b时,所提算法的文件扩展出现负数,这不仅仅是因为所提算法中有预处理的优化过程,最重要的原因是载荷分配算法合理的分配载荷,这充分表现了所提算法的有效性.当β=0.7时,所提算法的PSNR优于所有基于DCT系数域修改的RDH方法[20-23].当β=0.6时,在质量因子为50,70,90且载荷分别小于6 500 b,12 000 b,14 000 b的条件下,所提算法的PSNR仍然最高;在质量因子为50,70,90且载荷分别大于8 000 b,14 000 b,17 000 b的条件下,所提算法的PSNR低于文献[22],但仍然高于其他方法.由图5~7中可以看出,文献[23]的PSNR低于其他方法,因为其他方法均对视觉质量做了优化.
除此之外,本文还探究了所提算法中不同参数值对实验结果的影响.以质量因子等于90为例,取值分别为0.1,0.3,0.5,0.7,0.9(β=1时,所提算法即退化为单域嵌入算法,所有附加信息都嵌入在编码域中,因此不展示β=1的结果),实验结果如图8所示.从图8中可以看出,所提算法的文件扩展随着β的减小不断减小,同时PSNR也降低,当β降到最低时,所提算法的文件扩展达到最佳,然而此时的PSNR最低.为了权衡文件扩展与视觉质量,在实验中β通常被设置为0.6或0.7.由此可以看出,作为权衡视觉质量与文件扩展的关键参数β,可以通过用户自定义调节来侧重于某一指标.
Fig. 8 The influence of different parameter values on experimental results (QF=90)图8 不同参数值对实验结果的影响(QF=90)
3.2 单位失真增长比
一个好的JPEG图像的可逆信息隐藏算法应该综合考虑图像的视觉质量和文件扩展,因此本文采用单位失真-增长比[23](unit distortion-increase ratio,UDIR)作为综合评价指标:
(3)
其中,分子是PSNR与载荷长度的乘积,分母是文件扩展大小.PSNR和L越高或者FE越小,则UDIR越高,即算法越好.由于所提算法的文件扩展在β=0.6时会出现零扩展或负扩展,因此本文只展示β=0.7时的实验结果,如图9~11所示.图9~11显示了与图5~7相同的条件下的实验结果,同样是50幅UCID数据集图像的测试结果平均.横坐标是嵌入不同长度的载荷,纵坐标是UDIR.由于基于熵编码域修改的方法[28]是无损的,即均方差为0对应的PSNR值无限大,因此只比较基于DCT系数域修改的方法.从图9~11可以看出,在嵌入任何长度载荷下,所提算法的UDIR高于其他所有RDH方法.甚至在载荷为2 000 b、质量因子分别为50,90时,本文算法的UDIR分别达到了348,1 022,这是因为所提算法的文件扩展得到了有效的抑制.以质量因子等于90为例,其他方法的UDIR在26 000 b时与所提算法最接近,此时所提算法的UDIR为38.98,而其他方法中最高的UDIR(文献[20])只有25.68.这表明本文的方法能够更好地平衡视觉质量和文件扩展,这是因为本文利用2个域特点提出的载荷分配算法有效地减少了文件扩展和视觉质量失真.另外可以看出文献[20](α=1),文献[22-23]的UDIR非常接近,因为文献[20]提出的文件扩展子模型显著地降低了文件扩展,文献[22]的多直方图修改也有效地权衡了PSNR和文件扩展,文献[23]同样对文件扩展的降低做了深入探索.
Fig. 9 Average UDIR when QF=50图9 QF=50时的平均UDIR
Fig. 10 Average UDIR when QF=70图10 QF=70时的平均UDIR
Fig. 11 Average UDIR when QF=90图11 QF=90时的平均UDIR
4 总 结
本文针对应用最广泛的图像格式JPEG,梳理了当前JPEG图像可逆信息隐藏前沿技术及存在的问题,针对性地提出JPEG图像多域可逆信息隐藏算法,同时考虑在DCT系数域和熵编码域嵌入信息,并给出了载荷的合理分配算法.进一步地,在熵编码域和DCT域均采用当前最先进的嵌入算法为例,验证了所提JPEG图像多域可逆信息隐藏思路和载荷分配算法的有效性.实验结果表明:与现有的基于DCT系数域修改的方法[20-23]相比,该算法具有最佳的视觉质量、最小的文件扩展和更高的单位失真增长比,与基于熵编码域修改的方法[28]相比,该算法有更小的文件扩展.
目前JPEG图像多域RDH仍然有很多值得探索的方向,载荷分配算法作为JPEG图像多域RDH的关键问题,应当受到更多的关注.DCT系数域与熵编码域的构造不同,导致的失真也各不相同,并且2个域的变化会相互影响,这是设计载荷分配算法时必须考虑的,研究者们需要兼顾多个因素以达到最小化失真.