1基于Matlab的数字图像水印技术**********摘要:数字水印技术涉及到许多图像处理算法以及数学计算工具等,如果用普通编程工具实现上述算法,需要要花费大量的时间,MathWorks公司推出的一种简单、高效、功能极强的高级语言——MATLAB语言,它具有高性能数值计算能力,可视化计算环境。只需短短的几行代码就可在MATLAB中解决许多复杂的计算问题。关键字:图像处理,数字水印,MATLAB0引言随着Internet的普及,信息的安全保护问题越来越备受关注。如何有效地防止数据的非法复制以及鉴别数字媒体的知识产权,成为急需解决的问题。Caronni在1993年提出了数字水印,并将其应用于数字图像,后来,将数字水印的概念扩展到电视图像等领域,数字水印技术是一种版权保护的重要手段,得到了广泛的研究和应用。本文简要介绍一下基于Matlab的数字图像水印技术。介绍数字水印的原理以及使用方法,探索了基于离散余弦变换(DCT)的数字图像水印算法,并借助MATLAB,实现数字水印的嵌入、提取以及攻击测试。1数字水印技术1.1数字水印数字水印(DigitalWatermarking)技术是将一些标识信息(即数字水印)直接嵌入数字载体当中,例如包括多媒体、文档、软件等,但不影响原载体的使用价值,也不容易被人的知觉系统,如视觉或听觉系统觉察到。通过这些隐藏在载体中的信息,可以确认内容创建者、购买者、传送隐秘信息或者判断载体是否被篡改等。数字水印是信息隐藏技术的重要研究方向之一。从信号处理的角度看,在载体图像中嵌入数字水印,可以视为在强背景(即原始公开图像)下叠加一个视觉上看不到的弱信号(即水印图像),由于人的视觉系统(HumanVisual2System,HVS)[1]分辨率受到一定的限制,只要保证叠加信号的幅度低于HVS的对比度门限,HVS就感觉不到信号的存在,因此,通过对载体对象作一定的调整变换,就有可能在不引起人感知的情况下嵌入一些信息。1.2数字水印技术的特点数字水印技术大概具有以下几个方面的特点:1.2.1安全性数字水印的信息应是安全的,很难篡改或伪造,同时,应当有较低的误检测率,如果原内容发生变化,数字水印也发生变化,从而可以检测原始数据的变更;当然数字水印同样对重复添加也有很强的抵抗性。1.2.2隐蔽性数字水印应是不容易被察觉的,而且是不影响被保护数据的正常使用的,也不会降质的。1.2.3鲁棒性是指在经历各种有意或无意的信号处理过程后,数字水印仍能保持部分完整性,并且能被准确鉴别。可能的信号处理过程包括信道噪声、滤波、A/D与D/A转换、重采样、剪切、位移、尺度变化和有损压缩编码等。主要被用于版权保护的数字水印易损水印(FragileWatermarking),用于完整性保护,这种水印也是在内容数据中嵌入不可见的信息。如果内容发生改变时,这些水印信息也会发生相应的改变,从而可以鉴定原始数据是否被篡改。1.2.4水印容量是指载体在没发生形变的前提下可嵌入的水印信息量。嵌入的水印信息必须足以表示多媒体内容的创建者的标志信息,或购买者的序列号,这样有利于解决版权纠纷和保护数字产权合法拥有者的利益。尤其是隐蔽通信领域的特殊性,对水印的容量需求极大。1.3数字水印的应用领域伴随着数字水印技术的发展,数字水印的应用领域也得到了相应扩展,数字水印的基本应用领域是版权保护、隐藏标识、认证和安全不可见通信等。当数字水印应用于版权保护时,潜在的应用市场在包括电子商务、在线或离线地分发多媒体内容以及大规模的广播服务。数字水印用于隐藏标识时,可以在医学、制图、数字成像、数字图像监控、多媒体索引以及基于内容的检索等领域得到应用。数字水印的认证方面主要用于ID卡、信用卡、ATM卡等上面数字水印的安全不可见通信,将在国防和情报部门得到广泛的应用。多媒体技术的飞速发展和Internet的普及带来了一系列政治、经济、军事和文化方面的问题,产生了许多新的研究热点,以下几个倍受关注的问题构成了数字水印的研究背景。31.3.1数字作品的知识产权保护数字作品,如电脑美术、扫描图像、数字音乐、视频、三维动画等的版权保护是当前的热点问题。由于数字作品的拷贝、修改非常容易,并且可以做到与原作完全相同,所以原创者不得不采用一些严重损害作品质量的办法,给作品加上版权标志,而这种明显可见的标志很容易被篡改。“数字水印”利用数据隐藏原理,使版权标志不可见或不可听,既不损害原作品,又能够达到版权保护的目的。目前,版权保护的数字水印技术已经进入了初步实用化阶段,IBM公司在其“数字图书馆”软件中就使用了数字水印功能,Adobe公司也在其著名的Photoshop软件中,集成了Digimarc公司的数字水印插件。实事求是地说,目前市场上的数字水印产品在技术上还不成熟,非常容易被破坏或破解,距离真正的实用还有很长的路要走。1.3.2商务交易中的票据防伪随着高质量图像的输入输出设备的发展,尤其是精度超过1200dpi的彩色喷墨、激光打印机和高精度彩色复印机的出现,使货币、支票以及其他票据的伪造变得更加容易。另一方面,在从传统商务向电子商务转变的过程中,会产生大量过度性的电子文件,如各种纸质票据的扫描图像等。尽管在网络安全技术成熟以后,各种电子票据还需要一些非密码的认证方式。数字水印技术可以为各种票据提供不可见的认证标志,从而很大程度增加了伪造的难度。1.3.3证件真伪鉴别信息隐藏技术可以在很大范围内应用,作为证件来说,每个人需要不只一个证件,证明个人身份的包括:身份证、护照、驾驶证、出入证等;证明某种能力的包括:各种学历证书、资格证书等。国内目前在证件防伪领域面临巨大的商机,因为缺少有效的措施,使得“造假”、“买假”、“用假”泛滥,已经严重地干扰了正常的经济秩序,对国家的形像也造成了不良影响。通过水印技术可以确认该证件的真伪,使得该证件无法仿造假。2高效并实用的工具——MATLABMatlab是当前在国内外十分流行的工程设计和系统仿真软件包。它是MathWorks公司在1982年推出的一套高性能的数值计算以及可视化的软件,它把数值分析、矩阵运算、信号处理和图形显示集于一体,构成了一个方便的、界面友好的用户环境。4Matlab一推出就得到了各个领域专家、学者的广泛关注,其强大的扩展功能为各个领域的应用提供了基础。由各个专家学者相继推出的MATLAB工具箱,其中的信号处理(signalprocessing)、控制系统(controlsystem)、神经网络(neuralnetwork)、图像处理(imageprocessing)、鲁棒控制(robustcontrol)、非线性系统控制设计(nonlinearsystemcontroldesign)、系统辨识(systemidentification)、最优化(optimization)、模糊逻辑(fuzzylogic)、小波(wavelet)、通信(communication)、统计(statistics)等工具箱,这些工具箱给各个领域的研究工作和工程应用提供了有力的工具,凭借这些“巨人肩上的工具”,各个层次的研究人员可直观、方便地进行分析、计算以及设计工作,从而大大地节省了时间。3数字水印的嵌入水印嵌入就是把水印信号嵌入到原始图像中。水印嵌入过程如图所示图1水印提取过程水印嵌入准则包括两个准则:H法准则和乘法准则。其中惩罚准则有强度因子,为保证在水印不可见的前提下,尽可能提高嵌入水印的强度。强度因子的选择必须考虑图像的性质以及视觉系统的特性。4数字水印的提取与检测在某水印系统中,水印可以被精确地提取出来,这一过程就是水印提取。例如在完整性确认的应用中,必须能够精确地提取出所嵌入的水印,还要通过水印的完整性来确认多媒体数据的完整性。如果提取出的水印发生了部分的变化,最好还能够通过变化的水印的位置来5确定原始数据有没有被篡改的位置。水印在提取检测时可以需要原始图像的参与,也可以不需要原始图像的参与。但将水印技术用于图像的网络发布和传播时,如果检测时需要使用原始图像,则是个缺陷,因此,当前大多数的水印检测算法不需要原始图像的参与[2]。图2和图3分别是水印提取和检测的框图。图2水印提取过程图3水印检测过程5利用Matlab实现图像数字水印加载算法给图像加水印其实就是一个修改图像数据的过程,来给图像隐藏带有特定含义的信息编码。目前,最常见的数字水印算法包括:最低有效位算法LSB(Leastsignificantbits)、Patchwork方法及纹理块映射编码方法、基于变换域方法等。其中LSB算法具有较大的信息隐藏量,可是水印很脆弱,容易被擦除。Patchwork方法和纹理块映射编码方法隐蔽性较好,并且对于有损的JPEG和滤波、压缩和扭转等操作有较好的抵抗能力,可是仅适用于具有大量纹理区域的图像,不能完全自动完成。6基于变换域方法具有较好的稳健性,变换又包括:离散余弦变换(DCT)、小波变换(WT)、付氏变换(FFT)和哈马斯变换等。其中,基于分块的DCT是最常用的变换之一,因为现在所采用的静止图像压缩标准JPEG也是基于分块DCT的。本文采用离散余弦变换(DCT)设计了水印的嵌入算法,将二值图像作为水印信号,利用Matlab(当前国内最流行的工程与设计软件)实现算法。6水印攻击测试由于数字水印在实际应用中可能会遭到各种各样的攻击,因此对算法进行攻击测试是衡量一个水印算法优劣的重要手段。本程序的后半部分就是一个水印攻击与水印提取的程序,首先对嵌入水印后的图像进行JPEG压缩(一种水印攻击),而后从压缩的图像中提取出水印。图4原始公开图像图5水印图像7图6嵌入水印后的图像图7加入高斯噪声的水印图像图8从含水印图像中提取出的水印图像7实验程序clear8clcM=512;%原图像长度N=64;%水印图像长度K=8;I=zeros(M,M);J=zeros(N,N);BLOCK=zeros(K,K);%显示原图像subplot(2,3,1);I=imread('C:\DocumentsandSettings\Administrator\桌面\图像.jpg','jpg');imshow(I);title('原始公开图像');%显示水印图像subplot(2,3,2);J=imread('C:\DocumentsandSettings\Administrator\桌面\水印.jpg','jpg');imshow(J);title('水印图像');%水印嵌入forp=1:Nforq=1:Nx=(p-1)*K+1;y=(q-1)*K+1;BLOCK=I(x:x+K-1,y:y+K-1);BLOCK=dct2(BLOCK);ifJ(p,q)==0a=-1;elsea=1;endBLOCK(1,1)=BLOCK(1,1)*(1+a*0.03);BLOCK=idct2(BLOCK);I(x:x+K-1,y:y+K-1)=BLOCK;endend%显示嵌入水印后的图像subplot(2,3,3);imshow(I);title('嵌入水印后的图像');9imwrite(I,'C:\DocumentsandSettings\Administrator\桌面\图像.jpg','jpg');%从嵌入水印的图像中提取水印I=imread('C:\DocumentsandSettings\Administrator\桌面\图像.jpg','jpg');J=imread('C:\DocumentsandSettings\Administrator\桌面\水印.jpg','jpg');J=imnoise(J,'gaussian',0,0.01);subplot(2,3,4);imshow(J,[]);title('加入高斯噪声');forp=1:Nforq=1:Nx=(p-1)*K+1;y=(q-1)*K+1;BLOCK1=I(x:x+K-1,y:y+K-1);BLOCK2=J(x:x+K-1,y:y+K-1);BLOCK1=dct2(BLOCK1);BLOCK2=dct2(