DCT数字图像水印嵌入提取

DCT数字图像水印嵌入提取

clear all;
M=480; %原始图像的长度
N=64; %水印图像的长度
K=8; %8x8的分块
BLOCK=zeros(K,K); %创建一个KxK矩阵,元素全是0
J=imread(‘shuiyin.jpg’); %读取图像“shuiyin.jpg”到J
level=graythresh(J);
J=im2bw(J,level); %水印图象二值化
subplot(2,3,2);imshow(J); %在坐标2,3,2显示水印图象
title(‘水印图像’);
I=imread(‘yuantu.jpg’);%读取图象“yuantu.jpg”到I
I=rgb2gray(I); %载体图象灰度化
subplot(2,3,1);imshow(I); %在坐标2,3,1显示载体图象
title(‘原始图像’);
for p=1:N %从1到64循环
for q=1:N %从1到64循环
x=(p-1)*K+1;
y=(q-1)*K+1;
gg=100;
BLOCK=I(x:x+K-1,y:y+K-1); %取相应元素保存到BLOCK中
BLOCK=dct2(BLOCK); %二维离散余弦变换
qq=BLOCK(4,4)-BLOCK(5,5);%中频分量差qq
if J(p,q)==1 %如果qq小于gg
BLOCK(4,4)=BLOCK(4,4)+(gg-qq)/2;
BLOCK(5,5)=BLOCK(5,5)-(gg-qq)/2;
else
%if qq>gg
BLOCK(4,4)=BLOCK(4,4)-(gg+qq)/2;
BLOCK(5,5)=BLOCK(5,5)+(gg+qq)/2;
end
BLOCK=idct2(BLOCK);
I(x:x+K-1,y:y+K-1)=BLOCK;
end
end
%显示嵌入水印后的图像
subplot(2,3,3);imshow(I);
title(‘嵌入水印后的图像’);
imwrite(I,‘dctembeded.jpg’);
%水印检测
J=I;
for p=1:N
for q=1:N
x=(p-1)*K+1;
y=(q-1)*K+1;
BLOCK2 = J(x:x+K-1,y:y+K-1);
BLOCK2=dct2(BLOCK2);
if BLOCK2(4,4)>BLOCK2(5,5)
W(p,q)=1;
else
W(p,q)=0;
end
end
end

subplot(2,3,4);imshow(W);
imwrite(W,‘gwater.jpg’);
title(‘提取出的水印’);

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值