提取图像的边缘信息 采用小波离散变换进行水印的嵌入

源代码在线查看: matlab编写的数字水印算法实例(程序).txt

软件大小: 2 K
上传用户: pangyi
关键词: 图像 变换 离散 水印
下载地址: 免注册下载 普通下载 VIP

相关代码

				%在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);
				%产生高斯水印,并显示水印信息;
				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 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				         T=0;
				      else
				         T=sum(BW_8_8);    T=sum(T);
				      end
				      if T>T1
				         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:y+block-1)=block_dct1;  
				      k=k+1;
				   end
				end
				%显示嵌入水印后的图像
				subplot(2,2,4);imshow(D,[]);title('embeded image');
				%由运行结果可以看到用MATLAB的编写一个完整的水印嵌入算法只需几十条语句便可以完成,而这些
				%程序如果用C语言或其它高级语言编写程序至少在100行以上。这个例子充分证明了MATLAB在数字水
				%印技术处理中的方便性和高效性。			

相关资源