基于多重匹配的可见水印去除算法
2020-02-08张茗茗呼延烺
张茗茗,周 诠,呼延烺
(西安空间无线电技术研究所 空间微波技术国家级重点实验室,陕西 西安 710100)
0 引 言
可见水印是秘密信息嵌入到载体图像后,水印图像中的秘密信息以可见的形式显示出来,这主要应用于版权维护和纪念留影[1-3]。相比较不可见水印,可见水印更能反映图像的所有权信息,同时能够抵抗压缩、噪声、旋转等各种攻击[4,5]。
为了能够实现载体图像的恢复,Hu等[6]提出可见水印可逆提取的方法,原始图像中的显著位平面被修改,并将修改后的位平面压缩到非水印区域。Lin等[7]提出了一种采用子采样技术的对比自适应可见水印机制,从而得到更满意的透明性。Zhang等[8]提出了一种用于加密图像的可逆可见水印方案。该方案中的原始图像用逐位异或运算加密,并且修改了对应于二进制水印标志的黑色像素的加密数据的一部分以嵌入可见水印。Santhoshi等[9]提出一种识别算法,利用SIFT算子来实现可见数字的识别,并利用LSB模型来实现数字的提取。Weng等[10]提出了一种基于动态图像并保持上下文完整性的可视水印方案,隐藏信息不同位置提取方式和恢复方式各不相同。Chen等[11]提出了一种基于差分扩展的可逆宿主图像的可见水印方案,宿主图像被分割成非重叠块,秘密信息嵌入到每一个块中。Tian等[12]提出CTPN的开源文本检测模型,通过CNN+RNN的组合方式可以很好地将数字检测出来,然而其运算规模庞大,对计算机要求性能较高。
然而,当嵌入信息为数字并且水印算法未知,文献[6-11]的载体图像的恢复效果不佳,而Tian等[12]利用深度学习训练开销又过于庞大。针对以上问题,本文提出一种可见水印彩色图像恢复方法。通过自建数字库和多重匹配检测数字,并利用自适应插值来恢复被数字破坏的区域,数字识别的准确率高,水印图像恢复效果好并且计算简单。
1 算法理论
1.1 KAZE特征检测
KAZE算子是由Perona等[13]提出的,其包括构造非线性尺度空间,特征点检测与主方向分配,特征描述符的生成过程。通过利用AOS算子来迭代出最优主方向,并得出该方向下的描述符。
1.2 模板匹配
模板匹配算法一般是通过滑窗的方式在待匹配的图像上滑动,通过比较模板与子图的相似度,找到相似度最大的子图。模板匹配最核心部分在于如何设计一个相似性函数,而欧式距离是应用最普遍的相似性函数
将这个相似性函数展开,可以得
对于欧式距离相似函数,值越大表示越不相似。将第二项进行归一化
当R(i,j) 为1时,表示模板与子图完全相等。
1.3 透射变换
透射变换是将一个平面的信息通过矩阵变换投射到另外一个平面上,具备3个特性,线性变换,平移变换和投射变换。所以透射变换后平面信息的相关性根据需要在某一个方向得到保留。
通用的变换公式为
其中,x,y,w为源平面坐标,x′,y′,w′为透射平面坐标。
2 算法实现
原始图像在嵌入数字后,发生了不可逆的变化,并且位置,数量,角度,字体大小都无法获知,本文通过自建数字库来降低匹配中特征点选择带来的复杂度和不准确性,多重匹配来自适应地提取和定位数字矩形区域,然后实现水印图像的恢复。本文的算法实验流程如图1所示。
图1 实验流程
2.1 KAZE特征检测
彩色图像经过二值化处理,维度得到降低,同时可见水印部分的对比度得到加强。KAZE算子具有旋转不变性,尺度不变性和变换不变性的优点,当图像旋转或者字体大小发生改变时,待检测部分仍然能够较为准确地显示出来,然而数字本身相比于自然景观,或者人脸等图像特征较小,提取的特征值对于旋转,噪声和尺度干扰的鲁棒性较差,这样会造成数字区域检测的偏差以及识别错误。为了提升KAZE算子的鲁棒性,进而使得数字能够准确识别,本文对其进行改进:
(1)对于数字模板,提取N(N>10)个特征点,对待检测图像进行特征点匹配,统计匹配后的特征点的分布情况。利用K-means聚类算法对这些特征点进行分类,得到最大的一类特征点。
本文采用二分类的K-means聚类算法,数字区域和非数字区域粗略分为各一类。特征值距离最小的特征点作为数字区域的起始特征点,特征值距离最大的特征点作为非数字区域的起始特征点
μ1=x(i),dist(x(i))=minDist
μ2=x(j),dist(x(j))=maxDist
具体步骤为:
1)选取两个聚类中心点(cluster centroids)为u1,u2;
2)重复下面过程直到收敛{
}
(2)统计该类下的特征点,当这些特征点都在一连通区域内,说明这些特征点为数字的可能性较高,反之将不在该连通区域内的特征点去除。这样保证所有的特征点都在一连通区域,如图2所示。
图2 特征点匹配
圆圈“1”表示已经划为数字“4”的特征点,可以看到在数字“4”的连通区域内有7个特征点,而圆圈“1”没有在数字“4”的连通区域内,所以可以认定该点不属于“4”的特征点。圆圈“2”表示野点,它与特征点的中心的距离大于阈值30,所以抛弃。图2右下角为干扰区域,二值化处理并未将图像的原始信息滤除掉,KAZE特征提取还有若干特征点,聚类后与数字区域分为两类,但是特征点数目较少,被省去。干扰区域和数字之间有一条判别曲线。
2.2 透射变换
利用最终得到的真实特征点进行透射变换,数字模板在之前的KAZE匹配中由于KAZE算子的特性,需要将模板增大,保证数字的有效区域能够准确提取出特征,而在特征点确定后,透射变换的矩阵参数就确定下来,只需要将数字的有效区域的4个顶点映射。然后将顶点包围的轮廓进行透射变换,得到变换后的数字图像。
2.3 模板匹配
为了进一步提升识别的准确率,需要用模板匹配作为补充。本文建立了一个数字库实现模板匹配,大小为36,0到9一共10个数字。每个数字各向外延伸两个像素作为矩形框,为了方便后续的识别,保证相邻数字有效区域不重叠,以及图像的自适应恢复。
适当的数字大小保证了数字特征信息的完整性,同时避免匹配中字体大小相差太大造成的误差,字体相同的数字模板大小有着细微的差别,大小为36的0-9长宽见表1。
表1 0-9数字模板实际大小
表1中,长用long表示,宽用wide表示。
本文采用最小距离作为判定条件,采用二范数表示,当图像与模板某一数字接近时,其距离小于该距离阈值threshold,该区域被划分为数字
其中,xm,n为图像在 (m,n) 处的像素值,ym,n为模板在 (m,n) 处的像素值,Th为图像与模板的偏差。当满足此条件时,该图像被分割出来,为数字区域。
相同数字,不同风格有一定干扰的差异不明显,可以通过提高距离阈值threshold来实现,但是当图像不是该模板时,其距离远远大于设定的距离阈值threshold。这样既可以允许不同风格字体以及矩形框内噪点带来的误差,提高了鲁棒性,同时避免了不同大小的数字被错误分割,降低了误判率。
2.4 区域膨胀
对于已经分割的图像,其二值化处理只是大概反映了数字的范围,与模板数字有一定的差别,并不能够具体地分割出来,需要进行后续操作。首先需要对分割的矩形区域内的噪点滤波,如果某一点25邻域内没有相同像素值,则该点可以视为噪点,应将其去除。
去除噪点后的矩形区域在保证数字的有效部分的同时,尽可能降低原始图像对于数字的影响。为了满足不同字体之间的差异和可见水印嵌入时边沿的像素值渐变特性,需要进行自适应膨胀,如图3所示,对二值矩形区域内所有非0像素点,统计该点的8邻域的像素值为0的个数num,当其num大于2时,说明该点周围为数字的像素点较多,该点为数字的可能性较大,可以将该点膨胀为数字。否则说明该点周围为数字的数目较少,该点为数字的可能性不大,可以视该点为原始图像的像素点
图3 8邻域像素
2.5 自适应模糊
利用已经确定为数字的二值图像,对水印图像进行掩模操作,得到去除数字部分的原始图像,接下来需要对其进行恢复。
对图3的8邻域子图像,m0,0为抠掉的像素点,对该点进行数据恢复。以待恢复的像素点为中心,统计真实的有值的像素点的个数,当其个数大于3,说明周围的有用像素点较为充分,该点可以插值,求其平均值作为该点的像素值,否则有用信息较少,容易引起较大误差,该点像素值仍为0,等待下一轮预测
建立预测循环,统计需要预测的总的像素点个数sum_predict,每次循环所利用的非0值的有用信息,都是上一次循环的非0预测值和原始图像像素值,刚刚预测的像素不能用来预测同一次循环的像素,这样避免了刚拟合出的点来预测下一个点,造成像素插值不够准确。当预测的像素点个数达到sum_predict,结束插值过程,保留这些插值点,得到最终的恢复图像,而水印图像的没有被抠掉部分的像素点灰度值不发生改变,保证只拟合被破坏的区域,这样得到的插值图像尽可能接近原始图像。插值流程如图4所示。
图4 插值流程
3 实验结果
图像质量,检测数字的准确率以及运行时间是本文判断算法有效性的3个标准。图像质量采用主观肉眼和客观评价两个方面,肉眼检测数字破坏区域的恢复情况,是否与周围背景有差异,以及是否存在噪点。客观采用PSNR来衡量原始图像和恢复图像的相似程度,PSNR值越高,恢复效果越好。准确率是来判断水印数字能正确检测出来的概率,一般而言,水印图像的破坏程度越大,数字的翻转越明显,数字字体越小,数字特征点的提取就越困难,识别的概率越低,能在这样的条件下仍然正确识别出来,说明算法的鲁棒性越好,能够抵抗各种攻击。运行速度也是一个衡量标准,对于一个较小的应用,采用很大规模的计算是不恰当的,而为了能够快速完成识别和恢复的任务,一定的运算是必不可少的。好的算法是能在完成要求的情况下尽可能降低计算开销。
本文建立数字库采用的格式为Calibri,测试图像采用一幅彩色山水图像,格式为BMP,大小为550×262,随意在图像上分别书写字体大小为18,24,36,48和60的0-9数字,颜色为(0,0,0),字体风格分别采用黑体,TimesNewRoman 和Calibri,旋转角度不明确,特征点个数为17。二值化阈值为20,将彩色图像转化为二值图像进行特征匹配。原始图像如图5所示,水印图像如图6所示。
图5 原始图像
图6 可见水印图像
编程语言采用vc++和opencv混合编程,实验平台为Visual Studio2015和opencv3.2,操作系统为64位Windows7,CPU为i5-5200U,主频为2.2GHz,内存大小为8GB。
首先对其进行二值化操作,得到二值图像,利用多重匹配算法,可以很准确地数字检测出来,数字检测如图7所示。
图7 数字检测效果
经过去除噪点,自适应膨胀和自适应模糊后,将与原始图像信息无关的数字内容删去,得到的最终恢复的图像如图8所示。
图8 水印图像恢复效果
可以看到,去除数字后,原始图像虽然受到一定的破坏,但是通过后处理得到了很大的恢复,肉眼很难分辨出区别。为了增强对比,本文采用文献[7,11]作参照,这两种算法都具有数据的隐藏和提取功能,同时也可以实现不需要知道隐藏算法的盲提取和恢复。文献[7]的效果如图9所示,文献[11]的效果如图10所示。
图9 文献[7]恢复效果
图10 文献[11]恢复效果
通过对比,在数字抠掉的区域附近,本文算法恢复的像素值变化更为平缓,特别是在左右两个瀑布区域,本文恢复的像素值已经与周边景色融为一体。而文献[7,11]中,还能看到图像被修复的痕迹,并且在白云部分,仍有个别像素点的数字信息没有完整擦除。同时采用PSNR(peak signal to noise ratio)来衡量恢复后的图像与原始图像的差异,以此来检验恢复的效果,对比见表2。
表2 恢复后的图像PSNR值
可以看到,本文算法恢复的图像与原始图像也更为接近,PSNR更高。
为了进一步验证本文算法的鲁棒性,本文对图11的水印图像进行高斯模糊,椒盐模糊,中值滤波和JPEG压缩的攻击,计算恢复的图像质量。然后对原始图像添加大量的数字水印统计不同算法识别的准确率。恢复和识别结果见表3,说明本文算法对于可见数字水印有很强的鲁棒性,图像的恢复效果很好。噪声对图像的破坏非常明显,同时也影响着水印数字的识别准确率,在中值滤波和压缩攻击方面,本文算法和文献[7,11]准确率很高。
4 变量分析
4.1 自适应模糊的阈值选取
在利用邻域内有用信息恢复图像时,每轮迭代在保证速度的情况下,接近像素真实值。本文为了增强对比,分别采用最邻近元法,双线性内插法,三次内插法来比较恢复效果和耗时。对比结果见表4。
可以看到,本文算法虽然耗时最长,增加了1 s,还可以做到实时处理,但是恢复的PSNR最高,被水印数字破坏的区域恢复效果好,以迭代的计算次数作为代价来提升图像的恢复质量。
表3 水印图像鲁棒性测试
表4 拟合对比结果
4.2 模板匹配的阈值
相同大小的数字匹配,偏差一般较小,而无法匹配时,数字的大小往往差异较大。但是当距离阈值threshold偏大或者偏小,会出现虚警或者漏警的情况,这时要合理选择,使得数字区域恰好被正确分割。
4.3 去除噪点的窗口大小
本文采用5×5作为窗口大小,充分考虑到数字边沿较多,数字像素较为分散,并且占用面积较小的特点,既保留数字区域,又将原始图像的信息剔除。当采用3×3,一部分数字像素被滤除掉,发生漏警,导致恢复后的图像有像素值为(0,0,0)的椒盐噪声。而采用7×7时,原始图像的像素被误判为数字,发生虚警,该像素点恢复的是插值后的像素值,不是原有真实值,图像变得模糊。
4.4 自适应膨胀的阈值选取
阈值过大,对周围邻域内数据的真实性要求高,数字区域膨胀有限,漏警率高,恢复后的图像在抠掉的数字边沿变化明显,人眼容易观察出来。阈值过小,数字区域膨胀明显,一些原本属于原始数据的像素被划分为数字,虚警率高,恢复后的图像较为模糊。所以阈值选择既要满足恢复后人眼无法觉察变化,同时尽可能与原始图像接近。
4.5 匹配算法的比较
本文利用K-means算法对KAZE进行修正,为了进一步对匹配算法进行比较,本文产生大量数字添加到图像中,并用KAZE,SURF,SIFT特征匹配算法进行比较,对比结果见表5。
表5 特征匹配算法准确率比较
模板数字大小为36,在二值化处理过程中,数字信息会有丢失,这样会对匹配的准确率有影响,本文算法通过模板匹配进行补充,保证数字不会遗漏,同时所用KAZE算法的准确率有了很大提升。
5 实验分析
本文算法具有以下3个特点:
(1)针对数字的特征点较少并且特征值较小的情况,利用K-means算法改进KAZE匹配算法,提升了识别的准确率和抗干扰的鲁棒性;
(2)再次用模板匹配进一步保证数字能够准确识别,将虚警的情况去除,使得划定的区域刚好是数字覆盖的区域,避免图像原始信息被误判;
(3)利用区域膨胀和自适应模糊覆盖二值化过程中没有划定的数字像素点,而不伤害原始图像信息,保证修复后的图像与原始图像差异尽可能小。
6 结束语
本文提出的恢复方法在不需要知道水印如何添加的前提下,就可以实现图像中数字的自动识别和分割,同时计算简单,不需要复杂的计算机硬件,无需大量数字样本和大规模的迭代学习。只需要建立0-9标准数字库,减低了识别过程中的复杂度,避免了数字特征点较少而造成在特征匹配过程中无法准确定位的情况。本文算法对于不同风格字体具有很强的鲁棒性,数字可以添加在图像中的任意位置,恢复后的图像与原始图像近乎一致,人眼很难分辨出区别,具有很强的实用价值。