本文主要是介绍离散余弦DCT域的数字水印,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
基于MATLAB的离散余弦DCT域的数字水印
一、数字水印技术的概述
1.1数字水印的概述
伴随着计算机网络的发展,信息媒体的数字化为信息的存取提供了巨大的便利,显著提高了信息表达的效率和准确性。但是同时也带来了一些负面影响,一些别有企图的个人和团体在没有得到原作者的同意的情况下复制和传播有版权的数据文件或作品。所以,数字媒体的信息安全、知识产权保护和认证等问题变得日益突出,变成一个急需解决的议题。密码技术是信息安全技术领域的主要传统技术之一,但是此方法有缺点:一是加密后的文件因不可理解性从而妨碍信息的传播。二是一旦被解密后,文件就不再受保护。所以,需要一种代替技术或者是对密码学进行补充的技术,这时,数字水印技术便被提出了。
数字水印技术基本特征主要有:鲁棒性、不可见性、不可检测性、自恢复性。
主要应用领域有版权保护、盗版跟踪、图像认证、票据防伪、标题与注释、拷贝保护。
数字水印按特性划分分为鲁棒数字水印和脆弱数字水印;按水印所附载的媒体划分分为图像水印、音频水印、视频水印、文本水印;按水印隐藏的位置划分分为时(空)域数字水印、频域数字水印、时/频域数字水印和时间/尺度域数字水印。
尽管人们都在努力发展和完善数字水印技术,但水印技术仍然没有完全成熟和广为人们理解,而且还有很多问题没有得到解决。尽管水印技术很难在短期内取得突破,但是,鉴于水印技术的广泛的应用价值,有必要对水印技术作一番深入研究。
1.2数字水印的典型算法
目前实现数字水印的典型算法有:
1、空域算法。最简单和有代表性的方案就是用水印信息代替图像的最低有效位(LSB)或多个位平面的所有比特的算法。这是一种典型的空间域数据隐藏算法。
2、变换域算法。变换域算法包括离散余弦变换(DCT)、小波变换(WT)、傅氏变换(FT或FFT)以及哈达马变换(Hadamardtransform)等等。其中基于分块的DCT是最常用的变换之一, DCT数字水印算法是首先把图像分成8×8的不重叠像素块,在经过分块DCT变换后,即得到由DCT系数组成的频率块,然后随机选取一些频率块,将水印信号嵌入到由密钥控制选择的一些DCT系数中。该算法是通过对选定的DCT系数进行微小变换以满足特定的关系,以此来表示一个比特的信息。另外基于DFT和DWT算法与上述算法具有相似的原理。这种 以变换域算法为代表的通用算法普遍采用变换技术,以便在频率域实现水印信号叠加,并借鉴扩频通讯技术对水印信号进行有效编码,从而提高了透明性和健壮性,同时还适当利用滤波技术对水印信号引入的高频噪声进行了消除,从而增加了对低频滤波的抵抗力。
3、压缩域算法。基于JPEG、MPEG标准的压缩域数字水印系统不仅节省了大量的完全解码和重新编码过程,而且在数字电视广播及VOD(Video on Demand)中有很大的实用价值。
4、NEC算法。
5、生理模型算法。
二、可实现数字水印技术的实用工具——Matlab
2.1概述
用Matlab研究数字水印的优点:(1)集成了DFT、DCT、DWT等函数有丰富的小波函数和处理函数,这不仅方便了研究人员,而且使源程序简洁明了、易于实现。(2)强大的数学运算功能。能够方便、高效地实现音频、视频中的大量矩阵运算。(3)提供了图像处理工具箱、小波分析工具箱、数字信号处理工具箱。用来编制跨数字图像处理技术、数字信息处理等多学科的数字水印技术是非常好的选择。(4)Matlab语言的使用者都可以是工具箱的作者,可以按照Matlab工具箱的规则,结果图像处理函数,开发专用数字水印工具箱。
2.2算法中常用的Matlab函数介绍
Matlab有丰富的库函数,其中有实现数字水印算法的FFT、DCT、DWT等函数和相关处理函数,大大简化了算法的实现。简要介绍与数字水印算法实现有关的一些常用函数。
1、图像文件输入输出函数
imread:从文件读取图像,图像文件可以是bm、pdf、jpeg、pcx、tiff、xwd等格式。
imwrite:把图像写成文件
load:将以mat为扩展名的图像文件调入到内存
save:将工作空间中的变量保存到以mat为扩展名的图像文件中
2、图像显示函数
image:建立并显示图像,它可返回一个图像的句柄给一个image对象
imshow:显示一幅图像
truesize:调整图像显示大小
3、LSB空间域算法常用函数
rand:产生随机序列
unit8:把其它类型对象转换为8位无符号整数类型
double:把其它类型对象转换为双精度数值
size:计算图像(矩阵)的大小
sum:对元素求和
reshape:重新排列矩阵
4、DCT域图像变换函数
dct,dct2:分别实现一维信号和二维信号的DCT(离散余弦变换)
idct,idct2:分别实现一维信号和二维信号的IDCT(逆向离散余弦变换)
5、DWT域图像变换函数
dwt,dwt2:分别实现一维信号和二维信号的DWT(离散小波变换)
idwt,idwt2:分别实现一维信号和二维信号的IDWT(离散小波变换)
wavedec2:多级二维小波分解函数
waveinfo:提供小波包中所有的小波信息
6、攻击函数
imcrop:将图像剪裁成指定的矩形
imresize:使用指定的插值方法,调整图像大小
imrotate:使用指定的插值方法逆时针将图像旋转任意指定的角度
imadjust:用于调整图像的对比度
imnoise:给图像增加噪声
filter,filter2:实现对一维和二维信号的滤波
3.3DCT变换水印的实现
数字图像水印算法选择二值化灰度图像作为水印信息,根据水印图像的二值性选择不同的嵌入系数,并将载体图像进行8×8的分块,将数字水印的灰度值直接植入到载体灰度图像的DCT变换域中,实现水印的嵌入。具体方法如下:
设I是M×N大小的原始图像,J是水印图像大小为P×Q,M和N分别是P和Q的偶数倍,把水印J加载到图像I中,算法分以下几步进行:
1. 将I分解为(M/8)×(N/8)个8×8大小的方块B;同时,J也分解为 (M/8)×(N/8)个(8P/M)×(8Q/N)大小的方块V;
2. 对每一个B进行DCT变换:DB=DCT(B);
3. 加载水印对每一个DB和V,s(i)为从DB的中频选出的加载的位置,1≤i≤(8P/M)×(8Q/N), t(i)为水印V的位置坐标 , 1≤i≤(8P/M)×(8Q/N),DB’(s)=A×V,其中A是加权系数,用DB’(s)来代替DB,得到加载水印后的图像DBC;
4. 对以上得到的每一个DBC进行逆DCT变换:IDBC=IDCT(DBC)并将各方块IDBC合并为一个整图’I’,即加载了水印的新图像。
3.4离散余弦变换水印提取算法
设图像D为已经加载了水印的载体图像,现要将所加载的水印从D中提取出来,其过程为上述加载水印算法的逆运算:
1. 将D分解为(M/8)×(N/8)个8×8大小的方块BD;
2. 对每一个BD进行二维DFT变换:DBD=DCT(BD);
3. 提取数据对每一个DBD,按照式V’=1/A×DBD得到V’;
4. 将上面得到的所有V’合并成一个水印整图J’。
3.5DCT算法的matlab程序运行
size=512; N=32;K=8; D=zeros(size);E=0.01;
Y1=imread('22.jpg');
I=rgb2gray(Y1);
3.6 仿真结果
1、低通滤波攻击
hh=fspecial('gaussian',3,0.1);
2、低通滤波攻击
hh=fspecial('gaussian',3,0.3);
3、低通滤波攻击
四、数字水印的性能评估和攻击
对水印的性能建立合理的评估方法和基准是数字水印研究的一个重要内容。对水印的评估主要包括以下两个方面:水印健壮性的评估;嵌入水印对图像引起的失真的主观和客观定量评估。一般而言,在水印健壮性与不可感知性之间需要进行折中。因此,为了能够进行公平合理的性能评估,我们必须尽量保证各个水印系统是在可比较的条件下进行测试,即应该在给定图像视觉可见性要求的前提下进行测试。
4.1影响水印健壮性的因素
1、嵌入的信息量。它直接影响水印的健壮性。对同一种水印方法而言,要嵌入的信息越多,则水印的健壮性越差。被嵌入的信息依赖于各种不同的应用场合。
2、水印嵌入强度。水印嵌入强度和水印可见性之间存在着一个折中。增加健壮性就要增加水印嵌入强度,相应地也会增加水印的可见性。
3、图像的尺寸和特性。图像的尺寸对嵌入水印的健壮性有直接影响。一个实用的水印软件程序应该能够比此图片中恢复出水印。对用于打印的图像,通常需要它是高清晰度的。但是,同时也希望这些图像被扫描并被放到网上后能够得到保护。图像的特性也有重要影响。对扫描的自然图像具有较高健壮性的方法在用于诸如计算机产生的合成图像时,健壮性会大大削弱。一个公平的基准测试所能适应的图像尺寸范围应该很大,从几百个到上万个像素,并且用于测试的图像也应该为不同类型的图像。
4、密钥。密钥对系统的安全起了重要的作用。水印算法中,密钥空间必须足够大,以使穷举攻击法失效。
4.2视觉质量的定量描述
两种定量度量的方法:
1、基于像素的度量方法
此方法属于量化失真度量,用它得到的结果不依赖于主观评估,它允许在不同的方法之间进行公平的比较。大部分在视觉信息处理中的失真量度量或质量方法都属于差分失真度量。该度量都是建立在原始的未失真图像与修改后的失真图像的差值的基础上的。差分失真量度量不能很好地与人类视觉系统想对应,而复杂的水印方法可能会利用一种或多种视觉系统的效应,因此将它们用于水印技术就会带来一些问题,例如使用上述方法来定量度量由水印处理过程所带来的失真,可能会导致度量的不正确评估。如果使用适合于人类视觉的失真量度量,就可能更为有效。
2、可见性质量度量
人们认识到基于像素的失真量度量的弱点,于是越来越多的研究集中于与人的视觉系统相适应的失真量度量。可见性质量利用了人的视觉系统的对比敏感性和掩蔽现象,它是基于人的空间视觉的多通道模型
五、总结
首先,离散余弦变换在图像处理中的作用非常重要,在本设计中,运用离散余弦变换嵌入水印,是嵌入在原图像的低频部分。本文提出的水印算法的鲁棒性虽然不及一些需要原图的水印算法,但是相比而言不需要未加水印的原始图像,而且这种算法可以抵抗一些常见的攻击方法,如:旋转、裁减。低通滤波等等。如果通过直方图均衡的预处理,还可以提高算法的性能,实验证明此算法有较好的鲁棒性。本实验采用的仿真软件是MATLAB7.0,此版本与较高版本相比会缺少一些函数,但对本次设计不会有太大影响。
其次,应该说嵌入水印的图像还是比较清晰的,这说明离散余弦变换法还是具有实用价值的。当不加任何攻击时,提取的水印是非常清晰的,和源图像相似程度高达99.55%!这种算法对低通滤波攻击和剪切攻击来说,提取水印的效果还是比较好的;但对于旋转攻击和剪切攻击来说,效果却并不理想。当旋转和剪切攻击,水印就提不出来了。这证明离散余弦变换还是具有一定的局限性的。数字水印的方法有很多,但是每一种单独的方法都无法禁得起多种方法的图像处理,只有组合不同的方法才能达到更好的效果。
最后,程序使用了最一般的循环语句,而没有考虑到代码的优化。在本论文中,程序的执行花销时间很少,但若是图像比较大的话,是一定要考虑代码优化问题的。特别是for循环,当采用向量化循环方法将使运行时间成百上千倍的缩减!另外也没有考虑预分配数组的问题,当加入预分配数组后,运行时间也会明显缩短,而且会使内存有较大的连续空间,而不会使存储器出碎片。
这篇关于离散余弦DCT域的数字水印的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!