haha1986
2007-05-31, 18:01
这是我的毕业设计题目,我编了一些程序也参考了一些资料。希望对matlab 有相当技术的人帮我看看我的这两段程序。我在matlab上调了,也能通过,但总觉的没有达到目的,谁能帮我加个注释,帮我分析一下,先谢了!
1.在原始图像中嵌入水印信息
clear all;
s=48;
t1=32;
t2=16;
file_name='lena.bmp';
cover_object=double(imread(file_name));
mc=size(cover_object,1);
nc=size(cover_object,2);
file_name='jinxin.bmp';
message=double(imread(file_name));
r1=size(message,1);
c1=size(message,2);
[cA1,cH1,cV1,cD1]=dwt2(cover_object,'haar');
[cA2,cH2,cV2,cD2]=dwt2(cA1,'haar');
[cA3,cH3,cV3,cD3]=dwt2(cA2,'haar');
for ii=1:r1
for jj=1:c1
if(message(ii,jj)==1)&(cA3(ii,jj)>=0)
cA3(ii,jj)=cA3(ii,jj)-rem(cA3(ii,jj),s)+t1;
elseif (message(ii,jj)==0)&(cA3(ii,jj)>=0)
cA3(ii,jj)=cA3(ii,jj)-rem(cA3(ii,jj),s)+t2;
elseif(message(ii,jj)==1)&(cA3(ii,jj)<0)
cA3(ii,jj)=cA3(ii,jj)-rem(cA3(ii,jj),s)-t1;
else
cA3(ii,jj)=cA3(ii,jj)-rem(cA3(ii,jj),s)-t2;
end
end
end
cA2=idwt2(cA3,cH3,cV3,cD3,'haar',[mc/4,nc/4]);
cA1=idwt2(cA2,cH2,cV2,cD2,'haar',[mc/2,nc/2]);
watermarked_image = idwt2(cA1,cH1,cV1,cD1,'haar',[mc,nc]);
figure(1)
subplot(2,2,1);imshow(cA1,[]);
subplot(2,2,2);imshow(cA2,[]);
subplot(2,2,3);imshow(cA3,[]);
subplot(2,2,4);imshow(cD1,[]);
figure(2)
imshow(cA3,[]);
figure(3)
imshow(message);
SPImage=imnoise(cover_object,'salt & pepper',0.01);
figure(4);
imshow(SPImage);
imwrite(SPImage,'E:\matlab\work\lena.bmp');
2.从嵌入水印后的图像中提取水印信息
clear all;
s=64;
t1=48;
t2=16;
file_name='corrected.bmp';
watermarked_image=double(imread(file_name));
mw=size(watermarked_image,1);
nw=size(watermarked_image,2);
[cA1,cH1,cV1,cD1]=dwt2(watermarked_image,'haar');
[cA2,cH2,cV2,cD2]=dwt2(cA1,'haar');
[cA3,cH3,cV3,cD3]=dwt2(cA2,'haar');
m1=size(cA3,1);
n1=size(cA3,2);
for ii=1:m1
for jj=1:n1
if abs(rem(cA3(ii,jj),s))>=(t1+t2)/2
cA3(ii,jj)=1;
else
cA3(ii,jj)=0;
end
end
end
figure(1)
imshow(cA3,[])
title('提取出的水印信号')
x=imread('jinxin.bmp');
x=double(x);
1.在原始图像中嵌入水印信息
clear all;
s=48;
t1=32;
t2=16;
file_name='lena.bmp';
cover_object=double(imread(file_name));
mc=size(cover_object,1);
nc=size(cover_object,2);
file_name='jinxin.bmp';
message=double(imread(file_name));
r1=size(message,1);
c1=size(message,2);
[cA1,cH1,cV1,cD1]=dwt2(cover_object,'haar');
[cA2,cH2,cV2,cD2]=dwt2(cA1,'haar');
[cA3,cH3,cV3,cD3]=dwt2(cA2,'haar');
for ii=1:r1
for jj=1:c1
if(message(ii,jj)==1)&(cA3(ii,jj)>=0)
cA3(ii,jj)=cA3(ii,jj)-rem(cA3(ii,jj),s)+t1;
elseif (message(ii,jj)==0)&(cA3(ii,jj)>=0)
cA3(ii,jj)=cA3(ii,jj)-rem(cA3(ii,jj),s)+t2;
elseif(message(ii,jj)==1)&(cA3(ii,jj)<0)
cA3(ii,jj)=cA3(ii,jj)-rem(cA3(ii,jj),s)-t1;
else
cA3(ii,jj)=cA3(ii,jj)-rem(cA3(ii,jj),s)-t2;
end
end
end
cA2=idwt2(cA3,cH3,cV3,cD3,'haar',[mc/4,nc/4]);
cA1=idwt2(cA2,cH2,cV2,cD2,'haar',[mc/2,nc/2]);
watermarked_image = idwt2(cA1,cH1,cV1,cD1,'haar',[mc,nc]);
figure(1)
subplot(2,2,1);imshow(cA1,[]);
subplot(2,2,2);imshow(cA2,[]);
subplot(2,2,3);imshow(cA3,[]);
subplot(2,2,4);imshow(cD1,[]);
figure(2)
imshow(cA3,[]);
figure(3)
imshow(message);
SPImage=imnoise(cover_object,'salt & pepper',0.01);
figure(4);
imshow(SPImage);
imwrite(SPImage,'E:\matlab\work\lena.bmp');
2.从嵌入水印后的图像中提取水印信息
clear all;
s=64;
t1=48;
t2=16;
file_name='corrected.bmp';
watermarked_image=double(imread(file_name));
mw=size(watermarked_image,1);
nw=size(watermarked_image,2);
[cA1,cH1,cV1,cD1]=dwt2(watermarked_image,'haar');
[cA2,cH2,cV2,cD2]=dwt2(cA1,'haar');
[cA3,cH3,cV3,cD3]=dwt2(cA2,'haar');
m1=size(cA3,1);
n1=size(cA3,2);
for ii=1:m1
for jj=1:n1
if abs(rem(cA3(ii,jj),s))>=(t1+t2)/2
cA3(ii,jj)=1;
else
cA3(ii,jj)=0;
end
end
end
figure(1)
imshow(cA3,[])
title('提取出的水印信号')
x=imread('jinxin.bmp');
x=double(x);