谢光敏,郭妍,向蓓蓓,杨威
(1.四川水利职业技术学院,成都 610039;2.中国电子科技集团公司第三十研究所,成都 610039)
随着互联网的高速发展,音频、视频和图像等信息在日常生活中广泛的传播。其中图像以传输速度快、展示信息直观等优势被广泛应用于社交、新闻、广告等领域。近些年多媒体技术的高速发展使得大量的图像处理软件出现在我们生活中,比如Photoshop[1]、美图秀秀等。这些软件让图像的修改变得十分容易且难以用肉眼识别。但是,在新闻、商业、军事、学术研究和一些重要的摄影比赛等领域中,图像是绝对不能被修改的。因为图像中的信息是原始画面的真实记录,在作为证据时往往具有很强的公信力度。
2016 年9 月14 日福建摄影家协会网站公布了第25届摄影展艺术创意类获奖作品,其中获得优秀奖名为《日照罗平》的作品被指造假[2]。该作品的标题中有地名,这就意味着要真实、准确地传达该地的景观。但作者篡改了图像的结构,令图片呈现出的信息不真实。这显然违背了摄影比赛的规定,对其他参赛者也是不公平的。因此,图像的真实性极为重要。
图像Copy-Move 篡改[3]即图像复制-粘贴篡改,是一种常见的图像篡改方式。具体操作是将图片中的某个区域复制,然后粘贴到同一幅图片中的另外一个区域(如图2)。篡改者为了不让复制粘贴的痕迹过于明显,多数情况下不会使这两个区域产生交集,也就说本文仅针对不连通的Copy-Move篡改区域做篡改取证。
图2 篡改示意图
例如,为了达到覆盖的效果,将图3 中的倒影隐藏。为了达到此目的,可以将图3 中的方框内的区域复制,然后粘贴到倒影的区域,使倒影完全被覆盖。得到图4的效果。
图3 原始图
图4 篡改图
通过上述隐藏倒影例子可知,经过Copy-Move 篡改的图像中,肯定存在两个相同的区域。这两个相同或相似的区域,可以通过提取能够表征图像信息的特征值[4],然后计算特征值的相似度来找到。
通常篡改者对图像进行Copy-Move 篡改时,其目的是为了掩盖图像中不愿被展示的信息[5]。为了达到目的,将图像中的某个比较理想的区域复制,然后粘贴到需要被隐藏的区域,这就是图像的Copy-Move篡改[6]。
图像Copy-Move 篡改取证,需要采用比较直接的篡改检测方法。即待检测图像读入内存并灰度转换之后,进行重叠块划分。然后提取重叠块的特征值,按照一定的规则将特征值进行字典排序[7],排序后相邻的重叠块具有相似甚至相同的特征值。因此,仅对相邻的重叠块进行相似度的计算,减少大量无用的计算,提高检测效率。然后,将相似度大于阈值的重叠块的位置记录。最后,扫描记录位置信息,并可视化输出。算法流程如图5所示。
图5 算法流程
图像灰度化处理[8]是将彩色图像转化成为灰度图像。彩色图像中的每个像素的颜色是由红(R)、绿(G)、蓝(B)三个分量决定,而每个分量有255 个值(0~255),经计算,一个像素点约有1600 多万(255×255×255)色。而灰度图像是红(R)、绿(G)、蓝(B)特殊的彩色图像,一个像素点的取值范围为0~255。因此,在数字图像处理中,通常将图像进行灰度化处理以减少计算量。图像的灰度化处理过程可用下列方法:在YUV[9]的颜色空间中,“Y”表示明亮度(Luminance 或Luma),也就是灰阶值;而“U”和“V”表示的则是色度(Chrominance 或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。根据RGB 和YUV,U 颜色空间的变化关系可建立亮度Y 与红(R)、绿(G)、蓝(B)三个颜色分量的对应:Y=0.3R+0.59G+0.11B,其中所得到值亮度值Y 表达图像的灰度值。
经过Copy-Move 篡改的图像,存在两个相同或相似的区域,其对应位置的像素值是相同的。为了检测出相同或相似区域,可以进行像素值比较,结果相同则认定为篡改区域。然而这是不科学的,因为同一幅图像中存在大量相同的像素点,比如在500×500 的图像中,像素点的个数为250000,而像素值的范围仅为0~255。所以,自然图像中本身就存在大量相同像素值的点。因此,通过像素值不能确定篡改区域。
本文采用重叠划分子块的方法。先固定子块尺寸并使子块尺寸远小于篡改区域尺寸。然后,将子块在待检测图上以一个像素为单位平移,每平移一次得到一个子块,以此类推对图像划分。如图6为重叠划分子块的简单示意图。
图6 重叠划分子块
假设待检测图像的大小为M×N,子块大小为R×R,要求R小于篡改区域大小,假设R的取值为8。因此,篡改区域的大小至少为8×8。篡改区域形状不一定为矩形,可以为任何几何图形或者不规则的图形,但篡改区域中至少完全包含一个8×8大小的区域。确定好R的大小后,按照从上至下从左至右的顺序按一个像素为单位平移,每平移一次得到一个R×R大小的区域,即为所划分的子块。以该方式对待检测图进行划分,划分子块的个数为(M-R+1)×(N-R+1),即待检测图像所划分的子块个数为(M-7)×(N-7)。以划分子块的方式进行图像篡改的检测,可弥补单个像素点信息量太少,不足以表征篡改区域,极易造成误检的缺点。
在对待检测图划块的同时,需对每个子块的坐标记录。这里采用每个子块的左上角的像素点的位置,作为对应子块的坐标。将坐标以(x,y)的方式保存下来,通过(x,y)可得到相应子块的位置。
将待检测图划分成重叠子块后,需对子块提取特征值以表示子块。在一幅被Copy-Move 篡改的图像中,存在两个相同的区域(篡改区域不经过特殊处理),是已确认的结论。如果两个区域相同,其对应位置的像素值也是相同的,那该区域所对应的重叠子块的像素值也是相同的。因此,通过计算R×R大小子块的像素平均作为子块的特征值(T0)。经验证表明,在一副图像中,存在很多像素值相同,但图像内容不同的子块。比如,假设一幅图像大小为8×8,内容为上半截全黑(像素值均为0),下半截全白(像素值均为255)如图7(a)所示。另一幅图像大小同样为8×8,内容为国际象棋棋盘模型,如图7(b)所示。这两幅图片的像素平均值是完全相同的,但是图像的内容却截然不同。因此,仅选子块的像素平均作为唯一特征值是不可取的。
图7
通过上述例子得出结论:相同像素平均值的图像其内容不一定相同。可以将每个子块再平均划分为4 个小块,每个小块的大小为R/4×R/4。再分别计算每个小块的像素平均值,作为整个子块的4 个特征值(T1~T4)。为消除图像内容不同但像素平均值相同的情况,可以在子块的中央划分一个大小为R/4×R/4 的小块。然后,将该小块的像素平均也作为子块的一个特征值(T5),即可以得到5 个特征值。整个子块的进一步划分并提取特征值的规则如图8所示。
图8 特征值提取
经数据验证,此方法所提取的特征值能够表示每个子块的内容,可以将特征值相同但内容不同的情况降低到极低的水平,对检测的结果也不会造成太大的影响。因此,此提取特征值的方法是有效的。
因Copy-Move 篡改使得图像中存在两个相同的区域,理论上匹配各重叠子块之间的特征值是否相同,即可找到待检测图中的篡改区域。假设待检测图像的大小为200×200,R取值为8,则划分的重叠子块个数为(200-8+1)2=37249。如果将所有子块进行通匹配,那么匹配的次数为(37249-1)2=187413504,这庞大的计算量效率显然不高,何况图片大小还仅为200×200,要是图片尺寸增大,匹配的计算量将会成指数级增长。因此,这种通匹配的方法实现上是不可取的。所以必须使计算量降到一定的范围内。
通过分析可知,一幅Copy-Move 篡改的图像中存在两处相同的区域。按照重叠划块之后,所有的子块中有且仅有两个完全相同子块,或者相同子块的周围会存在少量相似的子块。若只对有用的块进行匹配计算,计算量会变得非常小。然而在通匹配的过程中,除了匹配相同和相似的子块,其他完全不相关的子块也进行匹配计算,使计算量变得非常大。因此,过滤无用的计算越多,匹配的效率就会越高,将会提高了篡改取证的效率。
为了能够过滤无用的匹配计算,可以将相似的重叠子块放到一起。然后,每个子块只匹配相邻的子块,离得较远子块本身差别比较大。因此,不再与差别较大的子块匹配,减少大量无用的计算。一幅经过Copy-Move 篡改的图像,划分出来的子块中,有且仅有两个完全相同的子块,相似的子块也仅仅分布在子块自身周围和另一个篡改区域中完全相同子块的周围。如图9所示,两个六边形为篡改区域,其中两个黑边正方形A和B是篡改区域中有且仅有的两个相同子块,相似的子块分布在A子块和B子块的周围的灰色区域内。由图可知,灰色区域相对于整幅图片的范围是很小的。因此,将两个灰色区域中相同和相似的所有子块放到一起,匹配的时候计算每个子块附近的子块。这样不仅能找到两个相同的子块,并且还能减少了大量的计算,提高匹配的效率。
图9 相同及相似子块分布情况
为了实现上述方法,可以将所有子块的像素平均值T0进行排序。排序后,完全相同的两个子块被放到一起,但是类似图7(a)和图7(b)的子块也会放到一起。该问题解决方法可以通过将T0设为主要关键字,子块内部特征T1-T5 为次要关键字,进行二级排序。经过实际验证,二级排序能够有效解决上述问题。因为只匹配子块附近的子块,所以计算速度变得非常快。
对于上述方法,还可以做进一步优化。图9中A子块和B子块相同,A子块和B子块周围的灰色区域相似,采用二级排序之后,会将两个灰色区域相似部分放到一起。因为无法判断哪些灰色区域是A子块周围的哪些是B子块周围的。所以导致匹配的时候A子块会与自己周围的子块进行匹配,这显然也是无用的操作。因此,可以在匹配之前计算两个子块之间的距离d=,如果子块之间的距离d小于设定值D,则跳过该子块之间的匹配计算。这种对距离的判断不仅可以提高程序效率,还提高篡改检测的精准度。
在特征值匹配的过程中,设定一个计数器C,每检测到一对相同的子块,将计数器C加1。待所有子块的特征值匹配完后,读取计数器C的数值。将计数器C与预先设定值T比较大小,如果C>T,则待检测图经过Copy-Move 篡改,反之则没有经过Copy-Move篡改。
根据篡改结果,如果待检测图片经过Copy-Move 篡改,需要对检测结果进行可视化输出。首先,创建一幅空白的图片,空白图片的大小与待检测图保持一致。然后,扫描所有子块特征值的匹配结果,如果是两个相同的子块,则分别读取两个子块的坐标(x1,y1)和(x2,y2)。接着,将空白图片与对应坐标处的区域设置为黑色。扫描完匹配结果后,即得到篡改取证后的图片,如图10和图11所示。
图1 摄影作品造假图片
图10 羊驼轮廓篡改
图11 复制花瓣
Copy-Move 篡改是图像篡改中一种常见的手段。许多相关领域的学者对此进行探讨与研究,并提出一些有效的检测算法。认真研究不同的学者所提出的方案后发现,很多方法都具有一定的相似性。因此,在参考学者算法的基础上,根据Copy-Move 篡改图像具有的特性,总结一种基于特征值的被动取证方案。通过软件测试检验,所提出的方案能够检测出经过Copy-Move 篡改的图像,并且篡改图像大小可任意,篡改区域可以是普通几何形状或物体轮廓等不规则形状。