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

📄 two.m

📁 数字图象水印的嵌入及提取,MATLAB源程序,初学者的水平
💻 M
字号:
clear
M=256;
N=256;
a=1;
p=1;
A=imread('lena2.tif');
B=imread('bz.tif');
B=rgb2gray(B);
B=double(B);
A=double(A);
for i=1:M/8
    for j=1:N/8
    C=A(((i-1)*8+1):(i*8),((j-1)*8+1):(j*8));
    D=B(((i-1)*4+1):(i*4),((j-1)*4+1):(j*4));
    E=dct2(C);
    D=D(1:16);
    D1=fix(D/16)-8;
    D2=D-fix(D/16)*16-8;
    D=[D1 D2];
    for o=1:6
        if E(9-o,o+2)==0
            E(9-o,o+2)=eps;
        else
            E(9-o,o+2)=E(9-o,o+2);
        end
        E(9-o,o+2)=E(9-o,o+2)*(1+p*D(o));
    end
    for t=1:7
        if  E(9-t,t+1)==0
            E(9-t,t+1)=eps;
        else
            E(9-t,t+1)=E(9-t,t+1);
        end
       E(9-t,t+1)=E(9-t,t+1)*(1+p*D(t+6));
    end
    for k=1:8
         if E(9-k,k)==0
            E(9-k,k)=eps;
        else
            E(9-k,k)=E(9-k,k);
        end
        E(9-k,k)=E(9-k,k)*(1+p*D(k+13));
    end
    for q=1:7
        if E(8-q,q)==0
            E(8-q,q)=eps;
        else
            E(8-q,q)=E(8-q,q);
        end
        E(8-q,q)=E(8-q,q)*(1+p*D(q+21));
    end
        if E(6,1)==0
           E(6,1)=eps;
        else
            E(6,1)=E(6,1);
        end
    E(6,1)=E(6,1)*(1+p*D(29));
        if E(5,2)==0
           E(5,2)=eps;
        else
           E(5,2)=E(5,2);
        end
    E(5,2)=E(5,2)*(1+p*D(30));
        if E(2,5)==0
           E(2,5)=eps;
        else
           E(2,5)=E(2,5);
        end
    E(2,5)=E(2,5)*(1+p*D(31));
        if E(1,6)==0
           E(1,6)=eps;
        else
           E(1,6)=E(1,6);
        end
    E(1,6)=E(1,6)*(1+p*D(32));
    F=E;
    G=idct2(F);
    x(((i-1)*8+1):(i*8),((j-1)*8+1):(j*8))=G(1:8,1:8);
    end 
end 
X=uint8(x);
imwrite(X,'JG.tif','tif');
% 以上为水印的嵌入
% 以下是水印的提取
Y=imread('JG.tif');
I=imread('lena2.tif');
Y=double(Y);
I=double(I);
aaaa=0;
for i=1:M/8
    for j=1:N/8
    J=I(((i-1)*8+1):(i*8),((j-1)*8+1):(j*8));
    H=dct2(J);
    y=Y(((i-1)*8+1):(i*8),((j-1)*8+1):(j*8));
    y=dct2(y);
    for o=1:6
        if H(9-o,o+2)==0
           H(9-o,o+2)=eps
        else
           H(9-o,o+2)=H(9-o,o+2);
        end
       z(o)=(y(9-o,o+2)/H(9-o,o+2)-1)/p;aaaa=aaaa+nnz(H(9-o,o+2));
    end
    for t=1:7
        if  H(9-t,t+1)==0
            H(9-t,t+1)=eps;
        else
            H(9-t,t+1)=H(9-t,t+1);
        end
          z(t+6)=(y(9-t,t+1)/H(9-t,t+1)-1)/p;aaaa=aaaa+nnz(H(9-t,t+1));
    end
    for k=1:8
        if H(9-k,k)==0
            H(9-k,k)=eps;
        else
            H(9-k,k)=H(9-k,k);
        end
       z(k+13)=(y(9-k,k)/H(9-k,k)-1)/p;aaaa=aaaa+nnz(H(9-k,k));
    end
    for q=1:7
        if H(8-q,q)==0
            H(8-q,q)=eps;
        else
            H(8-q,q)=H(8-q,q);
        end
        z(q+21)=(y(8-q,q)/H(8-q,q)-1)/p;aaaa=aaaa+nnz(H(8-q,q));     
    end
        if H(6,1)==0
           H(6,1)=eps;
        else
            H(6,1)=H(6,1);
        end
    z(29)=(y(6,1)/H(6,1)-1)/p;aaaa=aaaa+nnz(H(6,1));
        if H(2,5)==0
           H(2,5)=eps;
        else
           H(2,5)=H(2,5);
        end
    z(30)=(y(5,2)/H(5,2)-1)/p;aaaa=aaaa+nnz(H(5,2));
        if H(2,5)==0
           H(2,5)=eps;
        else
           H(2,5)=H(2,5);
        end
    z(31)=(y(2,5)/H(2,5)-1)/p;aaaa=aaaa+nnz(H(2,5));
        if H(1,6)==0
           H(1,6)=eps;
        else
           H(1,6)=H(1,6);
        end
    z(32)=(y(1,6)/H(1,6)-1)/p;aaaa=aaaa+nnz(H(1,6));
    u=(z(1:16)+8)*16+(z(17:32)+8);
    P=reshape(u,4,4);
    Z(((i-1)*4+1):(i*4),((j-1)*4+1):(j*4))=P(1:4,1:4);
    end
end
Z=Z(1:M/2,1:N/2)*a;      
MM=B-Z;
MM=uint8(MM);
Z=uint8(Z);
A=uint8(A);
B=uint8(B);
% imwrite(Z,'SYtwo.tif','tif');
% subplot(2,2,1); imshow(A); title('原宿主图像');
% subplot(2,2,2); imshow(B); title('水印图像');
% subplot(2,2,3); imshow(X); title('嵌入水印后的图像');
% subplot(2,2,4); imshow(Z); title('提取的水印图像');
% aaa=aaaa
imshow(MM);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -