一种基于DCT的数字水印算法∗
2019-10-08端木直
何 冰 端木直
(渭南师范学院数理学院 渭南 714099)
1 引言
社会数字信息化发展的越来越快,信息安全保密问题也越来越严重。正是因为如此,数字水印技术(DigitalWatermarking)发展得很快,在信息安全维护及版权保护等方面起着重要作用。水印技术主要是指通过信号处理的方法在载体中加入指定的隐蔽信息,当然隐蔽信息不可见,通过水印提取可以显示个人加入的信息,从而达到保护个人版权等一系列安全隐私问题。近几年,数字水印技术在信息隐藏领域已经成为一个热门而且不断发展,相信未来会有更加广阔的发展潜力。
其中,安全问题主要表现在以下方面。首先体现在数字作品的知识产权保护方面,数字作品形式很多,例如图像、视频等。与此同时,作品的版权保护也成为重中之重。因为数字作品的复制修改甚至窃密非常容易,这样原创者的产品权益便得不到保证,这已经成为当下的热点问题。其次,经济流通中的票据防伪。因为高质量图像输入输出设备很多,这样便使得货币以及支票的伪造变得很简单,由此引发的经济犯罪也越来越明显,这样便迫切地促进了水印技术的发展与更新。再例如,音频与摄像类数据的隐藏标识和篡改提示。众所周知,数据的标识信息极其珍贵,在我们的生活细节当中起着至关重要的作用,不过将表示信息嵌入到载体图像上又是极其危险的,很容易在经过攻击之后造成个人隐私泄露或者信息丢失。数字水印技术刚刚为这种风险形成了一种屏障,即可以将标识信息隐藏,人们通过肉眼在原始文件上无法察觉。这种隐蔽通信的安全问题在军事上显得更加重要,尤其是密码安全与情报安全,正是因为水印技术先进的隐藏手段,成功地保证了军事战略中密码与情报的安全传输,由此引起了密码情报的传输方式在军事及网络信息安全中的极大变革。
2 数字水印技术
2.1 水印的一般模型
数字水印的简单模型如图1所示。
图1 数字水印嵌入的过程
频域法加入数字水印首先将原始信号转换到频域,变换一般有离散小波变换(DWT)、离散余弦变换(DCT)、离散傅里叶变换(DFT)等,随后对加入了水印信息的信号进行频域反变化,便能够得到含有水印信息的信号。
图2 数字水印提取的过程
如图2所示,频域法的检测原理是将原始信号与待检测信号同时进行变换域变换,比较两者的区别,然后进行嵌入水印的逆运算,得出水印信息。这时候会出现两种情况。第一种情况,如果是可读水印,那么结束。反之,如果水印读不出来,就将得到的水印与已知水印作比较,进行相关性判断,得出结论。
2.2 数字图像水印的几种较为常见的算法
目前,对于数字水印有很多种分类方法,不同的分类角度导致了不同的分类形式,它们之间有各有异同,大致分类包括以下几种。
空间域算法:1)最低有效位法(LSB)是空间域数据隐藏算法的一种,该方法是通过原始数据的最低位来隐蔽信息的。LSB方法的优点是有较大的信息隐藏量,但采用此方法实现的数字水印是很脆弱的,无法经受一些无损和有损的信息处理,而且如果确切地知道水印隐藏在几位LSB中,数字水印很容易被擦除或绕过。2)patchwork方法的核心思想在于统计,嵌入方法简单,即选择H对图像点,在放大一点亮度的同时减小另一点的亮度。良好的隐藏性便是这种算法的优点。除此之外,对各种旋转攻击等操作具有较强的抵抗能力,不过必须对具有大量纹理的任意区域的图像进行操作,而且不能完全自动完成。3)文档图像微波方法。通过在通用文档图像中隐藏特定二进制信息,数字水印信息经过轻微调整文档构造来实现编码,最明显的特点在于,基于这种方法的数字水印可以抵抗一些文档轻微调整操作,不过很容易被破坏,而且有一定局限性。4)变换域算法。变换域技术的最明显的特征在于,可嵌入大量比特率数据,而不会刺激人的感性系统使人有所察觉。常常使用例如扩频水印技术来掩护数字水印信息,这些变换包括离散余弦变换(DCT)、离散小波变换(DWT)、傅里叶变换(FT或FFT)还有哈达码变换等。
3 M atlab的数字图像处理
Matlab(矩阵实验室)是由美国公司出品的商业数学软件,功能极其强大,主要包括Matlab和simulink两部分。Matlab语言体系是Matlab重要组成成分,为用户提供了丰富的调用函数,数据的输入输出及面向对象等特性的高层次和极其完备的编程语言。同时,Matlab有设计程序所必需的结构,即顺序结构,循环结构及分支结构。并在很大程度上摆脱了传统上不是交互式程序语言的编写与运行模式,是当今国际科学计算软件的先进水平。
Matlab的基本数据单位是矩阵,它的指令表达式与其它领域上形式有许多共同之处,故用Matlab来解决问题要比用其它语言完成相同的事情简单高效得多。而且Matlab有函数解释与命令功能,可以通过命令向Matlab发出请求,解释自己想要调用函数的功能及具体运行方法。除此之外,Matlab也吸收了其他软件的优点,在新的版本中也加入了对C、FORTRAN、C++、JAVA的支持,可以直接调用。用户也可以将自己编写的实用程序导入到Matlab函数库中方便自己以后调用,此外许多的Matlab爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
4 函数及设计过程
4.1 离散余弦变换
DCT变换公式是频域中常用的几种变换之一。DCT正反变换公式是在离散余弦变换的基础上转变来的,主要特点是计算速度快,二维的DCT变化是从一维拓展而来,二维DCT正变换公式为
其中:
二维DCT反变换公式为
其中x,y为空间采样值,m,n为频域采样值。
因为数字图像多用像素方阵来标识,即M=N。此时,二维DCT正反变换可以简化为
其中:
4.2 离散余弦变换水印嵌入算法
数字图像水印算法选择导入的二值图像作为水印图像,根据水印图像的二值性不同,进行不同嵌入系数的选择,并将载体图像进行8×8的分块,将数字水印的灰度值直接植入到载体灰度图像的DCT频域中。
实现水印的嵌入,具体方法如下:
步骤一:从桌面读入一副原始图像和二值化水印图像到二维数组E与T。
步骤二:将原始图像E分割为互不覆盖的图像块block(x,y),x<1,y<8。对block(x,y)进行DCT变换,得到block-dct(x,y)。
步骤三:取水印图像中的一个元素W(p,q)嵌入原始图像块的低频系数中。
步骤四:对嵌入水印信息后的图像块block-dct(x,y)进行逆DCT变换。
步骤五:重新组合图像块,得到嵌入水印后的图像。操作过程如图3所示。
图3 水印嵌入算法框图
4.3 离散余弦变换水印提取算法
步骤一:读取嵌入水印后的图像,并对图像进行分块。
步骤二:对每一个图像块进行逆DCT变换,得到嵌入水印后的图像块block-dct(x,y)。
步骤三:从每一个图像块block-dct(x,y)提取出水印元素W(p,q)进行逆DCT变换。
步骤四:重新组合图像块,得到原来的水印图像,操作过程如图4所示。
图4 水印提取算法框图
图5 离散余弦变换水印嵌入与提取结果
5 结语
从实验结果来看,本设计中水印的提取与嵌入实验结果是比较成功的。其对传输过程中的噪声影响有着一定程度的抵抗能力,而且对于一些非刻意的攻击具备较强的抵抗能力,例如高斯滤波攻击等,不过也具有一定的缺陷,在几何性攻击如旋转,缩放等易造成嵌入水印的提取不出来,水印严重失真。
结论:整体来说,在不经过攻击时,提取的水印图像比较清晰,然而对于旋转、压缩及缩放等,水印提取过程就不太理想,提取出来的水印清晰度效果较差。因此若要完善这种水印提取的效果,我们需要进一步改进数字图像水印的方法。