本资源提供了一个完整的MATLAB程序包,用于实现DCT域中的数字图像水印技术。内容包括加水印、提取消息的完整代码及其注释说明,同时包含测试所需的原始图片与水印图片,方便用户直接运行验证算法效果。
```matlab
clear;clc;
size=512;
block=8;
blockno=size/block;
LENGTH=size*size/64;
Alpha1=0.02;
Alpha2=0.02;
T1=100;
I=zeros(size,size);
D=zeros(size,size);
BW=zeros(size,size);
i = imread(watermark64by64.png);
mark = reshape(i, 1, LENGTH);
figure;
imshow(i);
title(水印);
I = imread(lena512512.jpg);
I0= I;
imshow(I);
title(原始图像);
k=1;
for m=1:blockno
for n=1:blockno
x=(m-1)*block+1;
y=(n-1)*block+1;
block_dct1 = I(x:x+block-1,y:y+block-1);
block_dct1=dct2(block_dct1);
if m<= 1 | n <= 1
T=0;
else
BW_8_8=BW(x:x+block-1,y:y+block-1);
T=sum(BW_8_8);
end
if T>T1
Alpha = Alpha2;
else
Alpha = Alpha1;
end
block_dct1(1, 1) = block_dct1(1, 1)*( 1 + Alpha * mark(k));
block_dct1=idct2(block_dct1);
D(x:x+block-1,y:y+block-1)=block_dct1;
k=k+ 1;
end
end
figure;
imshow(D,[]);
title(嵌入水印后的图像);
```