📄 dwt_shuiyin2.m
字号:
%1、DWT法
%2、混沌序列对水印加密
%3、奇偶嵌入法
%4、攻击性测试
%5、相似度测试
clear;
M=256; %原图像大小
N=32; %水印图像大小
I=zeros(M,M); %I为原图像
J=zeros(N,N); %J为水印图像
%显示原图像
I=imread('cat1.bmp');
figure;subplot(221);
imshow(I);
title('原始图像');
%显示水印图像
J=imread('me','bmp');
subplot(222); imshow(J);
title('水印图像');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%对水印进行混沌加密
W_m = J;
aa = imfinfo('me.bmp');
Nx = aa.Width; %图像列宽
Ny = aa.Height; %图像矩阵列大小
Wv = reshape(W_m,1,Nx*Ny); %表示成向量形式
xm(1) = 0.4123; %logistic映射
u = 4;
for i=1:(Nx*Ny-1)
xm(i+1) = u*xm(i)*(1-xm(i));
end
%将x量化为0-1序列
xmedian = median(xm);
for i=1:(Nx*Ny-1)
if xm(i) >= xmedian
xm(i) = 1;
else
xm(i) = 0;
end
end
Wm = XOR(Wv,xm); %加密
Wm_temp = reshape(Wm,Nx,Ny);
subplot(223); imshow(Wm_temp);
title('加密后的水印图像');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
J = Wm_temp;
%小波水印
%[cz,lz] = wavedec2(J,1,'haar'); %用haar小波对水印信号进行一级小波分解
%calz = appcoef2(cz,lz,'haar'); %提取一级小波分解的低频系数
[c,l] = wavedec2(I,3,'haar'); %用haar小波对图像信号进行三级小波分解
ca3 = appcoef2(c,l,'haar',3); %提取三级小波分解的低频系数
[H,V,D] = detcoef2('all',c,l,3);
%[CA,CH,CV,CD] = dwt2(I,'haar');
%figure;
%subplot(141);imshow(ca3);title('三级分解低频子图');
%subplot(142);imshow(H);title('三级分解水平子图');
%subplot(143);imshow(V);title('三级分解垂直子图');
%subplot(144);imshow(D);title('三级分解对角子图');
ca3_temp = ca3/10;
ca3_temp1 = floor(ca3_temp);
ca3_temp2 = ca3_temp - ca3_temp1;
for i=1:size(ca3)
for j=1:size(ca3)
if J(i,j)==1
if bitget(ca3_temp1(i,j),1)==0
ca3_temp1(i,j) = bitset(ca3_temp1(i,j),1,1);
else
ca3_temp1(i,j) = ca3_temp1(i,j);
end
end
if J(i,j)==0
if bitget(ca3_temp1(i,j),1)==1
ca3_temp1(i,j) = bitset(ca3_temp1(i,j),1,0);
else
ca3_temp1(i,j) = ca3_temp1(i,j);
end
end
end
end
ca3_temp3 = 10*(ca3_temp1 + ca3_temp2);
c(1:32*32) = reshape(ca3_temp3,1,32*32);
c_recons = c;
I_shuiyin = waverec2(c_recons,l,'haar');
subplot(224);
imshow(mat2gray(I_shuiyin));
title('嵌入水印后的图像');
imwrite(mat2gray(I_shuiyin),'embedded.bmp','bmp');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%水印提取
%攻击性测试
figure;
%对嵌入水印后的图像进行JPEG压缩
L=imread('embedded','bmp');
imwrite(L,'attack.jpg','jpeg','Quality',70);
J=imread('attack.jpg','jpeg');
subplot(241);
imshow(J);
title('JPEG压缩攻击图');
%添加高斯噪声进行攻击
%L=imread('embedded','bmp');
%L1 = imnoise(L,'speckle', 0.000002);
%V = 0.00001;
%L1=imnoise(L,'gaussian',0,V);
%imwrite(L1,'attack.bmp','bmp');
%J=imread('attack.bmp');
%subplot(242);
%imshow(J);
%title('高斯噪声攻击图');
%直方图均匀化进行攻击
L=imread('embedded','bmp');
L1=histeq(L);
imwrite(L1,'attack.bmp','bmp');
J=imread('attack.bmp','bmp');
subplot(243);
imshow(J);
title('直方图均匀化图');
%剪裁
L=imread('embedded','bmp');
L(1:60,1:100) = 0;
J = L;
subplot(244);
imshow(J);
title('剪裁攻击图');
%J=I_shuiyin;
I=imread('cat1.bmp');
%水印提取
[c1,l1] = wavedec2(J,3,'haar');
ca31 = appcoef2(c1,l,'haar',3);
ca3_temp = ca31/10;
ca3_temp1 = floor(ca3_temp);
ca3_temp2 = ca3_temp - ca3_temp1;
for i=1:size(ca3)
for j=1:size(ca3)
if bitget(ca3_temp1(i,j),1)==0
J_t(i,j) = 0;
end
if bitget(ca3_temp1(i,j),1)==1
J_t(i,j) = 1;
end
end
end
%解密
Wj = XOR(reshape(J_t,1,Nx*Ny),xm);
Wjtemp = reshape(Wj,Nx,Ny);
subplot(248);imshow(Wjtemp);
title('水印(直方图均衡)','fontsize',8);
%相似度测试
J=imread('me','bmp');
J_test = reshape(J,1,Nx*Ny);
W_test = reshape(Wjtemp,1,Nx*Ny);
temp1 = 0;
temp2 = 0;
temp3 = 0;
for i=1:Nx*Ny
temp1 = temp1 + J_test(i)*W_test(i);
temp2 = temp2 + J_test(i)^2;
temp3 = temp3 + W_test(i)^2;
end
delta = temp1/(sqrt(temp2)*sqrt(temp3))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -