图像水印算法源代码
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
M=256; %原图像长度
N=32; %水印图像长度
K=8;
I=zeros(M,M);
II=zeros(K,K);
B=zeros(M,M);
Idct=zeros(K,K);
D=zeros(M,M);
%读取原图像
I=imread('33.png');
subplot(2,2,1);
%显示原图像
imshow(I);
title('原图像');
%产生水印序列
randn('seed',10);
mark=randn(1024,1);
subplot(2,2,2);
plot(mark);
title('水印序列');
%嵌入水印
T=1;
for m=1:N
for n=1:N
x=(m-1)*K+1;
y=(n-1)*K+1;
II=I(x:x+K-1,y:y+K-1);%将原图分成8*8的子块
Idct=dct2(II);%对子块进行DCT变换
if x==1&y==1
alfa=0.002;
else
alfa=0;
end
B=Idct*(1+alfa*mark(T));%嵌入水印
Bidct=idct2(B);%进行DCT反变换
I(x:x+K-1,y:y+K-1)=Bidct;
T=T+1;
end
end
subplot(2,2,3);
imshow(I);%显示嵌入水印后的图像
title('tu');imwrite(I,'嵌入后的图像.bmp');
%进行相关性比较
figure;
for i=1:50
if i==10;
mark2=mark1';
else
mark2=randn(1024,1);
end
%计算相关值
c=(mark2'*mark)/sqrt(mark2'*mark2); stem(i,c);
hold on;
end