图像水印算法源代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档