?? 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('水印圖像');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%對水印進(jìn)行混沌加密
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小波對水印信號進(jìn)行一級小波分解
%calz = appcoef2(cz,lz,'haar'); %提取一級小波分解的低頻系數(shù)
[c,l] = wavedec2(I,3,'haar'); %用haar小波對圖像信號進(jìn)行三級小波分解
ca3 = appcoef2(c,l,'haar',3); %提取三級小波分解的低頻系數(shù)
[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;
%對嵌入水印后的圖像進(jìn)行JPEG壓縮
L=imread('embedded','bmp');
imwrite(L,'attack.jpg','jpeg','Quality',70);
J=imread('attack.jpg','jpeg');
subplot(241);
imshow(J);
title('JPEG壓縮攻擊圖');
%添加高斯噪聲進(jìn)行攻擊
%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('高斯噪聲攻擊圖');
%直方圖均勻化進(jìn)行攻擊
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))
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -