PDA

查看完整版本 : 誰能幫我解答一下,此藏浮水印的matlab程式


未注册
2008-11-30, 20:57
各位好,這是我在網路上找到的一份浮水印的程式碼,但是不太了解程式的意思,我最想知道此matlab程式所藏浮水印的位置,還有浮水印為什麼要使用一階小波分解呢??而原始影像用2階小波轉換??請各位大大,如果知道可否幫我解答一下,拜託你們了,我很急著知道,謝謝您們。

lena=imread('lena.bmp','bmp');
subplot(2,2,1);
imshow(lena);
title('原图像');
bict=imread('bict.bmp','bmp');
subplot(2,2,2);
imshow(bict);
title('水印图像');
lena1=double(lena);
bict1=double(bict);
[Cwr,Swr]=WAVEDEC2(bict1,1,'haar');
[Cr,Sr]=WAVEDEC2(lena1,2,'haar');
a=0.06;
for k=0:1:size(Cr,2)/size(Cwr,2)-1
Cr(1+size(Cr,2)/4+k*size(Cwr,2)/4:size(Cr,2)/4+(k+1)*size(Cwr,2)/4)=Cr(1+size(Cr,2)/4+k*size(Cwr,2)/4:size(Cr,2)/4+(k+1)*size(Cwr,2)/4)+a*Cwr(1+size(Cwr,2)/4:size(Cwr,2)/2);
Cr(1+size(Cr,2)/2+k*size(Cwr,2)/4:size(Cr,2)/2+(k+1)*size(Cwr,2)/4)=Cr(1+size(Cr,2)/2+k*size(Cwr,2)/4:size(Cr,2)/2+(k+1)*size(Cwr,2)/4)+a*Cwr(1+size(Cwr,2)/2:3*size(Cwr,2)/4);
Cr(1+3*size(Cr,2)/4+k*size(Cwr,2)/4:3*size(Cr,2)/4+(k+1)*size(Cwr,2)/4)=Cr(1+3*size(Cr,2)/4+k*size(Cwr,2)/4:3*size(Cr,2)/4+(k+1)*size(Cwr,2)/4)+a*Cwr(1+3*size(Cwr,2)/4:size(Cwr,2));
end;
Cr(1:size(Cwr,2)/4)=Cr(1:size(Cwr,2)/4)+a*Cwr(1:size(Cwr,2)/4);
lena1=WAVEREC2(Cr,Sr,'haar');
output=uint8(round(lena1));
subplot(2,2,3);imshow(output,[]);
title('嵌入水印后的图像');
J1=imnoise(output,'salt & pepper',0.04);
subplot(2,2,4);imshow(J1);title('加椒盐噪声后的图像');
[Ca,Sa]=WAVEDEC2(lena1,2,'haar');
lena0=imread('lena.bmp','bmp');
lena01=double(lena0(:,:,1));
[Ca1,Sa1]=WAVEDEC2(lena01,2,'haar');
Cwr(1:size(Cwr,2)/4)=(Ca(1:size(Cwr,2)/4)-Ca1(1:size(Cwr,2)/4))/a;
bict1=WAVEREC2(Cwr,Swr,'haar');
output=uint8(round(bict1));
figure,subplot(2,2,1);
imshow(output,[]);title('提取的水印图像');