1 基于DCT变换仿真
GUI源码下载链接:https://download.csdn.net/download/Matlab97513/13972981
1.1 算法原理
离散余弦变换(Diserete Cosine Transform)简称DCT变换。离散余弦变换是傅立叶变换的一种特殊情况,在傅立叶级数展开式中,如果被展开的函数是实偶函数,那么其傅立叶级数中只包含余弦项,再将其离散化可导出离散余弦变换,因此余弦变换与傅里叶变换一样有明确的物理意义,DCT变换避免了傅里叶变换中的复数运算,它是基于实数的正交变换。
DCT变换域数字水印算法的基本原理是将空域图像变成频域,然后将水印信息嵌入其直流项之中,最后将频域转换成空域以完成图片的水印的嵌入。其主要思想是:在DCT变换域上选择中、低频系数叠加水印信息,因为人眼的感觉主要集中在中、低频段,攻击者破坏水印时,不可避免地会引起图像质量的严重下降,而且一般的图像处理也不会改变这部分数据。再者,由于JPEG、MPEG等压缩算法的核心是在DCT变换域上进行量化,故通过巧妙的融合水印和量化过程,可以使水印抵御一定的有损压缩。此外,DCT变换域系数的统计分布有比较好的数学模型,可以从理论上估计水印的信息量。基于DCT变换的数字水印在逆变换时会散布在整个图像空间中,故水印不像空间域技术那样易受到裁剪、低通滤波等攻击的影响,具有鲁棒性高、隐蔽性好的特点。
1.1.1 准备工作
首先要读入一幅待嵌入的原始图片I=f1(x,y)以及一幅水印图M=f2(x,y)。由于DCT法需要给原图像进行88分块,所以为了便于将一个二进制序列作为水印放入DCT,最好让原图像的行x与列y象素数可以被8整除。如果不能整除需要将x/8与y/8的结果进行取整,其取法遵循向下取整原则。在整除的情况下,对于水印图像,它的行宽不得大于x/8列长不得大于y/8。取x和y均为256即256256象素,水印图为3232象素。由此可以看到,整个原图可以划分为xy/64=1024个变换块如图4.1。
每个块的位置计为(m,n),那么所取的水印图像的每一个象素点可以对应一个变换块进行嵌入。
1.1.2 选取8*8变换块
下面将原图像的每个88块分别作DCT变换,在此之前我们需要知道每个块中所包含象素点的坐标。通过图4.1我们不难总结出规律,即:所取(m,n)快中的左上点的行坐标为x=(m-1)8+1而左上点的列坐标为y=(n-1)8+1如图4.2。
由此又可推出该块中所有象素点的坐标,用MATLAB的语句来表示可以写成block_dct1=I(x:x+block-1,y:y+block-1),这样block_dct1矩阵用来表示该块所有象素的值。之后对该块进行DCT变换,从而将空域图像88块矩阵变为频域88块矩阵。
1.1.3 DCT变换与嵌入
首先,要检测变换块是否含有边界,可以将边界图像与原图相对应位置的象素块提出,将块中所有象素的值(只含0,1)求和的方法检测它是否含有边界,不妨设置一个阈值等于3,即该块中含有三个或以上的边界点就认为该块含有较多的边界信息,通过边界自适应的原理应当将较大的强度值嵌入。
然后,需要将每一个88块进行DCT变换,并将变换后的直流分量与强度值和水印图像相应点象素的信息相乘。在这里需要指出的是为了保证提取算法的简单可以令水印图像象素的值减一个比较小的值。
这一步用MATLAB来实现可以用block_dct1=dct2(block_dct1)分别将88块进行二维DCT变换,block_dct1(1,1)=block_dct1(1,1)(1+Alpha*(mark(m,n)-0.1))其中的mark表示水印图像的象素值,将它嵌入块的直流项中。
1.1.4 恢复空域
将嵌入后的块分别进行反DCT变换,并且按顺序存回I矩阵,这时的I就是嵌入水印后的图像。
1.2 水印的提取
这里的水印提取方法可以看作是嵌入的反变换,由于在频域的88块的直流量中乘上了与水印信息有关的系数,那么同样我们可以通过原图像与水印图像88块直流分量的值相除得到的商即是与水印图像相关的值,由于嵌入时水印图像值只含0、1,而且我们在这个值得后面又减了一个小的常数,因此将除得的商减去1记为cc,这样就可以在嵌入的水印值为0的时候cc<0,反之在嵌入的水印值为1的时候cc>0。这样就可以绘制出水印图像。
1.3 仿真程序
2 结果分析
原始图像与嵌入水印后的图像仅有微小的差别,人眼基本分辨不出两图像的任何不同。这说明DCT域水印算法具有较好的不可见性,基本不影响视觉质量,同时也很好的达到了透明性的要求。
通过互相关性nc进行评价,计算结果为:nc为0.9849,说明在dct方法中,对于噪声的攻击,其鲁棒性是比较好的。
实验结果在某方面验证了该算法的有效性、可靠性、抗攻击性、鲁棒性和不可见性,能够为数字媒体信息在防伪、防篡改、认证、保障数据安全和完整性等方面提供有效的技术保障。