全 蕾
(东华理工大学 长江学院, 江西 抚州 344100)
由于数字图像很容易被复制并修改,加强数字图像的安全性越来越重要。很多传统的图像加密[1]技术可以用来确保数字图像的安全性,却难以保证图像的完整性。因此,用于保护图像完整性的认证方法逐渐成为热门研究课题。
通常,图像认证方法可分为两大类[2]:被动认证和主动认证。被动图像认证又才称数字图像取证,除了使用数字图像本身外,没有使用任何附加信息来进行数字图像认证。主动图像认证方法主要有基于签名的方法和基于水印的方法[3]。本文主要研究基于水印的方法。
目前,脆弱水印、半脆弱水印和自我恢复水印机制是图像认证中较有前景的研究方向。脆弱水印机制是指在所有图像修改都是“脆弱”的,可被修改和检测定位。半脆弱水印可以抵御一些图像修改并检测某些恶意修改。自我恢复水印机制不仅可以进行防篡改检测,还可以恢复图像。例如文献[4]提出了一种基于自适应比特分配机制的脆弱水印,该方法能够抵御JPEG图像的有损压缩。文献[5]提出了一种基于量化的半脆弱水印改进方法。将水印信息的生成与嵌入均放在原载体图像,认证过程无需原载体图像和秘密水印的参与,提高了安全性和保密性。文献[6]提出了基于计算全息的半脆弱图像认证及恢复水印算法,其特点是对于恶意篡改良好的脆弱性,水印信息抵抗性强。文献[7]提出了一种混合图像认证方法,使用了一个混合策略嵌入认证码,并利用绝对矩阵方块编码(Absolute Matrix Block Truncation Coding,AMBTC)以适应不同的嵌入方法,提高嵌入效率。该方法提高了嵌入量和图像质量。文献[8]提出了针对方块编码(Block Truncation Coding,BTC)压缩图像的图像认证机制。在每个图像块的位图文件中嵌入认证码,根据修改过的位图文件计算每个块的量化级。其主要特点是将多个认证数据的拷贝文件嵌入位图,提高了图像嵌入质量。文献[9]提出了一种基于B树的防篡改和恢复机制,该方法主要借助已有和数据库安全性和B树索引技术。文献[10]提出了一种基于不可见Unicode字符的文本水印嵌入和提取方法,将水印信息替换为不可见字符串,嵌入到特定位置,通过水印的哈希信息使文本具有防篡改能力。但仅利用哈希信息难以较好进行防篡改检测,一般可利用更多其他信息,如QR码[11]等。
上述图像认证方法大多只进行防篡改检测,在防篡改的同时缺乏图像恢复。为此,本文提出一种针对BTC压缩图像的脆弱水印方法,其中,认证数据嵌入BTC压缩块的量化电平,以提供防篡改检测的能力,本文将认证数据嵌入BTC压缩块的量化级中,将图像块的恢复数据隐藏在位图文件中,使用平滑块的位图文件储存恢复数据,使之具有图像恢复功能。本文的主要工作如下:提出了一种基于BTC的防篡改检测方法,具有较高的检测精度和图像嵌入的质量;本文将认证数据嵌入到BTC压缩块,提出了二阶段篡改提取方法,使得所提方法具有较好的篡改后的恢复效果。
为了提供检测防篡改的能力,本文将认证数据嵌入BTC压缩块的量化级中。为了提供图像恢复功能,将图像块的恢复数据隐藏在位图文件中,只使用平滑块的位图文件储存恢复数据。所提方法包含以下4个步骤:生成认证数据和恢复数据、嵌入数据、防篡改检测、图像恢复。
在嵌入数据之前,需要生成认证数据和恢复数据。假设BTC压缩图像的尺寸为W×H。将块的大小设定为n×n时,图像块的总数tn为
(1)
所有的图像块存入3层库(a,b,BM)中。假设blen表示被嵌入每个压缩块中的认证码比特长度,为了生成压缩块的认证码,本文使用虚拟随机数生成器[12]来生成tn随机值。其中,用户选择的随机种子为sdac。利用式(2)将每个随机值rv转化为认证码ac的比特长:
ac=cvmod 2blen
(2)
为了生成每个BTC压缩图像块的恢复编码(rc),需要计算压缩块中像素的平均值。注意压缩信息中并没有记录所有的BTC压缩块像素,但是使用两个量化电平和位图文件可以计算出像素的平均值[13]。平均值可以用作每个压缩块的恢复节点。通过有序地生成每个图像块的恢复节点,就可以获得整个图像的恢复节点。
本小节介绍认证数据和恢复数据嵌入BTC压缩图像的压缩节点。即,认证数据嵌入图像块中量化级的不同值,恢复数据嵌入到平滑块的位图文件中。首先利用公式(3)计算每个压缩块中量化级a和b的差值dif来确定压缩块的类型是否平滑:
dif=b-a
(3)
使用式(4)确定每个压缩块的块类型:
(4)
式(4)中,TH是用于块类型分类的阈值。如果压缩块中两个量化级之间的绝对差值低于或等于TH,则为平滑块,反之,分为复杂块。
为了将认证码及认证码的比特长度存入三层库中,使用下式将差值转换为认证码比特长度的校验值p。
p=difmod 2blen
(5)
如果p等于ac,则不必对量化级a和b作改变。反之,调整这两个量化级,使两个修改过的量化级的差异值与认证码有相同的比特长度。调整量化级的步骤如下:
1) 固定量化级a,并基于模函数确定第二个量化级b的最佳备选bs;
2) 确定每一个压缩块的块类型;
3) 调整量化级a和bs,使认证编码嵌入的失真率最低。调整量化级如下式:
(6)
式(6)中,disp=⎣(dif-dv)/2」,表示待调整量化电平的位移,dv是a和的差值。
完成以上3个步骤后,就可以将认证编码ac嵌入到压缩图像块的修改过的量化电平中:ae和be,且嵌入块类型与原始压缩块的类型相同。
本文将多个恢复数据嵌入到压缩图像块的位图文件中,其中,BTC压缩块的每个位图文件的大小是n×n。假设rcno表示待嵌入恢复节点的数量,rcno的最大值为
rcno=n×n/8
(6)
由于储存的每个恢复节点大小为8比特,因此当块的大小分别设定为4×4和8×8时,rcno的最大值为2和8。本文只采用平滑块位图文件的原因是降低嵌入恢复节点时带来的图像模糊。根据所选平滑块的块序列有序地嵌入每个块中的恢复节点,完成整个恢复节点的嵌入过程。嵌入恢复数据的流程框图如图1所示。
图1 嵌入恢复数据的流程框图
防篡改检测流程框图如图2所示。其中,每个压缩块所接收到的量化级都可以生成第二个认证码集。当所提取的认证码eac等于认证码ac,则x就可归为清晰块。反之,就将x分为已修改的块。按照上述方法检查每个块中的ac和eac,就可得出“粗略”检测图RDI。然后,在RDI中执行两个阶段的篡改提炼过程。
图2 本文防篡改检测流程框图
在RDI中执行两阶段篡改提炼过程。被篡改区域使用模数运算[14]得出提取的认证编码可能与使用随机值得出的认证编码相同。即一些重建图像(嵌入图像)中量化电平间被修改的差值可能与随机值生成的认证编码的余数相同。为了提高检测的精准度,在第一阶段使用了迭代篡改细化机制。在每一次循环中,都需要检查RDI中的白色像素是否会在使用如图3所示的4个测试条件后返回。第1种情形如图3(a)所示,如果像素p的相邻左右像素都是黑色,则p变成黑色。第2种情形如图3(b)所示,如果像素p的上下相邻值是黑色,则p变成黑色像素。同样,图3(c)和图3(d)分别列出了p在135°和45°时的两种附加情形。
图3 篡改提炼的4种情形
为了降低第一阶段的错误检测,第二阶段使用平滑块位图文件中提取的恢复节点,有序地检查每一个模糊块以确定它是否为清晰块。如果所有有用的恢复节点与模糊块的均值相同,则可判定该块在前一阶段被错误检测,将其改为清晰块。
本文篡改图像恢复流程框图如图4所示。为恢复被篡改的图像,本文分两个阶段进行处理。第一阶段,如果检测第i个图像块为待恢复的篡改块,则提取该块的恢复节点。将该块中第m个恢复节点嵌入到第BPm,I个图像块中,其中 1≤m≤rcno。
图4 本文恢复流程框图
本文提取并储存的是平滑清晰块中的有效恢复节点。通过这些块,提取全部t个有效节点。当t大于0时,使用投票策略来确定普通恢复节点。如果恢复节点的拷贝文件有一半以上是相同的,则可找出恢复节点用于恢复被篡改的块。如果t等于0,则表明这个被篡改块不可恢复。在执行第一阶段的步骤之后,将其标记为未恢复块。但上述篡改提取过程并不能保证移除被篡改目标的白色像素。
第一阶段篡改提取过程的一个案例如图5所示。图5(a)和5(b)分别为篡改目标和粗略检测图像。图5(c)是使用第一阶段的提取过程得出的结果,图5(d)是这种案例的一个错误图像。在错误图像中找到了5个错误检测的块。在这些块中,有4个图像块无法被检测,因为他们位于被篡改物体的边缘处。第一阶段的提取过程错误地将一个清楚的块分类为模糊块。
图5 第一阶段篡改提取过程的一个案例
为了降低第一阶段提取过程所造成的错误检测,使用从平滑块的位图文件中提取的恢复节点,有序地检查每一个模糊快以确定它是否是清晰块。如果所有有用的恢复节点与模糊快的块的均值相同,则可判定该块在前一阶段被错误检测出。然后,将它改为清晰块。
本文实验是在Windows 7的个人电脑上进行,配置为CoreTMi7 3.60GHz,RAM为8 GB。使用Dev C++ version编程。评估采用的是绝对矩块截断编码机制[15],使用多个尺寸为512×512的灰度图,这些灰度图选自标准灰度图像库,包括Airplane,Boat,Elaine,Family,Girl,Goldhill,Lena等灰度图像。另外实验还包括一些bmp格式的24位真彩色图像。
在防篡改检测实验中,本文使用的块大小设定为4×4。每个512×512的测试图像有高于12 000个图像块。rcno的值设定为2,blen值取1、2、3。TH取4、8、16。使用本文方法从测试图像Sailboat获得多个被嵌入信息的图像。
首先,进行篡改物体实验,每个嵌入图像加入的鹰和帆船如图6(a)所示,被篡改的块如图6(b)所示。被篡改图像的结果如图7所示。这些被篡改的物体包含7326个像素,共有556个块受到篡改物体的影响(图7)。
图6 测试中的篡改物体
图7 被篡改物体图像的结果
图8给出所提防篡改检测方法的检测结果。图8中blen值设定为1~3时,可检测到嵌入的物体。且在检测图像中,被修改的物体没有发现白色点。与图6给出的篡改物体相比,每个检测图像的被篡改区域被清晰地标识出。对于blen=1时,被检测的结果具有明显的边缘像素缺失,对于blen>1时,其轮廓更加清晰,且TH值越大,细节越丰富。
图8 本文方法检测出的图像
为了验证所提方法在彩色图像上的检测效果,首先需要对彩色图像的R、G、B三通道进行分离,在每个通道上的实验与上述的灰度图像实验相同。实验选取了两幅24位真彩色图像,其篡改图像如图9左边所示,检测出的篡改物体的二值图像如图9右边所示。可以看出,第一幅图像中的房屋前面有一块篡改的草坪,本文方法可成功检测出。第二幅图像,有两只黑色兔子(两只完全相同)是嵌入到原图像的,本文方法也可以成功检测出嵌入的物体。因此,本文方法在彩色图像上也是可行的。
本文方法的图像恢复结果与同样具有恢复功能的文献[9]中的方法进行比较,结果如图10所示,可以看出,blen=1时,恢复结果均含有鹰和帆船的痕迹,但本文方法的痕迹更小。当blen>1时,恢复结果中的痕迹难以发现。这主要因为认证码比特长度blen为2或者3时,认证码和恢复码在信息保存方面更为合适。但从上面的图像重建质量看,本文方法更优。
图9 彩色图像的防篡改检测效果
图10 本文方法图像恢复结果
本文BTC方法的重建图像(嵌入图像)质量如表1所示,重建质量采用峰值信噪比(PSNR)度量。表1数据表明:随着图像块大小逐渐增大,重建图像的PSNR会逐渐降低。表2给出了不同TH值的BTC压缩图像的平滑块比值。根据结果可看出,平滑块的比例随TH值的增加而增加,随块尺寸的增加而下降。
表3给出了各方法重建的图像质量。由表3可知,当blen值小于等于3时,本文方法的平均图像质量高于30 dB。与其他方法相比,当TH=16时,本文方法在重建质量更优于其他方法,在所有比较的方法中,只有本文方法和文献[9]具有恢复功能,但文献[9]方法的功能严重依赖于数据库。文献[5-6]都是半脆弱水印方法,对恶意修改的抵抗性能有限,重建图像的质量弱于本文方法。文献[8]也是基于BTC压缩图像,将多个认证数据的拷贝文件嵌入位图,对于压缩块的定义较为粗糙,造成重建效果较差。
表1 本文方法的重建图像PSNR dB
表2 不同TH值压缩图像的平滑块比值 %
表3 各方法重建图像的平均PSNR dB
表4给出了篡改测试时的精准度,其中TP表示实际为清晰块,判断也为清晰块;TN表示实际为非清晰块,判断也为非清晰块;FP表示实际为非清晰块,判断为清晰块;FN表示实际为清晰块,判断为非清晰块。由表4结果可知:当TH值设为16且blen值分别设为1、2和3时,分别有68、17和17个被修改块没有被正确地检测出。当TH值设为8且blen值分别设为1、2和3时,由于篡改提炼,分别错误地将3、4和4个清晰块检测为被修改块。根据表3和表4结果,使用本文方法时,blen的值应该大于或等于2。
表4 本文方法检测精度分析 块
本文提出了针对BTC压缩图像完整性的检测方法。在平滑块的位图文件中嵌入恢复节点的多个拷贝文件。用户可以确定压缩图像块认证节点的大小,以达到嵌入图像质量和检测精度的平衡。当认证节点的大小大于或等于2时,可以检测到被篡改图像的篡改区域。使用恢复节点或相邻块可以恢复图像的篡改块,且本文恢复的图像质量较高,视觉效果良好。未来将考虑其他类型的图像,扩展本文方法的适用性范围,如真彩色图像,或者其他类型的压缩编码图像。