Fork me on GitHub 返回顶部

基于离散余弦变换的同图复制的检测技术

本文是一则学习小结

图像篡改的背景及意义

  目前图像已经成为人类社会中必不可少的一部分,人们的日常生活中到处都可以见到图像。特别在医学、商业、军事、情报、学术研究、法律和新闻领域中,图像作为原始事件或现象的真实记录,具有信息载体和数字证明的作用。然而人们渐渐发现图像的真实性已经不再可靠了。篡改图像出现的频率越来越大,要分辨出它们也越来越困难。

已知检测技术

数字水印

  • 易损水印,半易损水印和鲁棒水印

  • 水印在图像篡改之前存在

  • 要求所有设备都带有水印装置是不可能的

盲检测技术

  • 不依赖数字水印,是基于篡改后不留下肉眼可辨的线索但会篡改图像的内部特征的假设。

  • 一旦检测算法公布,就容易被篡改技术的“伪装”所蒙骗。

离散余弦变换(DCT)

  离散余弦变换(Discrete Cosine Transform,DCT)的变换核为余弦函数。DCT除了具有一般的正交变换性质外,它的变换阵的基向量能很好地描述人类语音信号和图像信号的相关特征。因此,在对语音信号、图像信号的变换中,DCT变换被认为是一种准最佳变换。近年颁布的一系列视频压缩编码的国际标准建议中,都把DCT作为其中的一个基本处理模块。除此之外,DCT还是一种可分离的变换。 离散余弦变化是对实信号定义的一种变换,变换后在频域中得到的也是一个实信号,相比离散傅里叶变换而言,DCT可以减少一半以上的计算量。DCT还有一个很重要的性质(能量集中特性):大多数自然信号(声音、图像)的能量都集中在离散余弦变换后的低频部分,因而DCT在(声音、图像)数据压缩中得到了广泛的使用。

基于DCT算法问题分析

  • 要寻找图像中可能存在的相似区域,最直接的方法是把所有可能的位置和形状都查一遍。但是由于篡改区域的大小、形状及位置都是未知的,因此这种方法显然计算上是不可行的。

  • 由于在篡改图像中的拷贝区域粘贴区域很可能已经不完全相同了,因此如果将子块直接做按像素的逐个匹配来判断是否相同会产生漏检测,同时按像素比较还存在着像素过多而导致的效率问题。

  • 解决方法: 使用特征提取来表示子块可以解决上述的问题。

通用算法框架

  • 第一步、分割图像——将输入的图像按一定规则进行分割得到子块。

  • 第二步、特征表示——对子块进行特征提取并用这些特征来表示子块。

  • 第三步、重复匹配——通过比较特征来找到相似的子块。

  • 第四步、结果输出——将检测结果可视化的输出。

具体操作流程

  1. 输入图像I为一张M*N大小的灰度图像。如果要检测彩色图像,可以使用标准公式:I=0.299R+0.587G+0.114B,将其转化为灰度图像。
  2. 用一个正方形的窗口,尺寸为B*B,从图像左上角开始,向图像右侧按像素一列一列移动。到达最右侧后,回到图像左侧并下移一行,重复上述操作。按此方法,可以将一个MxN的图像分割成(M-B+1)x(N-B+1)个子块。
  3. 对于每个子块应用DCT变换以提取块特征,对量化后的BB大小的DCT系数矩阵使用zigzag扫描法得到一个行向量,并将该向量截断到[pB²]维,以达到降维的目的。此向量即为对应该子块的特征向量。其中p (0<p≤1)为预定义的截断系数。
  4. 所有的特征向量ai按字典序进行排序后保存到矩阵A中(向量ai为A中第i行),矩阵A的大小为(M-B+1)(N-B+1)[pB²]。
  5. 对A中的每一行的特征向量ai,检查所有与之邻近的特征向量aj,是否二者相同。
  6. 若ai和aj两个特征向量相同,则计算两向量分别对应子块之间的距离d。
  7. 若d>Nd,则两特征向量对应子块之间的平移向量s被计算并被归一化,平移向量出现次数的计数器加1。
  8. 在所有可能的平移向量s(i)被检测完后,扫描所有的平移向量计数器,看是否大于临界值T,若没有则没有出现Copy-Move篡改,算法结束;否则进入下一步。
  9. 对每个满足s(i) >T的平移向量,将所有产生此平移向量的子块对标记到地图上,使用开操作来去除地图上可能的孤立块,将地图和输入图像一起输出。
  10. 后处理。

特征向量降维——ai

  DCT变换的能量压缩特性可以使得在仅保留低频系数的情况下保留大部分重要的信息,这在经过量化后系数矩阵中体现得更为明显。最后的矩阵是使用标准的JPEG量化矩阵量化后的结果,在量化后大部分的高频系数均变成0,因此只需要保存低频系数就可以近似的重构回原来的函数。所谓量化,是指将矩阵中的每个值除上一个值后进行取整。

Zigzag 扫描法

  如果仅仅直接把高频系数部分置0,仍用矩阵的形式保存系数是毫无意义的。 必须将变换系数按照Zigzag排列顺序进行,这样删除高频系数的操作才能比较容易进行。对于BB的变换系数矩阵使用Zigzag排序法可以得到一个从低频系数到高频系数排列的1B²大小的行向量。

  为了舍弃高频系数部分以达到降维,定义截断系数p(0<p≤1),对Zigzag排序后得到的行向量仅保留前边的[p*B²] 个分量。这个降维操作可以使后面的分类和匹配工作带来方便。另外,为了是算法的鲁棒性更好,设置了一个量化参数q。每一个DCT参数都会被参数q进行量化处理。

平移向量——s

  记向量ai为A中第i行,并记(x,y)为对应子块上的左上角的坐标。在每次匹配过程中,每对相邻近的ai和aj都会被测试是否相同。如果相同,则计算二者之间平移向量s: S=(s1,s2)=(xi-xj,yi-yj) 应注意到,s和-s是同一个平移,所以要对平移向量做一个归一化处理:若s1<0,则令s=-1*s,以保证s1≥0。之后算法会扫描所有平移向量s,去寻找出现次数超过阈值T的s(1)、s(2)….s(n)。

特征向量匹配——Nf

  在进行特征向量重复匹配的步骤中,对保存着按字典序列排序好的特征向量矩阵A中的每个行向量ai,和所有满足j-i<Nf的行向量aj被用来与之进行判断是否相同。(Nf是一个预定义的参数,用来控制一个向量与多少个与它邻近的向量进行比较。)

后处理

  在出现平移向量有s(i)满足出现次数超过临界值T的时候,算法检测到出现了Copy-Move篡改。这时一张和输入图像等大的图像被初始化,所有像素均为0。对每个s(i) ,所有产生这样的平移向量的子块对在地图中被标记上特殊的颜色,特殊颜色有两种,其中源区域一种,目标区域一种。由于特征向量经过了截断和量化,可能会有一些误检出来的孤立区域,因此,一个形态学上的开操作被采用,以移除一些孤立的块。

特征向量匹配——比较方法

  尽管特征向量ai已经被截断和量化,如果直接用每个对应分量相等的方法来判定两个向量是否相同,仍然会导致检测效果下降和鲁棒性的退化。这是因为判断向量是否相同是为了找到其对应子块是否相同,而根据假设,篡改图像可以经过压缩,加噪,模糊等攻击,因此在这些处理之后篡改区域对应的子块已经不是完全相同的,得到的特征向量自然也不会完全相等,但将会非常接近。

  所以,引入一种判别特征向量是否相同的方法:用一个向量的每个分量除以另一个向量的对应分量,检查每次的比值是否接近。如果一个要作为分子的分量恰好是零,则检查该对应分量之间的差的绝对值是否足够小。如果上述判断结果都是真,则两个向量被认为是相同的,否则两个向量被认为是不同的。

特征向量匹配——Nd

  由于假设了拷贝区域和粘贴区域是不重叠的,而分割出来的子块又是相互重叠的,这样有可能出现两个子块被判定为相似但是却在拷贝区域(粘贴区域)中非常近的位置,这并不是我们需要的。因此在计算平移向量之前需要额外的一步判断。一个参数Nd被预定义,当两个子块被判定为相似后,计算他们之间的平移距离距离d。仅当d>Nd时,两个子块之间的平移向量才会被计入统计。

总结

  基于DCT的检测算法,不依赖于数字水印技术,也不需要知道任何被篡改图像之前的重要信息,就可以比较准确定位出copy-move篡改区域。并且跟以往的方法相比,这种算法用了更少的图像特征,并且更加高效。这个算法对JPEG压缩,高斯模糊等外部攻击有着很好的鲁棒性。

posted @ 2017-04-09 16:38  d0main  阅读(1033)  评论(2编辑  收藏  举报