《基于MATLAB的数字水印技术研究.pdf》由会员分享,可在线阅读,更多相关《基于MATLAB的数字水印技术研究.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 基于 MATLAB 的数字水印技术研究 1 引言-作为传统加密系统的有效补充办法,从 1993 年 Caronni 正式提出数字水印到现在短短几年里,无论是在国内还是在国外对数字水印的研究都引起了人们极大的关注。但数字水印技术的发展还很不成熟,应用也处于初级阶段。在我国,知识产权问题是一个敏感的话题,只有深入开展数字水印技术的研究,尽快制定我国的版权保护水印标准,才能使我们在未来可能的国际知识产权纠纷中取得主动权。那么掌握高效的工具,便成为一个必须解决的问题。本文就针对数字水印本身的特点,介绍了一种高效的实用工具MATLAB。2 数字水印技术 2.1 数字水印技术的复杂性 数字水印技术涉及到
2、通信理论、编码理论、噪声理论、视听觉感知理论、扩频技术(Spread Spectrum)、信号处理(Signal Processing)技术、数字图像处理(Digital Image Processing)技术、多媒体(Multimedia)技术、模式识别(Pattern Reorganization)技术、算法设计(Algorithm Design)等理论,用到经典的 DFT(Discrete Fourier Transform)、DCT(Discrete Cosine Transform)变换和近代最先进的数学工具-小波(Wavelet)。数字水印又是一个横跨计算机科学、生理学、密码学、数
3、字、数字通信等多门学科,并与Internet 的发展密切相关的交叉科学。数字水印的多学科性导致数字水印技术研究的难度和复杂性。所以,针对数字水印技术本身的跨学科特点,找出一种合适的编程工具,往往可以起到事半功倍的效果。下面我们从数字水印的一般模型出发,来逐步介绍 MATLAB。2.2 数字水印的一般模型 数字水印的一般模型如图 1 所示:频域法加入数字水印的原理是首先将原始信号(语音一维信号、图像二维信号)变换到频域,常用的变换一般有 DWT、DCT、DFT、WP 和分形。然后,对加入了水印信息的信号进行频域反变换(IDWT、IDCT、DFT、WP),得到含有水印信息的信号。频域法检测水印的原
4、理是将原始信号与待检测信号同时进行变换域变换,比较两者的区别,进行嵌入水印的逆运算,得出水印信息。如果是可读的水印,那么就此结束,如果是不可读水印,如高斯噪声,就将得出的水印与已知水印作比较,由相关性判断,待检测信号含不含水印,故水印的检测有两个结束点。2.3 数字水印技术的常用算法 数字水印算法一般可分为两种空域法和频域法,频域法有以下优点:1)嵌入的水印信号能量可以分布到空域的所有像素上,有利于保证水印的不可见性;2)视觉系统(HVS)的某些特性(如频率的掩蔽特性)可以更方便地结合到水印编码过程中;3)频域法可与国际数据压缩标准兼容,从而实现在压缩域(compressed domain)内
5、的水印编码。所以我们也以频域法为主介绍 MATLAB 在数字水印技术中的使用。DCT 法(Discreste Cosine Transformation)对原始信号做 DCT 的算法:Cox 和 Piva 等人提出的 DCT 技术的经典之作。Cox 利用随机数发生器产生标准正态序列作为水印信息对图像进行整体 DCT 变换后,选取除去 DC 系数之外部分较低频率系数叠加水印信息;Piva 则修改整幅图像的中频部分。对原始信号分块后,再作 DCT 的算法:Hsu 和 Wu 把图像进行 8*8 分块,将一个二进制序列作为水印放入 DCT 的中频区;有些学者则计算整个图像的 DCT,把一个实数序列嵌入
6、DCT 的中频系数上。选择中频区的好处是一方面尽量减少嵌入信息对图像主观视觉的影响;同时,尽量避免有损压缩对水印信息可能带来的损失。还有一种 DCT 方法就是把水印信息嵌入到高频系数上,但是采用这种方法,抗压缩性非常 差。DFT 法(Discrete Fourier Transformation)Swanson 等利用时域小波变换和频率掩蔽特性结合,实现多分辨率视频水印;Kundur 和Hatzinakos 把水印植入灰度图像的小波变换域。其它变换域还有 Fourier-mellin 域、Fourier 变换域、分形 或 WP(Wavelet Package)等。以上的变换域算法计算量都非常大
7、,编程实现这些变换和逆变换也需要好好下一番功夫,由此造成研究人员把大量的时间和精力浪费在与水印算法研究无关的问题上。3 可实现数字水印技术的高效实用工具Matlab 3.1Matlab 简介 Matlab是当前在国内外十分流行的工程设计和系统仿真软件包。它是MathWorks公司于1982年推出的一套高性能的数值计算和可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一人方便的、界面友好的用户环境。Matlab 的推出得到了各个领域专家、学者的广泛关注,其强大的扩展功能为各个领域的应用提供了基础。由各个专家学者相继推出了 MATLAB 工具箱,其中的信号处理(signal p
8、rocessing)、控制系统(control system)、神经网络(neural network)、图像处理(image processing)、鲁棒控制(robust control)、非线性系统控制设计(nonlinear system control design)、系统辨识(system identification)、最优化(optimization)、模糊逻辑(fuzzy logic)、小波(wavelet)、通信(communication)、统计(statistics)等工具箱,这些工具箱给各个领域的研究和工程应用提供了有力的工具,借助于这些“巨人肩上的工具”,各个层次的
9、研究人员可直观、方便地进行分析、计算及设计工作,从而大大地节省了时间。3.2 用 Matlab 研究数字水印的优点 集成了 DCT、DWT 等函数有丰富的小波函数和处理函数,这不仅方便了研究人员,而且使源程序简洁明了、易实现。强大的数学运算功能。能够方便、高效地实现音频、视频中的大量矩阵运算。提供了图像处理工具箱、小波分析工具箱、数字信号处理工具箱。用来编制跨数字图像处理技术、数字信号处理等多学科的数字水印技术是非常好的选择。MATLAB 与目前最强大的编程工具Visual C+具有良好的接口。3.3Matlab 函数介绍(以 MATLAB5.3 为例)在介绍函数之前,我们必须明确一点:作水印
10、程序时,处理的图像数据是二维信号,而声音信号是一维信号。这里,我们仅仅简单介绍与水印有关的函数,具体函数的用法请读者参考文献2。数据输入输出函数 imread()和 imwrite():可以读写 bmp,jpg/jpeg,tif/tiff,png,hdf,pcx,wxd 格式文件。读索引文件时,还可以得到相应的调色板数据。auread()、auwrite()、wavread()和 wavwrite():可以方便地读写 au 和 wav 文件,并可控制其中的位及频率。图像显示与声音播放 imshow():显示一幅图像;imfinfo():可以得到读入图像的信息。如文件的大小、格式、格式版本号、图
11、像的高度、宽度、颜色类型(真彩色,灰度图还是索引图)等 wavplay():播放 wav 声音文件。当然,也可以把处理后的 wav 文件保存后再用其它工具播放。wavrecord():可以对处理后的 wav 文件进行录音。变换频函数 对信号采用不同的变换,是实现频域法水印的至关重要的一步,MATLAB 中对一维信号和二维信号分别提供了各种变换和逆变换函数。离散余弦变换(DCT)dct(),dct2():分别实现一维信号和二维信号的 DCT(离散余弦变换);idct(),idct2():分别实现一维信号和二维信号的 IDCT(逆向离散余弦变换);离散傅里叶变换(DFT)fft(),fft2():
12、分别实现一维信号和二维信号的 DFT(离散傅里叶变换);ifft(),ifft2():分别实现一维信号和二维信号的 IDFT(逆向离散傅里叶变换);离散小波变换(DWT)dwt(),dwt2():分别实现一维信号和二维信号的 DWT(离散小波变换);idwt(),idwt2():分别实现一维信号和二维信号的 IDWT(离散小波变换);Wavedec2():多级二维小波分解函数;Waveinfo():提供小波包中所有的小波信息;另外,MATLAB 中还有丰富的小波包处理函数,有兴趣的读者可参考文献2。攻击函数 对算法进行攻击测试是对水印鲁棒性检测的一种重要手段,一个好的水印算法必须经过各种攻击测
13、试才能对之做出客观的评价。MATLAB 中的许多函数可以直接用来做的攻击测试。旋转:rotate()可以对图像进行任意角度的旋转;剪裁:imcrop()可以按精确定位的各点坐标进行剪裁;滤波:filter()和 filter2()可实现对一维信号和二维信号的滤波;抖动:dither()对图像进行抖动;抖动攻击考验水印鲁棒性的一个很好的攻击;jpeg 压缩:imwrite()中 jpg 和 quality 参数能对图像进行可控 jpg 压缩;加各种噪声:imnoise()可以对图像加入各种噪声,如白噪声、椒盐噪声等,加入噪声是对水印鲁棒性考验的一种常见的攻击;放大/缩小:imresize()可以
14、以指定的插值方法来对图像进行放大和缩小。3.4 一个用 MATLAB 编写的数字水印算法实例 为证明 MATLAB 的高效性与实现简便性,我们以文献1的算法为例,给出在 Windows98环境下 MATLAB5.3 中调试通过的完整源程序。嵌入水印%定义常量 size=256;block=8;blockno=size/block;LENGTH=size*size/64;Alpha1=0.02;Alpha2=0.1;T1=3;I=zeros(size,size);D=zeros(size,size);BW=zeros(size,size);block_dct1=zeros(block,block
15、);%产生高斯水印,并显示水印信息;randn(seed,10);mark=randn(1,LENGTH);subplot(2,2,1);plot(mark);title(watermarc:Gaussian noise);%显示原图 subplot(2,2,2);I=imread(lena264_264,bmp);imshow(I);title(origine image:I);%显示 prewitt 为算子的边缘图 BW=edge(I,prewitt);subplot(2,2,3);imshow(BW);title(edge of origine image);%嵌入水印 k=1;for
16、m=1:blockno for n=1:blockno x=(m-1)*block+1;y=(n-1)*block+1;block_dct1=I(x:x+block-1,y:y+block-1);block_dct1=dct2(block_dct1);BW_8_8=BW(x:x+block-1,y:y+block-1);if m=1|nT1 Alpha=Alpha2 else Alpha=Alpha1;end block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k);block_dct1=idct2(block_dct1);D(x:x+block-1,y
17、:y+block-1)=block_dct1;k=k+1;end end%显示嵌入水印后的图像 subplot(2,2,4);imshow(D,);title(embeded image:D);由些可以看到用 MATLAB 的编写一个完整的水印嵌入算法只需几十条语句便可以完成,而这些程序如果用 C 语言或其它高级语言编写程序至少在 100 行以上。这个例子充分证明了MATLAB 在数字水印技术处理中的方便性和高效性。4 MATLAB 与 VC+6.0 的接口 用 MATLAB 编写数字水印程序的主要优点是语言本身适合水印技术所需的大量的函数库。并且 MATLAB 本身具有可扩展性、易学易用性和高效性的优点。除此之外,MATLAB 还与VC+6.0 有着良好的编程接口,必要时,可以采用 MATLAB 与 VC6.0+的混合编程。有兴趣的读者可参考文献3。5 结束语 数字水印软件作为数据安全领域中的新生事物,具有很高的技术含量和很强的生命力,同时也孕育着巨大的商机。我们有理由相信,有了一个高效实用的研究工具能起到事半功倍的效果,会有越来越多的有识之士投入到数字水印技术的研究和产业化进程中来。
限制150内