音频数字水印报告+matlab程序
Matlab技术数字水印嵌入与提取
Matlab技术数字水印嵌入与提取数字水印技术是一种在数字媒体中嵌入隐藏信息的方法,被广泛应用于版权保护、身份验证和防伪等领域。
Matlab作为一个功能强大的科学计算软件,提供了丰富的工具和函数来实现数字水印的嵌入和提取。
本文将介绍Matlab中数字水印技术的基本原理,并通过实例演示嵌入和提取过程。
一、数字水印的基本原理数字水印技术利用数字信号的统计特性,将水印信息嵌入到原始信号中,形成一个带有隐藏信息的新信号。
在嵌入和提取过程中,必须保证水印对原始信号的影响尽可能小,以保持信号的质量和可辨识度。
数字水印的嵌入过程主要包括以下几个步骤:1. 选择合适的水印信息:水印信息可以是文字、图像、音频等形式,需要根据应用需求进行选取。
2. 将水印信息与原始信号进行编码和调制:通过编码和调制技术,将水印信息嵌入到原始信号的特定位置,使其与原始信号融为一体。
3. 保证水印的安全性:为了抵抗攻击和伪造,需要对水印进行加密和鲁棒性处理,以保证水印的可靠性和可提取性。
数字水印的提取过程主要包括以下几个步骤:1. 对带水印信号进行预处理:包括噪声滤波、增强对比度等,以提高水印的可提取性。
2. 提取水印信息:通过解调和解码技术,从带水印信号中还原出水印信息。
3. 验证水印的完整性和准确性:对提取出的水印进行验证和比对,以确定提取的水印是否与原始水印一致。
二、Matlab实现数字水印嵌入与提取Matlab提供了强大的图像处理工具箱和信号处理工具箱,可以方便地实现数字水印的嵌入和提取。
以下将以图像水印为例,介绍Matlab中数字水印的嵌入和提取过程。
1. 数字水印的嵌入a. 选择水印图像和原始图像:从计算机中选择一张水印图像和一张原始图像,作为嵌入水印的输入。
b. 对原始图像进行预处理:包括图像的大小调整、对比度增强等操作,以提高水印的嵌入效果。
c. 对水印图像进行处理:通过调整水印图像的大小和位置,使其适应于原始图像的特定区域。
基于MATLAB7.0的音频水印采样量化算法
基于Matlab 的数字音频水印量化算法【Abstract】Digital watermarking technology is a hot topic in recent years, copyright protection in the field of audio, wood paper, based on wavelet transform and discrete cosine transform digital audio watermarking, the extraction algorithm Matlab7.0 implementation. Experiments show that the algorithm for resampling, quantization, and MP3 compression attacks have robust.Key words: wavelet transform: DCT: Digital watermarking: Matlab【摘要】:数字水印技术是近年来音频版权保护领域的一个热点,木文提出了一种基于小波变换和离散余弦变换的数字音频水印嵌入、提取算法的Matlab 实现。
实验表明,该算法对于重采样,重量化,及MP3压缩等攻击都具有较好的鲁棒性。
【关键词】:小波变换:离散余弦变换:数字水印:Matlab一、IntroductionAs an effective means of digital media works of intellectual property protection, digital watermarking has been widespread concern, and has become a hot international academic research. The digital watermarking technology related to the amount of people image, audio processing algorithms, mathematical tools, the amount of time people spend in programming and preparation of the algorithm If only using programming tools provided Hing functions to achieve. Therefore, a high-performance scientific and engineering calculation software is necessary. Matlab is currently very popular in domestic and foreign engineering design and system simulation software packages. It is The MathWorks introduced in 1982 a high-performance numerical computation and visualization software 'which provides image processing toolbox, wavelet analysis toolbox, digital signal processing toolbox write digital watermarking technology is a very good choice. Programs written using the above algorithm, only a few dozen statements can achieve a digital watermark. If these procedures written in C language or other high-level language program at least more than 100 lines. Muwen for digital audio watermarking itself.一、引言作为数字媒体作品知识产权保护的一种有效手段,数字水印得到了广泛关注,并己成为国际学术界研究的一个热点。
matlab数字水印嵌入与提取代码
数字水印技术是一种用于保护数字信息安全和保护知识产权的重要技术手段。
Matlab作为一种强大的数学计算软件,具有丰富的数字信号处理和图像处理工具包,能够很好地支持数字水印的嵌入和提取。
本文将介绍如何使用Matlab进行数字水印的嵌入和提取,并给出相应的代码实现。
1. 数字水印嵌入数字水印嵌入是将一段隐藏的信息嵌入到载体中,使得这段信息对于一般观察者来说是不可察觉的。
在Matlab中,可以使用一些图像处理工具进行数字水印的嵌入。
需要读入载体图像和待嵌入的数字水印。
载体图像可以使用Matlab 中的imread函数进行读取,得到一个包含图像像素信息的矩阵。
待嵌入的数字水印可以是一段文本、一幅小型图像或者一段音频信号。
接下来,可以选择合适的嵌入算法进行数字水印的嵌入。
常用的算法包括LSB替换算法、DCT变换算法以及扩频水印算法等。
这些算法都可以在Matlab中找到相应的实现。
将得到的嵌入水印后的图像保存起来,成为带有数字水印的图像。
可以使用Matlab中的imwrite函数将处理后的图像保存到本地。
2. 数字水印提取数字水印提取是将嵌入在载体中的数字水印提取出来,还原成原始的水印信息。
在Matlab中,可以利用数字信号处理和图像处理工具进行数字水印的提取。
需要读入带有数字水印的载体图像。
同样可以使用Matlab中的imread函数进行读取。
接下来,根据数字水印嵌入时所采用的算法,使用相应的提取算法进行数字水印的提取。
提取算法通常与嵌入算法是对应的,可以在Matlab中找到相应的实现。
将提取得到的数字水印展示出来,可以是一段文本、一张图像或者一段音频信号。
在Matlab中可以利用文本处理工具、图像处理工具和音频处理工具展示提取得到的数字水印信息。
3. 示例代码以下是一个简单的示例代码,演示了如何在Matlab中进行数字水印的嵌入和提取:数字水印嵌入image = imread('carrier_image.jpg'); 读入载体图像watermark = imread('watermark_image.jpg'); 读入待嵌入的数字水印watermarked_image = embed_watermark(image, watermark); 使用embed_watermark函数进行数字水印的嵌入imwrite(watermarked_image, 'watermarked_image.jpg'); 保存带有数字水印的图像数字水印提取watermarked_image = imread('watermarked_image.jpg'); 读入带有数字水印的载体图像extracted_watermark = extract_watermark(watermarked_image); 使用extract_watermark函数进行数字水印的提取imshow(extracted_watermark); 展示提取得到的数字水印信息以上代码中,embed_watermark和extract_watermark分别是数字水印的嵌入和提取函数。
Matlab实现简单扩频语音水印算法详解
Matlab实现简单扩频语⾳⽔印算法详解⽬录⼀、实验背景1.实验⽬的2.实验环境3.原理简介⼆、基础知识1.PN序列2.时域到频域变换的原因3.三种时域到频域变换的区别三、算法源码1.PN产⽣函数2.隐藏算法3.提取算法4.测试脚本四、运⾏测试1.⽆攻击(误码率0.000976):2.AU格式转换(误码率0.001921):3.压缩与解压缩(误码率0.002029):⼀、实验背景1.实验⽬的了解扩频通信原理,掌握扩频⽔印算法的基本原理,设计并实现⼀种基于⾳频的扩频⽔印算法,了解参数对扩频⽔印算法性能的影响。
2.实验环境(1) Windows 11 操作系统;(2) Matlab R2020b 科学计算软件;(3) WAV⾳频⽂件。
3.原理简介①扩频基本原理扩频是⼀种能在⾼噪声环境下可靠传输数据的重要通信技术,其基本原理是:信号在⼤于所需的带宽内进⾏传输,数据的带宽扩展是通过⼀个与数据独⽴的码字完成的,并且在接收端需要该码字的⼀个同步接收,以进⾏解扩和数据恢复。
②扩频通信的特点占据频带很宽,每个频段上的能量很低;即使⼏个频段的信号丢失,仍可恢复信号;利⽤相互正交的扩频码,可以利⽤这个优点设计⽔印算法。
③实验算法本例中设计⼀种简单的算法:利⽤正交的PN序列代表0、1信号,并将其叠加到信号DCT域。
提取⽔印时,利⽤PN序列的正交性可以较为准确地恢复⽔印。
⼆、基础知识1.PN序列PN序列(Pseudo-noise Sequence),⼜称伪噪声序列,这类序列具有类似随机噪声的⼀些统计特性,但和真正的随机信号不同,它可以重复产⽣和处理,故称作伪随机噪声序列。
PN序列⼀般⽤于扩展信号频谱。
PN序列的扩频是指⽤⼀个序列去乘以⼀个信息符号,序列码⽚的时间远⼩于信息符号的时间,由信号的时间与频谱的关系,我们可以知道扩频后的序列的频谱是展宽的。
由于PN序列的相关性很低,只有在发送的PN序列和接收的PN序列相同,并且其码⽚同步时才能得到⼀个相关峰。
数字音频水印MATLAB程序
利用logistic映射产生混沌序列x(n)a=3.571x{1}=0.2while 0<x{n}<1x{n+1}=a.*x{n}.*(1-x{n})n=n+1enddisp(x)结果n=102再对x(n)进行量化得0-1序列于明文序列y(n)进行模2加,得到密文序列。
采样函数:linspace(0,0.8906,50)先将47168bit的宿主音频等步长分段,分为1000段,然后混沌序列选择其中的102段,对每段进行3及小波分解,挑选出绝对值最大的系数,运用嵌入公式。
进行3及小波分解及重构图象的程序问题:如何量化,进行模2加。
二进制如何按位进行加法。
生成水印程序%%%%%%%%%%%%%%%%%%%%%读取声音文件FILE='D:\audio\in\1.wav';[y,Fs,bits]=wavread(FILE);%绘制出原始声音信号图figure(1);subplot(3,1,1);plot(y);title(%用db4小波对读入的声音文件进行3级小波分解[c,l]=wavedec(y,3,'db4');%提取3级小波分解的低频系数和高频系数ca3=appcoef(c,l,'db4',3);cd3=detcoef(c,l,3);cd2=detcoef(c,l,2);cd1=detcoef(c,l,1);x=ca3;lx=length(x);subplot(3,1,2);plot(x);s=max(abs(x))*0.2;i=find(abs(x)>s);%插入位置lx=length(x(i));%产生水印信号,sinmark=[0.001:0.001:7.901];mm=[0.01:0.01:79.01];mark=sin(mm);randn('seed',10);mark=randn(1,lx);figure(2);subplot(3,1,1);plot(mark);ss=mark;rr=ss*0.02;%水印信号嵌入x(i)=x(i).*(1+rr');%小波重构,生成加入了水印信号的声音信号c1=[x',cd3',cd2',cd1'];s1=waverec(c1,l,'db4');figure(1);subplot(3,1,2);plot(s1);whos('s1');disp('');%把加入了水印信号的声音作为sample2.wav保存file1='sample2.wav';wavwrite(s1,Fs,bits,file1);figure(1);subplot(3,1,3);diff1=s1-y';plot(diff1);水印恢复程序%%%%%%%%%%%%%%%%%%%%%%读取原始声音信号FILE='s00.wav';[y,Fs,bits]=wavread(FILE);%用db4小波对读入的声音文件进行3级小波分解[c,l]=wavedec(y,3,'db4');%提取3级小波分解的低频系数和高频系数ca3=appcoef(c,l,'db4',3);cd3=detcoef(c,l,3);cd2=detcoef(c,l,2);cd1=detcoef(c,l,1);%读取含有水印的信号FILE1='sample2.wav';[y1,Fs1,bits1]=wavread(FILE1);%用db4小波对读入的含有水印的声音文件进行3级小波分解[c1,l1]=wavedec(y1,3,'db4');%提取3级小波分解的低频系数和高频系数ca31=appcoef(c1,l1,'db4',3);cd31=detcoef(c1,l1,3);cd21=detcoef(c1,l1,2);cd11=detcoef(c1,l1,1);x=ca3;x1=ca31;lx=length(x);lx1=length(x1);s=max(abs(x))*0.2;i=find(abs(x)>s);lx=length(x(i));z(i)=x1(i)-x(i);mark1=z(i)./x(i)';mark1=mark1/0.02;figure(2);subplot(3,1,2);plot(mark1);diff=mark1-mark;figure(2);subplot(3,1,3);plot(diff);压缩攻击%%%%%%%%%%%%%%%%%%% FILE='sam96.wav';[y7,Fs,bits]=wavread(FILE);[c1,l1]=wavedec(y7,3,'db4');%提取3级小波分解的低频系数和高频系数ca31=appcoef(c1,l1,'db4',3);cd31=detcoef(c1,l1,3);cd21=detcoef(c1,l1,2);cd11=detcoef(c1,l1,1);x=ca3;x1=ca31;lx=length(x);lx1=length(x1);s=max(abs(x))*0.2;i=find(abs(x)>s);lx=length(x(i));z(i)=x1(i)-x(i);mark1=z(i)./x(i)';mark1=mark1/0.02;figure(3);subplot(3,1,1);plot(mark1);%axis([0 8000 -1 1]);FILE='sam128.wav';[y7,Fs,bits]=wavread(FILE);[c1,l1]=wavedec(y7,3,'db4');%提取3级小波分解的低频系数和高频系数ca31=appcoef(c1,l1,'db4',3);cd31=detcoef(c1,l1,3);cd21=detcoef(c1,l1,2);cd11=detcoef(c1,l1,1);x=ca3;x1=ca31;lx=length(x);lx1=length(x1);s=max(abs(x))*0.2;i=find(abs(x)>s);lx=length(x(i));z(i)=x1(i)-x(i);mark1=z(i)./x(i)';mark1=mark1/0.02;figure(3);subplot(3,1,2);plot(mark1);axis([0 8000 -1 1]);FILE='sam160.wav';[y7,Fs,bits]=wavread(FILE);[c1,l1]=wavedec(y7,3,'db4');%提取3级小波分解的低频系数和高频系数ca31=appcoef(c1,l1,'db4',3);cd31=detcoef(c1,l1,3);cd21=detcoef(c1,l1,2);cd11=detcoef(c1,l1,1);x=ca3;x1=ca31;lx=length(x);lx1=length(x1);s=max(abs(x))*0.2;i=find(abs(x)>s);lx=length(x(i));z(i)=x1(i)-x(i);mark1=z(i)./x(i)';mark1=mark1/0.02;figure(3);subplot(3,1,3);plot(mark1);axis([0 8000 -1 1]); 低通滤波%%%%%%%%%%%%%%%%%%%%%%%%%%%[b,a]=butter(10,10000/Fs);y2=y1;y5=filtfilt(b,a,y2);figure(4);freqz(b,a,128,10000)figure(5);subplot(3,1,1)plot(y5);subplot(3,1,2)plot(y);subplot(3,1,3)plot(y-y5);file1='sample3.wav';wavwrite(y5,Fs,bits,file1);FILE1='sample3.wav';[y5,Fs1,bits1]=wavread(FILE1);%用db4小波对读入的含有水印的声音文件进行3级小波分解[c1,l1]=wavedec(y5,3,'db4');%提取3级小波分解的低频系数和高频系数ca31=appcoef(c1,l1,'db4',3);cd31=detcoef(c1,l1,3);cd21=detcoef(c1,l1,2);cd11=detcoef(c1,l1,1);x=ca3;x1=ca31;lx=length(x);lx1=length(x1);s=max(abs(x))*0.2;i=find(abs(x)>s);lx=length(x(i));z(i)=x1(i)-x(i);mark1=z(i)./x(i)';mark1=mark1/0.02;figure(4);subplot(2,1,1);plot(mark1);%%%%%%%%%%%%%%%%%%%%%产生随机信号作为噪声信号noise0=randn(size(y));y3=y1;y3=y3+noise0*200;%用db4小波对读入的含有水印的声音文件进行3级小波分解[c3,l3]=wavedec(y1,3,'db4');%提取3级小波分解的低频系数和高频系数ca32=appcoef(c3,l3,'db4',3);cd32=detcoef(c3,l3,3);cd22=detcoef(c3,l3,2);cd12=detcoef(c3,l3,1);x=ca3;x1=ca32;lx=length(x);lx1=length(x1);s=max(abs(x))*0.2;i=find(abs(x)>s);lx=length(x(i));z(i)=x1(i)-x(i);mark3=z(i)./x(i)';mark3=mark3/0.02;figure(4);subplot(2,1,2);plot(mark3);nbsp;重采样%%%%%%%%%%%%%%%%%%%%%%%%fs1=Fs*0.5;wavwrite(y1,fs1,bits,'ss.wav');[y6,fs2,bits]=wavread('ss.wav');%用db4小波对读入的含有水印的声音文件进行3级小波分解[c4,l4]=wavedec(y6',3,'db4');%提取3级小波分解的低频系数和高频系数ca33=appcoef(c4,l4,'db4',3);cd33=detcoef(c4,l4,3);cd23=detcoef(c4,l4,2);cd13=detcoef(c4,l4,1);x=ca3;x1=ca33;lx=length(x);lx1=length(x1);s=max(abs(x))*0.2;i=find(abs(x)>s);lx=length(x(i));z(i)=x1(i)-x(i)';mark4=z(i)./x(i)';mark4=mark4/0.02;figure(5);subplot(2,1,1);plot(mark4);axis([0 8000 -1 1]);fs1=Fs*0.25;wavwrite(y1,fs1,bits,'ss.wav');[y6,fs2,bits]=wavread('ss.wav');%用db4小波对读入的含有水印的声音文件进行3级小波分解[c4,l4]=wavedec(y6',3,'db4');%提取3级小波分解的低频系数和高频系数ca33=appcoef(c4,l4,'db4',3);cd33=detcoef(c4,l4,3);cd23=detcoef(c4,l4,2);cd13=detcoef(c4,l4,1);x=ca3;x1=ca33;lx=length(x);lx1=length(x1);s=max(abs(x))*0.2;i=find(abs(x)>s);lx=length(x(i));z(i)=x1(i)-x(i)';mark4=z(i)./x(i)';mark4=mark4/0.02;figure(5);subplot(2,1,2);plot(mark4);axis([0 8000 -1 1]);信号裁剪%%%%%%%%%%%%%%%%%%%%%%%%llx=length(y1);llx=fix(llx*0.75);i=[1:llx];y4(i)=y1(i);file1='sample4.wav';wavwrite(y4,Fs,bits,file1);i=[llx+1:length(y1)];y4(i)=y(i);%用db4小波对读入的含有水印的声音文件进行3级小波分解[c4,l4]=wavedec(y4',3,'db4');%提取3级小波分解的低频系数和高频系数ca33=appcoef(c4,l4,'db4',3);cd33=detcoef(c4,l4,3);cd23=detcoef(c4,l4,2);cd13=detcoef(c4,l4,1);x=ca3;x1=ca33;lx=length(x);lx1=length(x1);s=max(abs(x))*0.2;i=find(abs(x)>s);lx=length(x(i));z(i)=x1(i)-x(i)';mark4=z(i)./x(i)';mark4=mark4/0.02;figure(6);subplot(2,1,1);plot(mark4);。
基于LSB的数字水印算法及MATLAB实现
基于LSB 的数字水印算法及MATLAB 实现加密算法宗岳,王恺山东科技大学 山东,中国 ***************摘要—LSB 是一种简单传统的信息隐藏算法,属于数字水印技术中的一种。
本文首先介绍了LSB 技术的原理和特点,然后讨论了基于LSB 的数字水印算法。
最后利用MATLAB 2010 b2对这一算法的加密过程进行了仿真。
关键词:LSB 数字水印 信息隐藏 MATLABI. 介绍随着计算机应用逐渐广泛、网络技术的迅速发展,使音频、视频等多媒体信息都能以数字形式传输和播放,从而使大规模非授权拷贝成为了可能,而这样会损害音乐、电影、书籍和软件等出版业的发展,为了保护知识产权引发了一个很有意义的研究方向:信息隐藏。
本文首先介绍了了数字水印技术的原理和分类,接着对LSB 算法原理及LSB 算法实现进行了介绍,最后使用MATLAB 对其加密过程进行了仿真。
II. 数字水印技术的基本原理数字水印的主要 目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,如公司标志、媒体作者、特定代码等,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。
数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。
数字水印的嵌入和提取过程如图1,图2所示。
图1 数 字水印的嵌入过程图2 数字水印的提取过程图1是数字水印的嵌入过程,加入密钥可以提高数字水印的隐蔽性、抗攻击性,而并非是必须的。
根据用途不同,,嵌入的水印有些是需要还原的,而有些则只需验证水印的存在性,前者需要数字水印的提取算法,而图2需要数字水印的检测算法,根据具体的水印算法,嵌入或提取的过程可能有所不同。
III. 数字水印的分类数字水印技术可以从不同的角度进行分类,因此有多种分类方法。
按数字水印的特性可分为鲁捧数字水印和脆弱数字水印。
鲁棒数字水印主要用于标识数字媒体信息的版权信息,它要求嵌入的水印能够抵抗对媒体的常规编辑和恶意攻击,在对媒体进行如:裁剪、旋转、缩放、压缩的变换后水印信息不受到较大损害。
基于LSB的数字水印算法及MATLAB实现
基于LSB 的数字水印算法及MATLAB 实现加密算法宗岳,王恺山东科技大学 山东,中国 ***************摘要—LSB 是一种简单传统的信息隐藏算法,属于数字水印技术中的一种。
本文首先介绍了LSB 技术的原理和特点,然后讨论了基于LSB 的数字水印算法。
最后利用MATLAB 2010 b2对这一算法的加密过程进行了仿真。
关键词:LSB 数字水印 信息隐藏 MATLABI. 介绍随着计算机应用逐渐广泛、网络技术的迅速发展,使音频、视频等多媒体信息都能以数字形式传输和播放,从而使大规模非授权拷贝成为了可能,而这样会损害音乐、电影、书籍和软件等出版业的发展,为了保护知识产权引发了一个很有意义的研究方向:信息隐藏。
本文首先介绍了了数字水印技术的原理和分类,接着对LSB 算法原理及LSB 算法实现进行了介绍,最后使用MATLAB 对其加密过程进行了仿真。
II. 数字水印技术的基本原理数字水印的主要 目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,如公司标志、媒体作者、特定代码等,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。
数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。
数字水印的嵌入和提取过程如图1,图2所示。
图1 数 字水印的嵌入过程图2 数字水印的提取过程图1是数字水印的嵌入过程,加入密钥可以提高数字水印的隐蔽性、抗攻击性,而并非是必须的。
根据用途不同,,嵌入的水印有些是需要还原的,而有些则只需验证水印的存在性,前者需要数字水印的提取算法,而图2需要数字水印的检测算法,根据具体的水印算法,嵌入或提取的过程可能有所不同。
III. 数字水印的分类数字水印技术可以从不同的角度进行分类,因此有多种分类方法。
按数字水印的特性可分为鲁捧数字水印和脆弱数字水印。
鲁棒数字水印主要用于标识数字媒体信息的版权信息,它要求嵌入的水印能够抵抗对媒体的常规编辑和恶意攻击,在对媒体进行如:裁剪、旋转、缩放、压缩的变换后水印信息不受到较大损害。
matlab数字水印算法及实现和源代码
摘要:数字水印技术作为数字媒体版权保护的有效办法,近年来在国内外引起了人们极大的兴趣。
但是由于数字水印技术涉及到的知识面比较广,即使是专业人员有时也感到力不从心,那么如何选择一种有效的编程工具便成为一个亟待解决的问题。
本文从数字水印技术本身的特点、一般模型和典型算法出发,简要地介绍了一种可以快速上手的高效的实用语言——Matlab。
最后,作者给出一个用Matlab实现数字水印实例。
关键词:数字水印Matlab Visual C++6.0 DWT DCT1 引言作为传统加密系统的有效补充办法,从1993年Caronni正式提出数字水印到现在短短几年里,无论是在国内还是在国外对数字水印的研究都引起了人们极大的关注。
但数字水印技术的发展还很不成熟,应用也处于初级阶段。
在我国,知识产权问题是一个敏感的话题,只有深入开展数字水印技术的研究,尽快制定我国的版权保护水印标准,才能使我们在未来可能的国际知识产权纠纷中取得主动权。
那么掌握高效的工具,便成为一个必须解决的问题。
本文就针对数字水印本身的特点,介绍了一种高效的实用工具——MATLAB。
2 数字水印技术2.1 数字水印技术的复杂性数字水印技术涉及到通信理论、编码理论、噪声理论、视听觉感知理论、扩频技术(Spre ad Spectrum)、信号处理(Signal Processing ) 技术、数字图像处理(Digital Image Processing)技术、多媒体(Multimedia)技术、模式识别(Pattern Reorganization)技术、算法设计(Algorithm Design)等理论,用到经典的DFT(Discrete Fourier Transf orm)、DCT(Discrete Cosine Transform)变换和近代最先进的数学工具----小波(Wa velet)。
数字水印又是一个横跨计算机科学、生理学、密码学、数字、数字通信等多门学科,并与I nternet的发展密切相关的交叉科学。
MATLAB在音频数字水印技术研究中的应用
处理 。
关键 词 :Mal 数 字 水 印 音 频 数 字 水印 tb a
1 引 言
数字水 印技术是近几年国际上提出的一种 新的有 效 的数字产 品版权保护和数据维护 的技术 。它将特 制 的标记嵌入到 数字 图像 、 声音 、 文档 图书、 频等 数字 视
的特性 :) 1 不可觉察性 , 即加入水 印后 的语 音信号 比起
d t ) d t ) 分 别实现一维 和二维信 号 的离 c( 和 c 2( :
维普资讯
2 0 年 第 2 期 08
计 算 机 系 统 应 用
MA L T AB在 音 频 数 字 水 印 技 术 研 究 中 的应 用
Appl a i a l s ar h o gi i ton ofM tab on Re e c fDi t Audi c al o W a e m a k tr r i Tec og ng hol y
孙荣荣 余建桥 冯 林 ( 西南大学 计算机 与信息科 学学院 重庆市 4 0 1) 0 76
MATLAB制作数字水印
1. 数字水印背景二十一世纪是数字时代,通信技术的迅速发展和计算机网络的普遍运用,使人们可以通过互联网收发信息,可以随时上传自己创作的数字图象、音乐、视频等作品,可以进行学术交流。
然而,也正是由于网络的这种便捷性、传播迅速的优点使其很容易被非法拷贝,导致数字产品的版权、完整性、有效性得不到保证,严重损害了创作者的利益。
而一些具有特殊意义的数字信息,如涉及司法诉讼、政府机要等信息,更是遭到了不法分子地恶意攻击和随意篡改等,这一系列问题给当今科学家带来了巨大挑战。
基于以上类似问题,数字水印技术可以说是信息时代的特有产物,是一种可以在开放网络环境下保护版权和认证来源及保障信息完整性的新型技术,在音频、图像、视频制品中迅速得到广泛的研究和发展。
基本特点数字水印是加在数字图象、音频或视频中的微弱信号,这个信号是人们能够建立产品所有权、辨认购买者或提供数字产品的一些额外信息。
具体说来,它们都具有以下共同的特征:1. 不可感知性对于数字水印的嵌入,应该对观察者没有视觉障碍,理想情况应该是水印图像与原始图像没有丝毫差别。
2. 鲁棒性鲁棒性是指一个数字水印能够承受攻击的能力,一般来说数字水印方法是针对特定的攻击进行设计。
3. 安全性水印技术的安全性是其最重要的特性,由于它的商业性,其算法必须公开,算法的安全性完全取决于密钥,而不对算法进行保密。
4. 计算复杂度不同应用中,对于水印的嵌入算法和提取算法的计算复杂度要求是不同的,复杂度直接与水印系统的实时性相关。
5. 水印容量水印容量是指载体数据字中可嵌入水印信息位的多少,可以从几兆到几个比特不等。
数字水印的应用]1[数字水印是以不可感知的方式嵌入到数字信息中的,总体来说它有以下应用:数字产品产权保护这是数字水印最广泛的应用,将秘密的数字信号嵌入到有价值的数字文件中,这些数字信号是产权的标识,在不破坏数字文件的情况下不能被盗版者出去,起到了保护产权的作用。
1. 数据库标识有时一些文件中提示数据的标识信息往往比文件本身更重要或者一些音像文件需要将说明注释(如字幕等)与音像本身结合起来,这就可以通过数字水印技术加以解决。
(完整word版)基于MATLAB的数字水印算法实现
数字水印作为一门新的学科,自 1993 年 Tirkel 等人正式提出到现在十几年里, 国内外对数字水印的研究都引起了极大的关注,从最初的版权保护, 已扩展到多媒体技术, 广播监听, in-ternet 等多个领域.数字水印是永久镶嵌在其他数据( 主要指宿主数据) 中具有可鉴别性的数字信号或数字模式,其存在不能影响宿主数据的正常使用.为了使数字水印技术达到一定的设计要求,当前水印数据一般应具备不可感知性(imperceptible) 、鲁棒性(Robust)、可证明性、自恢复性和安全保密性等特点。
在数字水印技术中, 水印的数据量和鲁棒性构成了一对基本矛盾.理想的水印算法应该既能隐藏大量数据,又可以抗各种信道噪声和信号变形。
然而在实际中,这两个指标往往不能同时实现,实际应用往往只偏重其中的一个方面.如果是为了隐蔽通信,数据量显然是最重要的, 由于通信方式极为隐蔽,遭遇敌方篡改攻击的可能性很小,因而对鲁棒性要求较为不高。
但对保证数据安全来说,情况恰恰相反, 各种保密的数据随时面临着被盗取和篡改的危险, 对鲁棒性的要求很高, 而对隐藏数据量的要求则居于次要地位。
典型的数字水印系统至少包含两个组成部分— - 水印嵌入单元和水印检测与提取单元.将水印信息进行预处理后加入到载体中,称为嵌入。
从水印化数据中提取出水印信息或者检测水印信息的存在性称为水印的提取和检测.数字水印算法主要是指水印的嵌入算法, 而提取算法往往被看成是嵌入算法的逆变换。
当前典型的嵌入算法主要被分为空间域水印算法和变换域水印算法。
DCT 变换域算法是数字水印算法的典型代表, 也是数字水印中较为常用的一种稳健的算法。
其算法思想是选择二值化灰度图像作为水印信息,根据水印图像的二值性来选择不同的嵌入系数, 并将载体图像(原始图像)进行8×8 的分块,再将灰度载体图像( 原始图像)进行DCT变换.然后,将数字水印信息的灰度值直接植入到载体灰度图像的DCT 变换域中, 实现水印的嵌入。
matlab 基于奇异值分解的数字水印算法
基于奇异值分解(Singular Value Decomposition,SVD)的数字水印算法是一种常用的信息隐藏技术,它通过在原始载体数据(如图像、音频或视频)中嵌入秘密信息(即水印)来实现数据的版权保护和完整性验证。
SVD 是一种强大的矩阵分解技术,可以用于提取和修改图像的关键特征,从而实现水印的嵌入和提取。
以下是一个基于SVD 的简单数字水印算法的基本步骤,以及如何在MATLAB 中实现它:步骤1:选择载体图像和水印信息•载体图像:选择一张用于嵌入水印的图像。
•水印信息:可以是文本、二值图像或灰度图像等。
步骤2:对载体图像进行奇异值分解•使用MATLAB 的svd函数对载体图像的某个重要部分(如DCT 或小波变换的系数矩阵)进行奇异值分解。
步骤3:嵌入水印信息•修改分解得到的奇异值矩阵中的某些值,以嵌入水印信息。
通常,可以选择修改较小的奇异值,以减少对原始图像视觉质量的影响。
步骤4:重构图像•使用修改后的奇异值矩阵和原始的左右奇异向量矩阵重构图像。
步骤5:提取水印信息•当需要验证图像版权或提取水印时,再次对嵌入水印后的图像进行奇异值分解,并从分解得到的奇异值矩阵中提取出水印信息。
MATLAB 示例代码以下是一个简化的MATLAB 示例代码,展示了如何在图像中嵌入和提取基于SVD 的水印:matlab% 读取载体图像和水印图像carrier_image = imread('carrier.png');watermark_image = imread('watermark.png');% 将图像转换为灰度图像(如果需要)if size(carrier_image, 3) == 3carrier_image = rgb2gray(carrier_image);endif size(watermark_image, 3) == 3watermark_image = rgb2gray(watermark_image);end% 对载体图像进行奇异值分解A = double(carrier_image); % 将图像转换为双精度矩阵[U, S, V] = svd(A); % 进行奇异值分解% 嵌入水印信息(简化示例)% 假设水印是一个简单的二值矩阵,且其大小远小于载体图像watermark_vector = double(watermark_image(:)); % 将水印图像转换为一维向量% 选择要修改的奇异值的位置(这里简单选择第一个非零奇异值)idx = find(S > 0, 1);S(idx) = S(idx) + sum(watermark_vector); % 修改奇异值以嵌入水印% 重构图像watermarked_image = U * diag(S) * V'; % 使用修改后的奇异值重构图像watermarked_image = uint8(watermarked_image); % 转换回 uint8 格式以显示和保存imshow(watermarked_image); % 显示嵌入水印后的图像% 提取水印信息(简化示例)% 重新进行奇异值分解以提取水印[U_ext, S_ext, V_ext] = svd(double(watermarked_image));% 从修改的奇异值中提取水印信息extracted_watermark_value = S_ext(idx) - S(idx); % 减去原始奇异值以得到水印信息extracted_watermark_vector = round(extracted_watermark_value /length(watermark_vector)); % 将水印值转换回水印向量extracted_watermark_image = reshape(extracted_watermark_vector,size(watermark_image)); % 将水印向量重塑为图像大小imshow(extracted_watermark_image, []); % 显示提取的水印图像请注意,这个示例代码是非常简化的,并且可能不适用于所有情况。
MATLAB制作数字水印
MATLAB制作数字水印1. 数字水印1.1背景二十一世纪是数字时代,通信技术的迅速发展和计算机网络的普遍运用,使人们可以通过互联网收发信息,可以随时上传自己创作的数字图象、音乐、视频等作品,可以进行学术交流。
然而,也正是由于网络的这种便捷性、传播迅速的优点使其很容易被非法拷贝,导致数字产品的版权、完整性、有效性得不到保证,严重损害了创作者的利益。
而一些具有特殊意义的数字信息,如涉及司法诉讼、政府机要等信息,更是遭到了不法分子地恶意攻击和随意篡改等,这一系列问题给当今科学家带来了巨大挑战。
基于以上类似问题,数字水印技术可以说是信息时代的特有产物,是一种可以在开放网络环境下保护版权和认证来源及保障信息完整性的新型技术,在音频、图像、视频制品中迅速得到广泛的研究和发展。
1.2基本特点数字水印是加在数字图象、音频或视频中的微弱信号,这个信号是人们能够建立产品所有权、辨认购买者或提供数字产品的一些额外信息。
具体说来,它们都具有以下共同的特征:1. 不可感知性对于数字水印的嵌入,应该对观察者没有视觉障碍,理想情况应该是水印图像与原始图像没有丝毫差别。
2. 鲁棒性鲁棒性是指一个数字水印能够承受攻击的能力,一般来说数字水印方法是针对特定的攻击进行设计。
3. 安全性水印技术的安全性是其最重要的特性,由于它的商业性,其算法必须公开,算法的安全性完全取决于密钥,而不对算法进行保密。
4. 计算复杂度不同应用中,对于水印的嵌入算法和提取算法的计算复杂度要求是不同的,复杂度直接与水印系统的实时性相关。
5. 水印容量水印容量是指载体数据字中可嵌入水印信息位的多少,可以从几兆到几个比特不等。
[1]1.3 数字水印的应用数字水印是以不可感知的方式嵌入到数字信息中的,总体来说它有以下应用: 数字产品产权保护这是数字水印最广泛的应用,将秘密的数字信号嵌入到有价值的数字文件中,这些数字信号是产权的标识,在不破坏数字文件的情况下不能被盗版者出去,起到了保护产权的作用。
数字水印matlab程序
clear all;close all;clc;V=double(imread('D:\lena\lena.jpg'));imshow(mat2gray(V));[i u]=size(V); %计算V的规格r=100; %设置分解矩阵的秩W=rand(i,r) %初始化WH,为非负数H=rand(r,u)maviter=100; %最大迭代次数for iter=1:maviterW=W.*((V./(W*H))*H'); %注意这里的三个公式和文中的是对应的W=W./(ones(i,1)*sum(W));H=H.*(W'*(V./(W*H)));endimg_V=W*H;figure;imshow(mat2gray(img_V));首先读入原始图象并设置参数,然后嵌入水印信息,程序代码如下:clear%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);%产生水印序列并对其排序randn('seed',10);watermark1=randn(1,LENGTH);subplot(2,2,1);plot(watermark1);title('watermarc:Gaussian noise');subplot(2,2,3);title('edge of origine image')[Y0,I0]=sort(watermark1);%%读入原图象trueImage=imread('H:\Documents and Settings\sunhw\My Documents\My Pictures\biaozhun.bmp');alfa=.1;LENGTH=2500;subplot(2,2,2);imshow(trueImage);title('origine image:I');%%对原图象进行DCT变换dctF1=dct2('H:\Documents and Settings\sunhw\My Documents\MyPictures\biaozhun.bmp');[m,n]=size(dctF1);%%找出水印嵌入位置(幅值较大的n个频域成分)A=dctF1(:);[Y1,I1]=sort(A);x=m*n;k=LENGTH;M=zeros(x,1);%%修改幅值较大的n个频域成分的幅值,嵌入水印(因为两个问题不同,所以有两个注释符)for i=1:xif k>=1M(x)=Y1(x)*(1+alfa*Y0(k));k=k-1;elseM(x)=Y1(x);endx=x-1;endN=zeros(x,1);x=m*n;for i=1:xN(I1(i))=M(i);enda=1;for j=1:nfor i=1:mdctF2(i,j)=N(a);a=a+1;endend%%DCT反变换,得到嵌入水印的图象idctF1=idct2(dctF2);subplot(2,2,4);imshow(log(abs(idctF1)),[ ]);title('embeded image:D');%endI=imread('D:\lena\1.jpg');disp(I);I=double(I)/255;disp(I);I=ceil(I);%%%%%%%%%%显示水印图像%%%%%%%%%%%%%figure(1);subplot(2,3,1);imshow(I),title('水印图像')dimI=size(I);rm=dimI(1);cm=dimI(2);%%%%%%%%%%%%%%%5 以下生成水印信息 %%mark=I;alpha=0.05;V=imread('D:\lena\lena.jpg');[i u]=size(V); %计算V的规格r=100; %设置分解矩阵的秩W=rand(i,r) %初始化WH,为非负数H=rand(r,u)maviter=100; %最大迭代次数for iter=1:maviterW=W.*((V./(W*H))*H'); %注意这里的三个公式和文中的是对应的 W=W./(ones(i,1)*sum(W));H=H.*(W'*(V./(W*H)));endk1=H;psnr_cover=double(V);subplot(2,3,2),imshow(a0,[]),title('载体图像');[r,c]=size(a0);cda0=blkproc(a0,[8,8],'dct2'); %%%%%%%%%%%%%%%%%%%% 嵌入 %%%%%% cda1=cda0; % cda1 = 256_256for i=1:rm % i=1:32for j=1:cm % j=1:32x=(i-1)*10;y=(j-1)*10;if mark(i,j)==1k=k1;elsek=k2;endcda1(x+1,y+8)=cda0(x+1,y+8)*(1+alpha*k(1));cda1(x+2,y+7)=cda0(x+2,y+7)*(1+alpha*k(2));cda1(x+3,y+6)=cda0(x+3,y+6)*(1+alpha*k(3));cda1(x+4,y+5)=cda0(x+4,y+5)*(1+alpha*k(4));cda1(x+5,y+4)=cda0(x+5,y+4)*(1+alpha*k(5));cda1(x+6,y+3)=cda0(x+6,y+3)*(1+alpha*k(6));cda1(x+7,y+2)=cda0(x+7,y+2)*(1+alpha*k(7));cda1(x+8,y+1)=cda0(x+8,y+1)*(1+alpha*k(8));endend%%%%% 嵌入水印后图像 %%%%%%%%%%%%%%a1=blkproc(cda1,[8,8],'idct2');a_1=uint8(a1);imwrite(a_1,'withmark.bmp','bmp');subplot(2,3,3),imshow(a1,[]),title('嵌入水印后的图像');size=256;block=8;blockno=size/block;%一行有32格LENGTH=size*size/64;Alpha1=0.025;Alpha2=0.1;T1=3;I=zeros(size,size);%产生全矩阵D=zeros(size,size);BW=zeros(size,size);Block_dct1=zeros(block,block);%产生水印,并显示水印信息;subplot(3,2,1);Info='dcf';InfoStrSize=length(Info);%将字符串转换为位数组array=zeros(1,InfoStrSize*8);for m=1:InfoStrSizeInfochar=double(Info(m)); %% 'c'为99for n=1:8array(8*(m-1)+n)=bitget(Infochar,n);%%获得Infochar第n位的值 endendplot(array);title('原始水印信息');%显示原图subplot(3,2,2);i=imread('lena.bmp');imshow(i,[]);title('原始图像')%显示prewitt为算子的边缘图BW=edge(i,'prewitt');%BW=edge(I,’Roberts’);%BW=edge(I,’Sobel’);%BW=edge(I,’zerocross’);subplot(3,2,3);imshow(BW);Title('原始图像边缘图');%嵌入水印l=1;k=1;for m=1:blocknofor n=1:blocknox=(m-1)*block+1; y=(n-1)*block+1;%算出每格图像的坐标(x,y),block=8,8*8的图像小格block_dct1=H(x:x+block-1,y:y+block-1);%取原始图像小格中的像素点到block_dct1矩阵中。
数字水印技术LSB算法MATLAB源代码
close allclear all;% save start timestart_time=cputime;% read in the cover objectfile_name='E:\Phd\My Paper\Second paper -- Experiment\Experiment\Cover and Secretlmage\le na.bmp:[cover_object,map]=imread(file _n ame);% read in the secret imagefile_name='E:\Phd\My Paper\Second paper -- Experiment\Experiment\Cover and SecretImage\hat.bmp';[secret,map1]=imread(file_ name);secret仁secret;% convert to double for n ormalizatio n, the n back aga insecret=double(secret);secret=fix(secret./2); %rounds the eleme nts of A toward zero, result ing in an array of in tegers secret=uin t8(secret);% determ ine size of cover objectMc=size(cover_object,1); %HeightNc=size(cover_object,2); %Width% determ ine size of secret objectMm=size(secret,1); %HeightNm=size(secret,2); %Width% title the secret object out to cover object size to gen erate watermarkfor ii = 1:Mcfor jj = 1:Ncif (secret(ii,jj)>75)watermark(ii,jj)=255;elsewatermark(ii,jj)=0;endendend% now we set the lsb of cover_object(ii,jj) to the value of watermark(ii,jj)watermarked_image=cover_object;for ii = 1:Mcfor jj = 1:Ncif (watermark(ii,jj)==O)watermarked 」m age(ii,jj)=bitset(watermarked 」m age(ii,jj),1,0);%Set bit certa in positi onelsewatermarked 」m age(ii,jj)=bitset(watermarked 」m age(ii,jj),1,1); %Set bit certa in positi onendendend% write the watermarked image out to a fileimwrite(watermarked 」mage,'lsb_watermarked.bmp','bmp');%==================================Extracti on===========================% determ ine size of watermarked imageMw=size(watermarked 」mage,1); %HeightNw=size(watermarked 」mage,2); %Width% use lsb of watermarked image to recover watermarkfor ii = 1:Mwfor jj = 1:NwRecoveryWatermark(ii,jj)=bitget(watermarked 」m age(ii,jj),1);endend% scale the recovered watermarkRecoveryWatermark=2*double(RecoveryWatermark);%====================================================================%===========================SharpAttack================= SharpedWatermarkImage = watermarked 」m age;H = fspecial('u nsharp',0.001); %the alpha from 0.005 to 0.1 20 numberssharpImage = imfilter(SharpedWatermarklmage,H,'replicate');figure(6);colormap(gray(256));imshow(sharpImage); atattitle('sharp Image');imwrite(sharplmage, gray(256), 'sharplmage.bmp');% determ ine size of watermarked imageMSw=size(sharpImage,1); %HeightNSw=size(sharplmage,2); %Width% use lsb of watermarked image to recover watermarkfor ii = 1:MSwfor jj = 1:NSwRecoverySharpWatermark(ii,jj)=bitget(abs(sharplmage(ii,jj)),1);endend% scale the recovered watermarkRecoverySharpWatermark=2*double(RecoverySharpWatermark);psn rSharp = psn r(RecoveryWatermark, RecoverySharpWatermark)figure(7);colormap(gray(256));imshow(RecoverySharpWatermark,[])title('RecoverySharpWatermark');%====================================================================%%%===========================Gaussia n Blur=================Gaussia nBlurWatermarkedlmage = watermarked_image;H = fspecial('gaussian',size(GaussianBlurWatermarkedlmage),0.035); %the alpha from 0.005 to 0.1 20 numbersGaussia nBlurlmage = imfilter(Gaussia nBlurWatermarkedlmage,H,'replicate');figure(8);colormap(gray(256));imshow(Gaussia nBlurlmage』)title('Gaussia n Blur Image');imwrite(Gaussia nBlurlmage, gray(256), 'Gaussia nBlurlmage.bmp');% determ ine size of watermarked imageMSw=size(Gaussia nBlurlmage,1); %HeightNSw=size(Gaussia nBlurlmage,2); %Width% use lsb of watermarked image to recover watermarkfor ii = 1:MSwfor jj = 1:NSwRecoveryGaussia nBlurWatermark(ii,jj)=bitget(Gaussia nBlurlmage(ii,jj),1);end end% scale the recovered watermarkRecoveryGaussia nBlurWatermark=2*double(RecoveryGaussia nBlurWatermark);psn rBlur = psn r(RecoveryWatermark, RecoveryGaussia nBlurWatermark) figure(9);colormap(gray(256));imshow(RecoveryGaussia nBlurWatermark』) title('RecoveryGaussia nWatermark');% %% %===========================================================% %HistogramhistogramWatermarkedlmage = watermarked」m age;histogramimage = histeq(watermarked_image,10); % from 10 to 200 figure(10);colormap(gray(256));image(histogramimage);title('histogramimage Image');imwrite(histogramimage, gray(256), 'histogramimage.bmp');MSw=size(histogramlmage,1); %HeightNSw=size(histogramlmage,2); %Width% use lsb of watermarked image to recover watermarkfor ii = 1:MSwfor jj = 1:NSwRecoveryHistogramWatermarked(ii,jj)=bitget(histogramlmage(ii,jj),1); endend% scale the recovered watermarkRecoveryHistogramWatermarked=2*double(RecoveryHistogramWatermarked); psn rHistorgram = psn r(RecoveryWatermark, RecoveryHistogramWatermarked) figure(11);colormap(gray(256));imshow(RecoveryHistogramWatermarked,[]) title('RecoveryHistogramWatermarked');%%%% %==========================Noise=============================NoiseWatermarked = watermarked_image;Noiseimage = imno ise(NoiseWatermarked,'gaussia n',0.001);figure(12);colormap(gray(256));imshow(NoiseImage);title(' no iselmage');imwrite(Noiselmage, gray(256), 'no iselmage.bmp');MSw=size(Noiselmage,1); %HeightNSw=size(Noiselmage,2); %Width% use lsb of watermarked image to recover watermarkfor ii = 1:MSwfor jj = 1:NSwRecoveryNoiseWatermarked(ii,jj)=bitget(Noiselmage(ii,jj),1);endend% scale the recovered watermarkRecoveryNoiseWatermarked=2*double(RecoveryNoiseWatermarked);psn rNoise = psn r(RecoveryWatermark, RecoveryNoiseWatermarked)figure(13);colormap(gray(256));imshow(RecoveryNoiseWatermarked,[]) title('RecoveryNoiseWatermarked'); %%===================================================================% display process ing time elapsed_time=cputime-start_time,。
基于Matlab的数字水印设计——基于DCT域的水印实现课程设计
摘要数字水印(Digital Watermark)技术是指用信号处理地方法在数字化地多媒体数据中嵌入隐蔽地标记,这种标记通常是不可见地,只有通过专用地检测器或阅读器才能提取.数字水印是信息隐藏技术地一个重要研究方向.随着数字水印技术地发展,数字水印地应用领域也得到了扩展,数字水印地基本应用领域是版权保护、隐藏标识、认证和安全不可见通信.当数字水印应用于版权保护时,潜在地应用市场在于电子商务、在线或离线地分发多媒体内容以及大规模地广播服务.数字水印用于隐藏标识时,可在医学、制图、数字成像、数字图像监控、多媒体索引和基于内容地检索等领域得到应用.数字水印地认证方面主要ID卡、信用卡、A TM卡等上面数字水印地安全不可见通信将在国防和情报部门得到广泛地应用.本文主要是根据所学地数字图象处理知识,在MA TLAB环境下,通过系统编程地方式,建立并实现基于DCT域地数字水印加密系统.该系统主要包含数字水印地嵌入与提取,仿真结果表明,数字水印算法具有有效性、可靠性、抗攻击性、鲁棒性和不可见性,能够为数字媒体信息在防伪、防篡改、认证、保障数据安全和完整性等方面提供有效地技术保障.关键词:数字水印;MA TLAB;DCT目录1 课程设计目地 (1)2 课程设计要求 (2)3 数字水印技术基本原理 (3)3.1 数字水印基本框架 (3)3.2 算法分类 (3)3.2.1 DCT法 (4)3.2.2 其他方法 (4)3.3 实际需要考虑地问题 (4)3.3.1 不可见性 (4)3.3.2 鲁棒性 (5)3.3.3 水印容量 (5)3.3.4 安全性 (5)4 基于DCT变换仿真 (6)4.1 算法原理 (6)4.1.1 准备工作 (6)4.1.2 选取8*8变换块 (7)4.1.3 边界自适应 (7)4.1.4 DCT变换与嵌入 (7)4.1.5 恢复空域 (8)4.2 嵌入算法扩展 (8)4.2.1 RGB彩色图像三个矩阵地划分 (8)4.2.2 八色彩色水印 (8)4.3 水印地提取 (9)4.4 仿真程序 (9)5 结果分析 (14)结束语 (16)参考文献 (17)1 课程设计目地数字水印技术是用信号处理地方法在数字化地多媒体数据中嵌入隐蔽地标记,这种标记通常是不可见地,只有通过专用地检测器或阅读器才能提取.数字水印是信息隐藏技术地一个重要研究方向.在数字水印技术中,水印地数据量和鲁棒性构成了一对基本矛盾.从主观上讲,理想地水印算法应该既能隐藏大量数据,又可以抗各种信道噪声和信号变形.然而在实际中,这两个指标往往不能同时实现,不过这并不会影响数字水印技术地应用,因为实际应用一般只偏重其中地一个方面.如果是为了隐蔽通信,数据量显然是最重要地,由于通信方式极为隐蔽,遭遇敌方篡改攻击地可能性很小,因而对鲁棒性要求不高.但对保证数据安全来说,情况恰恰相反,各种保密地数据随时面临着被盗取和篡改地危险,所以鲁棒性是十分重要地,此时,隐藏数据量地要求居于次要地位.数字水印技术是通过一定地算法将一些标志性信息直接嵌到多媒体内容当中,但不影响原内容地价值和使用,并且不能被人地知觉系统觉察或注意到.水印信息可以是作者地序列号、公司标志、有特殊意义地文本等,可用来识别文件、图像或音乐制品地来源、版本、原作者、拥有者、发行人、合法使用人对数字产品地拥有权.与加密技术不同,数字水印技术并不能阻止盗版活动地发生,但它可以判别对象是否受到保护,监视被保护数据地传播、真伪鉴别和非法拷贝、解决版权纠纷并为法庭提供证据.总地来说,数字水印可以携带有版权保护信息和认证信息,保护数字产品地合法拷贝和传播.2 课程设计要求利用所学地数字图像处理技术,建立并实现基于DCT地数字水印加密系统,利用MATLAB软件系统来实现水印地嵌入和提取,并对算法地不可见性、鲁棒性进行测试.具体要求:(1)熟悉和掌握MA TLAB程序设计方法;(2)学习和熟悉MA TLAB图像处理工具箱;(3)学会运用MA TLAB工具箱对图像进行处理和分析;(4)能对图像jpg格式进行打开、保存、另存、退出等功能操作;(5)利用所学数字图像处理技术知识、MATLAB软件对图像进行水印地嵌入和提取;(6)在程序开发时,清楚主要实现函数目地和作用,需要在程序书写时做适当注释说明,理解每一句函数地具体意义和使用范围;(7)每个程序都必须做到功能仿真成功,运行结果以图片地形式粘贴到报告中.3 数字水印技术基本原理3.1 数字水印基本框架一个数字水印系统一般包括三个基本方面:水印地生成、水印地嵌入和水印地提取或检测.数字水印地嵌入和提取地一般过程基本框架如图3.1,图3.2所示.图3.1 水印嵌入地一般过程基本框架图3.2 水印检测地一般过程基本框架3.2 算法分类根据水印实现方法不同,数字水印可分为空(时)域数字水印和频域数字水印.空域数字水印是直接在信号空间上叠加水印信号,而频域法加入数字水印地原理是首先将原始信号(语音一维信号、图像二维信号)变换到频域,常用地变换一般有DWT、DCT、DFT、WP和分形.然后,对加入了水印信息地信号进行频域反变换(IDWT、IDCT、DFT、WP),得到含有水印信息地信号.频域法检测水印地原理是将原始信号与待检测信号同时进行变换域变换,比较两者地区别,进行嵌入水印地逆运算,得出水印信息.如果是可读地水印,那么就此结束,如果是不可读水印,如高斯噪声,就将得出地水印与已知水印作比较,由相关性判断,待检测信号含不含水印,故水印地检测有两个结束点.频域法有以下优点:嵌入地水印信号能量可以分布到空域地所有像素上,有利于保证水印地不可见性;视觉系统(HVS)地某些特性(如频率地掩蔽特性)可以更方便地结合到水印编码过程中;频域法可与国际数据压缩标准兼容,从而实现在压缩域(compressed domain)内地水印编码.3.2.1 DCT法对原始信号做DCT地算法:Cox和Piva等人提出地DCT技术地经典之作.Cox利用随机数发生器产生标准正态序列作为水印信息对图像进行整体DCT变换后,选取除去DC系数之外部分较低频率系数叠加水印信息。
数字水印技术DCT算法MATLAB源代码
%Name: Chris Shoemaker%Course: E ER-280 - Digital Watermarking%Project: Block DCT Based method, using comparision between mid-band coeffcients % Watermark Embedingclear all;% save start timestart_time=cputime;k=50; % set minimum coeff differenceblocksize=8; % set the size of the block in cover to be used for each bit in watermark% read in the cover objectfile_name='_lena_std_bw.bmp';cover_object=double(imread(file_name));% determine size of cover imageMc=size(cover_object,1); %HeightNc=size(cover_object,2); %Width% determine maximum message size based on cover object, and blocksizemax_message=Mc*Nc/(blocksize^2);% read in the message imagefile_name='_copyright.bmp';message=double(imread(file_name));Mm=size(message,1); %HeightNm=size(message,2); %Width% reshape the message to a vectormessage=round(reshape(message,Mm*Nm,1)./256);% check that the message isn't too large for coverif (length(message) > max_message)error('Message too large to fit in Cover Object')end% pad the message out to the maximum message size with onesmessage_pad=ones(1,max_message);message_pad(1:length(message))=message;% generate shell of watermarked imagewatermarked_image=cover_object;% process the image in blocks% encodes such that (5,2) > (4,3) when message(kk)=0% and that (5,2) < (4,3) when message(kk)=1x=1;y=1;for (kk = 1:length(message_pad))% transform block using DCTdct_block=dct2(cover_object(y:y+blocksize-1,x:x+blocksize-1));% if message bit is black, (5,2) > (4,3)if (message_pad(kk) == 0)% if (5,2) < (4,3) then we need to swap themif (dct_block(5,2) < dct_block(4,3))temp=dct_block(4,3);dct_block(4,3)=dct_block(5,2);dct_block(5,2)=temp;end% if message bit is white, (5,2) < (4,3)elseif (message_pad(kk) == 1)% if (5,2) > (4,3) then we need to swap themif (dct_block(5,2) >= dct_block(4,3))temp=dct_block(4,3);dct_block(4,3)=dct_block(5,2);dct_block(5,2)=temp;endend% now we adjust the two values such that their difference >= kif dct_block(5,2) > dct_block(4,3)if dct_block(5,2) - dct_block(4,3) < kdct_block(5,2)=dct_block(5,2)+(k/2);dct_block(4,3)=dct_block(4,3)-(k/2);endelseif dct_block(4,3) - dct_block(5,2) < kdct_block(4,3)=dct_block(4,3)+(k/2);dct_block(5,2)=dct_block(5,2)-(k/2);endend% transform block back into spatial domainwatermarked_image(y:y+blocksize-1,x:x+blocksize-1)=idct2(dct_block);% move on to next block. At and of row move to next rowif (x+blocksize) >= Ncx=1;y=y+blocksize;elsex=x+blocksize;endend% convert to uint8 and write the watermarked image out to a file watermarked_image_int=uint8(watermarked_image);imwrite(watermarked_image_int,'dct1_watermarked.bmp','bmp');% display processing timeelapsed_time=cputime-start_time,% display psnr of watermarked imagepsnr=psnr(cover_object,watermarked_image,Nc,Mc),% display watermarked imagefigure(1)imshow(watermarked_image,[])title('Watermarked Image')。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
音频数字水印目录1课题背景与现状 (2)2研究的目的和意义 (4)3方案设计和实施计划 (8)4研究的主要内容 (10)5创新点和结论 (10)6成果的应用前景 (11)7附录:个人工作总结 ................................................................................................... 错误!未定义书签。
1课题背景与现状数字时代的到来,多媒体数字世界丰富多彩,数字产品几乎影响到每一个人的日常生活。
信息媒体的数字化为信息的存取提供了极大的便利,同时也显著地提高了信息表达的效率和准确度。
计算机网络通信技术特别是互联网的蓬勃发展,使得数据的交换和传输变成了一个相对简单且快捷的过程。
人们借助于计算机、数字扫描仪、打印机等电子设备可以方便、迅速地将数字信息传达到世界各地,在国际互联网上发布自己的作品,传递重要的信息,进行各种学术交流和电子商务活动等等。
如何保护这些与我们息息相关的数字产品,如版权保护、信息安全、数据认证以及访问控制等等,已受到日益重视并变得迫切需要了,因此数字水印在今天的计算机和互联网时代大有可为。
数字水印技术是近十年才发展起来的,它是信息隐藏学的一个分支。
随着国内信息化程度的提高和电子商务逐渐走向实用,数字水印技术将会拥有更加广阔的应用前景。
鉴于信息隐藏与数字水印技术的应用前景,众多知名研究机构如麻省理工学院的多媒体实验室、剑桥大学的多媒体实验室、IBM数字实验室、日立、NEC、SONY,PHILIPS、微软等都加入到信息隐藏和数字水印技术的研究和应用并取得了一定的成果。
1996年5月,第一届国际信息隐藏学术研讨会(CIHW)在英国剑桥牛顿研究所召开,至今该研讨会已举办了四届。
另外,在IEEE和SPIE等一些重要国际会议上也开辟了信息隐藏与数字水印相关的专题技术研究。
此外欧洲、北美以及其他的一些关于图像、多媒体研究方面的国际会议都有专门的数字水印讨论组。
欧洲已有几项较大的工程项目(VⅣA和ACTS)都有关于信息隐藏与数字水印方面的专项研究。
摄影光学仪器工程师学会从1999年开始举办专门的“多媒体内容的安全和水印"讨论会。
另外,一些组织开始考虑包含不同标准的水印技术。
拷贝保护技术工作组(CPTWG)出于保护DVD碟中视频的目的测试了水印系统。
安全数字音乐主创(SDMI)将水印做成他们的音乐保护系统的核心技术。
近年来,该领域研究的发展速度非常快,有些公司已推出了一些数字水印软件产品,1996年2月美国Adobe System公司首先在图像处理软件Adobe Photoshol4.0中,采用美国Digimarc公司的技术,加入了数字水印模块,起到版权保护的功能。
1999年2月,五大唱片公司:博得曼、百代、索尼、环宇和华纳联合宣布与IBM合作,联合开发一个在因特网方便、快速、安全发布数字视听产品的实验系统。
2001年1月Digimarc公司又宣布与图形艺术的业界团体Printing Industries of America(PIA)就电子水印技术联手合作,在打印机使用Digimarc的“Media Bridge"电子水印技术。
2001年7月,富士通公司开发出了“阶层型电子水印"技术,为其在因特网上实现电子博物馆和电子美术馆系统“Musethque Light"提供了安全保障。
同时还有一些其他公司也相继推出了在数字化图像、音频和视频作品中嵌入鲁棒水印以进行版权保护的软件产品,如Bluespike公司的“Giovanni数字水印系统",Gognic公司的“AudiokeyMP水印系统”,Signum Technologies公司的“Suresign水印’’等等。
我国学术界对数字水印技术的反应也非常快,已经有相当一批有实力的科研机构投入到这一领域的研究中来。
2研究的目的和意义随着互联网以及多媒体通讯的发展,对多媒体产品版权保护和鉴别要求越来越强烈,而数字水印技术是解决数字版权保护问题的有效手段。
目前,对静态图像数字水印技术的研究己经日趋成熟,音频数字水印也正成为新的研究热点。
随着计算机、通信技术的迅速发展,多媒体存储和传输技术的进步使存储和传输数字化信息成为可能,数字化产品可以方便地制作、复制、修改、存储、传播。
同时,也导致了大量非法盗版的出现,严重地损害了创作者和所有者的知识产权(Intellectual Property Rights),数字产品的知识产权保护也显得越来越重要。
在这种形势下,以信息隐藏技术为核心的数字水印(Digital Watermarking)技术应运而生。
在数字化产品中嵌入水印信息,可以实现拷贝限制、使用跟踪、盗版确认等功能,有利于解决版权纠纷,保护数字产权合法拥有者的利益。
数字水印是一种有效的数字产品版权保护和数据安全维护技术,是信息隐藏(Information Hiding)技术研究领域中的一个重要分支。
事实上,信息隐藏技术从有隐密通信就已开始研究,但由于其特殊的用途,一直被限制在军事和安全部门一个很小的范围内。
随着计算机、多媒体技术的发展,网络通信逐步成为人们交流信息的方式之一,对数字化产品(如:音像作品、电子商务、电子政务、数字图书、远程教育等)的认证、防伪以及版权保护的需求越来越迫切,从而产生出一门新的分支:数字水印。
数字水印技术除具有信息隐藏技术的一般特点外,还有着其固有的特点和研究方法。
例如:从信息安全的保密角度上看,如果隐藏的信息被破坏,系统可以视为安全的,因为秘密信息并没有泄露;但在数字水印系统中,隐藏信息的丢失即意味着版权信息的丢失,从而失去了版权保护的功能,这一系统就是失败的。
因此,数字水印技术必须具有较强的鲁棒性、安全性和不可感知性。
随着数字化音像制品的大量制作和发行,数字音频水印技术的研究和发展越来越显得重要。
一方面,可以用音频水印技术实现数字音频作品版权的保护和认证,这是水印技术最主要的应用。
它的目的是通过嵌入数据的来源信息以及比较有代表性的版权所有者信息,从而防止其它团体对该数据宣称拥有版权。
这样水印就可以用来公正地解决所有权问题;另一方面可以用于音频作品的盗版跟踪,它的目的是传输合法接收者的信息而不是数据来源者的信息,主要用来识别数据的单个发行拷贝。
这一类应用在发行的每个拷贝中嵌入不同的水印,通常称之为“数字指纹";还可以用于拷贝保护,这就要求在音频作品发行体系中存在一个拷贝保护机制,即它不允许未授权的媒体拷贝。
在开放系统中很难实现拷贝保护,然而在封闭或私有系统中,可以用水印来说明数据的拷贝情况,因此拷贝保护是可行的。
随着MP3、MP4、MPEG、AC-3等新一代压缩标准的广泛应用,数字音频在因特网上呈指数级增加,对音频数据产品的保护就显得越来越重要,音频水印领域将有较为广阔的应用前景。
因此,选择数字音频水印作为研究课题有较强的现实意义。
另一方面,对发表的数字水印研究文献检索统计,发现数字音频水印的研究文献相对于数字图像水印的研究文献要少得多,因而较容易在数字音频水印上挖掘创新点。
随着互联网以及多媒体通讯的发展,对多媒体产品版权保护和鉴别要求越来越强烈,而数字水印技术是解决数字版权保护问题的有效手段。
目前,对静态图像数字水印技术的研究己经日趋成熟,音频数字水印也正成为新的研究热点。
随着计算机、通信技术的迅速发展,多媒体存储和传输技术的进步使存储和传输数字化信息成为可能,数字化产品可以方便地制作、复制、修改、存储、传播。
同时,也导致了大量非法盗版的出现,严重地损害了创作者和所有者的知识产权(Intellectual Property Rights),数字产品的知识产权保护也显得越来越重要。
在这种形势下,以信息隐藏技术为核心的数字水印(Digital Watermarking)技术应运而生。
在数字化产品中嵌入水印信息,可以实现拷贝限制、使用跟踪、盗版确认等功能,有利于解决版权纠纷,保护数字产权合法拥有者的利益。
数字水印是一种有效的数字产品版权保护和数据安全维护技术,是信息隐藏(Information Hiding)技术研究领域中的一个重要分支。
事实上,信息隐藏技术从有隐密通信就已开始研究,但由于其特殊的用途,一直被限制在军事和安全部门一个很小的范围内。
随着计算机、多媒体技术的发展,网络通信逐步成为人们交流信息的方式之一,对数字化产品(如:音像作品、电子商务、电子政务、数字图书、远程教育等)的认证、防伪以及版权保护的需求越来越迫切,从而产生出一门新的分支:数字水印。
数字水印技术除具有信息隐藏技术的一般特点外,还有着其固有的特点和研究方法。
例如:从信息安全的保密角度上看,如果隐藏的信息被破坏,系统可以视为安全的,因为秘密信息并没有泄露;但在数字水印系统中,隐藏信息的丢失即意味着版权信息的丢失,从而失去了版权保护的功能,这一系统就是失败的。
因此,数字水印技术必须具有较强的鲁棒性、安全性和不可感知性。
随着数字化音像制品的大量制作和发行,数字音频水印技术的研究和发展越来越显得重要。
一方面,可以用音频水印技术实现数字音频作品版权的保护和认证,这是水印技术最主要的应用。
它的目的是通过嵌入数据的来源信息以及比较有代表性的版权所有者信息,从而防止其它团体对该数据宣称拥有版权。
这样水印就可以用来公正地解决所有权问题;另一方面可以用于音频作品的盗版跟踪,它的目的是传输合法接收者的信息而不是数据来源者的信息,主要用来识别数据的单个发行拷贝。
这一类应用在发行的每个拷贝中嵌入不同的水印,通常称之为“数字指纹";还可以用于拷贝保护,这就要求在音频作品发行体系中存在一个拷贝保护机制,即它不允许未授权的媒体拷贝。
在开放系统中很难实现拷贝保护,然而在封闭或私有系统中,可以用水印来说明数据的拷贝情况,因此拷贝保护是可行的。
随着MP3、MP4、MPEG、AC-3等新一代压缩标准的广泛应用,数字音频在因特网上呈指数级增加,对音频数据产品的保护就显得越来越重要,音频水印领域将有较为广阔的应用前景。
因此,选择数字音频水印作为研究课题有较强的现实意义。
另一方面,对发表的数字水印研究文献检索统计,发现数字音频水印的研究文献相对于数字图像水印的研究文献要少得多,因而较容易在数字音频水印上挖掘创新点。
3方案设计和实施计划在完成音频数据水印系统中我们采用离散小波变换作为本系统的核心算法。
小波变换是将信号分解成时域和尺度域的一种变换,具有多分辨率分析的能力,在时域和频域都具有表征信号的局部特征的能力。
对于音频信号这样的时变信号而言,小波变换是一种很适合的工具。
小波变换是把信号f(t)表示为一簇函数的加权和,而这簇函数是由基本小波ψ(t)经过伸缩和平移而形成的,伸缩尺度为 a, 时间移动为τ的小波.小波分析的主要特点就是能够分析信号的局部特征,利用小波变换可以非常准确地分析出信号特性, 可以检测出许多被其他分析方法忽略的特性.由于matlab中的函数库中包含多种方便有效的函数,所以在编程工具上我们采用matlab作为本系统开发的工具。