M=256; %原图256x256
N=32; %水印32x32,同时256/8=32
K=8; %原图按8x8分块
I=zeros(M,M);
EI=zeros(M,M); %保存原图的边界图
J=zeros(N,N);
BLOCK=zeros(K,K);
Alpha1=0.1;
Alpha2=0.03;
T1=3;
subplot(3,2,1);
I=imread('original.bmp');
imshow(I);
title('原图');
EI=edge(I,'prewitt');
subplot(3,2,2);
imshow(EI);
title('原图边界');
subplot(3,2,3);
J=imread('originalWater.bmp');
imshow(J);
title('水印');
%%%%%%% 分块,DCT变换 %%%%%%%
for p=1:N %256/8
for q=1:N
x=(p-1)*K+1; %每个小块左上角的点
y=(q-1)*K+1;
BLOCK=I(x:x+K-1,y:y+K-1); %取每个小块相应元素保存到BLOCK
BLOCK=dct2(BLOCK); %二维离散余弦变换
EIBlock=EI(x:x+K-1, y:y+K-1);
%% 嵌入水印,反DCT变换
T=sum(sum(EIBlock));
if T>T1
Alpha=Alpha1;
else
Alpha=Alpha2;
end
if J(p,q)==0
a=-1;
else
a=1;
end
BLOCK=BLOCK*(1+a*Alpha);
BLOCK=idct2(BLOCK); %反二维离散余弦变换
I(x:x+K-1,y:y+K-1)=BLOCK;
end
end
subplot(3,2,4);
imshow(I);
title('嵌入水印后的图像');
imwrite(I,'marked.bmp');
%%%%% 提取水印 %%%%%
I=imread('original.bmp'); %原图
P=imread('marked.bmp'); %嵌入水印的图像
%提取水印算法
for p=1:N
for q=1:N
x=(p-1)*K+1;
y=(q-1)*K+1;
BLOCK1=I(x:x+K-1,y:y+K-1);
BLOCK1=idct2(BLOCK1);
BLOCK2=P(x:x+K-1,y:y+K-1);
BLOCK2=idct2(BLOCK2);
a=BLOCK2(1,1)/BLOCK1(1,1)-1;
if a<0
W(p,q)=0;
else
W(p,q)=1;
end
end
end
subplot(3,2,5);
imshow(W);
title('提取的水印');
imwrite(W,'waterPrint2.bmp');
海神之光
- 粉丝: 5w+
- 资源: 6476
最新资源
- 10.php面试题_百度.doc
- 11.php面试题_腾讯.doc
- 08.NET面试题大全,包括微软、华为、中兴等大企业的面试真题.doc
- 07.Java面试宝典.doc
- 05.IT项目经理考题 V1-answer.doc
- 09.PHP经典面试题(基础型)附答案.doc
- 04.IT系统分析员考题 v1-answer.doc
- 13.华为瑞星360等公司软件测试工程师面试题.doc
- 14.软件测试经典面试题.doc
- 人力资源题库.doc
- 01.46家公司笔试面试题.doc
- 12.人事专员笔试题.doc
- 推广案例题.doc
- MD小组讨论题(十一).doc
- MD小组讨论题(六).doc
- MD小组讨论题(二).doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈