📄 watermark.m
字号:
clear;clc;
%读取水印
w=imread('watermark.jpg');
figure
imshow(w)
title('原始水印');
%水印置乱
Ln=10;
w=Arnold(w,Ln);
figure
imshow(w)
title('置乱水印');
%位图分解
wb=Bitdecom(w);
%重新组合
wb1=[wb(:,:,1) wb(:,:,2) wb(:,:,3) wb(:,:,4)];
wb2=[wb(:,:,5) wb(:,:,6) wb(:,:,7) wb(:,:,8)];
wb3=[wb1;wb2];
%化为二进制数据流
wbs=reshape(wb3,1,64*64*8);
%读取宿主图像
o=imread('lena.jpg');
figure
imshow(o)
o=double(o);
title('原始宿主图像');
%量化数组的长度
N=3;
%嵌入水印
[WLoc,CA,CH,CV,CD]=Embed(o,wbs,N);
%重构嵌入水印后的宿主图像
r=IDWT2(CA,CH,CV,CD,'haar');
r=uint8(r);
figure
imshow(r)
title('嵌入水印后宿主图像');
%计算宿主图像峰值信噪比
r=double(r);
PSNRH = sum(sum((r-o).^2))/512/512;
PSNRH = 10*log10(255^2/PSNRH)
%提取二进制数据流
wbsr=Extract(r,WLoc,N);
%转为为矩阵
wb3r=reshape(wbsr,128,256);
%重新组合
for i=1:8
rm=ceil(i/4);
cn=i-(rm-1)*4;
wbr(:,:,i)=wb3r(1+64*(rm-1):64+64*(rm-1),1+64*(cn-1):64+64*(cn-1));
end
%位图重构
wr=Bitrecon(wbr);
%计算水印峰值信噪比
w=double(w);
PSNRW = sum(sum((wr-w).^2))/64/64;
PSNRW = 10*log10(255^2/PSNRW)
%显示提取的置乱水印
wr=uint8(wr);
figure
imshow(wr)
title('提取的置乱水印');
%进行置乱逆变换,显示水印
wr=iArnold(wr,Ln);
figure
imshow(wr)
title('提取的水印');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -