clear;
close all;
M=imread('yin_32.png'); %读取水印图像
[rm,cm]=size(M);
I=imread('lena.bmp'); %将图像矩阵转为double型
I=double(I)/255;
[r,c]=size(I);
alpha=0.2;
k1=randn(1,8);
k2=randn(1,8);
T=dctmtx(8); %对图像分块
cda0=blkproc(I,[8 8],'P1*x*P2',T,T'); %对分块图像做DCT变换
cda1=cda0;
for i=1:rm
for j=1:cm
x=(i-1)*8;y=(j-1)*8;
if M(i,j)==1
k=k1;
else
k=k2;
end
cda1(x+1,y+8)=cda0(x+1,y+8)+alpha*k(1);
cda1(x+2,y+7)=cda0(x+2,y+7)+alpha*k(2);
cda1(x+3,y+6)=cda0(x+3,y+6)+alpha*k(3);
cda1(x+4,y+5)=cda0(x+4,y+5)+alpha*k(4);
cda1(x+5,y+4)=cda0(x+5,y+4)+alpha*k(5);
cda1(x+6,y+3)=cda0(x+6,y+3)+alpha*k(6);
cda1(x+7,y+2)=cda0(x+7,y+2)+alpha*k(7);
cda1(x+8,y+1)=cda0(x+8,y+1)+alpha*k(8);
end
end
%嵌入水印后的图像
im_cover=blkproc(cda1,[8 8],'P1*x*P2',T',T);
%提取水印图像
dca1=blkproc(im_cover,[8 8],'P1*x*P2',T,T');
a=zeros(1,8);
for i=1:rm
for j=1:cm
x=(i-1)*8;y=(j-1)*8;
a(1)=dca1(x+1,y+8);
a(2)=dca1(x+2,y+7);
a(3)=dca1(x+3,y+6);
a(4)=dca1(x+4,y+5);
a(5)=dca1(x+5,y+4);
a(6)=dca1(x+6,y+3);
a(7)=dca1(x+7,y+2);
a(8)=dca1(x+8,y+1);
if corr2(a,k1)>corr2(a,k2)
mark(i,j)=1;
else
mark(i,j)=0;
end
end
end
figure;
subplot(221);imshow(I);
title('载体图像');
subplot(222);imshow(M);
title('原水印图像');
subplot(223);imshow(im_cover);
title('嵌入水印后图像');
subplot(224);imshow(mark);
title('提取的水印图像');