⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dwt_shuiyin2.m

📁 两三年前写的dwt水印加密解密,比较简单,再找找看好些的程序,供初学者看看把~
💻 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 + -