另外Matlab中还有丰富的小波包处理函数。
3.3.3 攻击函数
对算法进行攻击测试是对水印鲁棒性检测的一种重要手段,一个好的水印算法必须经过各种攻击测试才能对之作出客观的评价。Matlab中的许多函数可以直接用来作为攻击测试。
rotate():可以对图像进行任意角度的旋转;
filter()和filter2():可实现对一文信号和一文信号的滤波;
imwrite()中jpg和quality参数能对图像进行可控jpg压缩;
imnoise():可以对图像加入各种噪声,如白噪声等。加入噪声是对水印鲁棒性考验的一种常见的攻击;
imresize():可以以指定的插值方法来对图像进行放大和缩小[8-11]。
4 使用MATLAB编写数字图像水印算法的实例
本文采取的是离散余弦变换(DCT)算法,下面将对基于DCT技术的数字图像水印做一个比较详细的介绍。
4.1 离散余弦变换
4.1.1 离散余弦变换简介
离散余弦变换(Disceret Cosine Trnasofm)简称DCT,属于正交变换图像编码方法中的一种。正交变换图像编码始于1986年。任何连续的实对称函数的傅里叶变换中只含有余弦项,因此余弦变换与傅里叶变换一样有明确的物理意义,DCT变换避免了傅里叶变换中的复数运算,它是基于实数的正交变换。DCT变换矩阵的基向量很近似于Topelitz矩阵(系数矩阵对称且沿着与主对角线平行的任一对角线上的元素都相等)的特征向量,而Topelitz矩阵又体现了人类语言及图像信号的相关特性,故DCT常常被认为是对语音和图像信号的准最佳变换,同时DCT算法较易于在数字信号处理器中快速实现,因此它目前在图像编码中占有重要的地位,成为一系列有关图像编码的国际标准(PJEG、MPEG、H.261等)的主要环节[7]。
4.1.2 离散余弦变换意义
较早利用分块DCT的水印技术是Koch.E、Zhao.J的文章,他们的水印方案是用一个密钥随机的选择图像的一些分块,在频域的中频上稍稍改变一个三元组来隐藏二进制序列信息。这种方法对有损压缩和低通滤波是稳健的。Cox等提出了著名的基于图像全局变换的数字水印技术,该方案对整个图像作离散余弦变换(DCT),然后将水印嵌入到预先设定的低频分量中,水印信号由高斯分布的实数序列组成,算法不仅在视觉上具有不可察觉性,而且稳健性也非常好,可经受EG压缩、滤波、剪切等攻击。Barni等提出一种利用HVS掩蔽特性的基于DCT的水印算法,在水印嵌入阶段,对载体图像进行DCT变换,对DCT系数按Zig-Zag扫描重新排列为一文向量,留下向量中开始的L个系数不作修改,对第L个系数后面的M个系数进行修改以嵌入水印。黄继武等人在对DCT系数DC和AC分量的定性和定量分析的基础上,之处DC分量比AC分量更适合嵌入水印,嵌入DC分量的水印具有更好的稳健性,并提出了一个利用DC分量的自适应算法。
Hsu(1999)提出的DCT数字水印算法是目前研究最多的一种数字水印,它具有鲁邦性强、隐蔽性好的特点。其主要思想是在图像的DCT域上选择中低频系数叠加水印信息。之所以选择中、低频系数,是因为人眼的感觉主要集中在这一频段,攻击者在破坏水印的过程中,不可避免地会引起图像质量的严重下降,一般的图像处理过程也不会改变这部分数据。此外,DCT域系数的统计分布有比较好的数学模型,可以从理论上估计水印的信息。
4.1.3 离散余弦变换的定义
一个长度为N的序列s(x)的一文离散余弦变换S(μ)的定义为
它的离散反余弦变换(IDCT)的表达式为:
在数字图像处理中使用的是二文DCT。数字图像S(x,y)是具有N行N列的一个矩阵,它的DCT变换公式为: Matlab数字水印信息隐藏技术实现+文献综述(9):http://www.youerw.com/tongxin/lunwen_4172.html