当前位置:首页 » 操作系统 » dct数字水印算法

dct数字水印算法

发布时间: 2023-07-11 15:39:25

① DCT域图像数字水印算法,新手,这个水印嵌入程序看不明白,谁能帮我把每条注释下Q282092728,谢谢了

M=256;%原图像长度
N=32;%水印图像长度
K=8; %图像分块大小
I=zeros(M,M);%创建一个零矩阵,用于存放载体图像
J=zeros(N,N); %创建一个零矩阵,用于存放水印图像
BLOCK=zeros(K,K);%创建一个零矩阵,用于存放图像分块
%显示水印图像
subplot(1,8,2);
J=imread('14','bmp'); %读入水印图像
imshow(J); %显示水印图像
title('水印图像');
%显示原图像
subplot(1,3,2);
I=imread('11','bmp'); %读入原始图像
imshow(I); %显示原始图像
title('原始公开图像');
%嵌入水印
tem=1;%创建变量tem,没用
for p=1:N%水印图像行循环
for q=1:N%水印图像列循环
x=(p-1)*K+1; %x为载体图像行坐标
y=(q-1)*K+1; %y为载体图像列坐标
BLOCK=I(x:x+K-1,y:y+K-1); %BLOCK为载体图像I的分块,分块大小为K*K,
%初始值为I(0:K-1,0:K-1)
BLOCK=dct2(BLOCK);%对BLOCK进行二维DCT变换,得到新的BLOCK即%DCT系数矩阵BLOCK
if J(p,q)==0%如果水印图像的第(p,q)个像素为0
a=-1;%嵌入参数为-1
else
a=1; %若如果水印图像的第(p,q)个像素为1嵌入参数为1
end
BLOCK(2,1)=BLOCK(2,1)*(1+a*0.01); %对载体图像的分块的DCT系数矩阵
%BLOCK
BLOCK=idct2(BLOCK);%对DCT系数矩阵进行反变换,得到嵌入水印后的载体
%图像分块BLOCK
I(x:x+K-1,y:y+K-1)=BLOCK;%用嵌入水印后的图像分块BLOCK代替载体图像
%的对应分块
End%水印图像列循环结束
End%水印图像行循环结束
%显示嵌入水印后的图像
subplot(1,3,3);
imshow(I);%显示嵌入水印后图像
title('嵌入水印后的图像');
imwrite(I,'embedded.bmp','bmp');%将嵌入水印后图像写成bmp文件
够详细吧,希望对你有用。

② 基于DCT数字水印算法的Matlab实现源代码

  1. 读取图片

  2. 读取水印图片(二维码)

  3. 原图片做成灰度

  4. 水印图做成二值图

  5. 原图做8*8DCT处理

  6. 选择DC成分以外的元素(每个8*8块里选择1个元素)

  7. 生成伪随机乱数

  8. 根据乱数做成密钥

  9. 将水印图根据密钥与算法嵌入到第6步骤

  10. 嵌入后将每个元素替换原来的第6步元素

  11. 做反变换

  12. 图片保存,嵌入完毕

提取

  1. 读取嵌入水印后的图片

  2. 生成嵌入时的伪随机乱数(生成乱数之前可以加一些几何攻击)

  3. 根据乱数做成密钥

  4. 嵌入水印后的图片做8*8DCT处理

  5. 选择DC成分以外的元素(选取跟原来嵌入时相同)

  6. 根据算法与密钥提取水印图

  7. 提取的水印图与原水印图做比较

  8. 保存提取的水印图,提取完毕

热点内容
蜗牛游戏安卓手机怎么更换账号 发布:2025-03-17 13:41:49 浏览:321
为什么人买一个苹果一个安卓 发布:2025-03-17 13:36:59 浏览:438
三星手机短信在那个文件夹 发布:2025-03-17 13:31:51 浏览:194
安卓皇帝隐藏剧情在哪里 发布:2025-03-17 13:18:53 浏览:507
新版安卓为什么不兼容 发布:2025-03-17 13:18:49 浏览:483
s3哪个配置性价比高 发布:2025-03-17 13:06:09 浏览:320
气体压缩能量 发布:2025-03-17 13:00:16 浏览:78
压缩油19 发布:2025-03-17 12:25:29 浏览:858
linux上网代理 发布:2025-03-17 12:23:56 浏览:361
c是高级语言吗 发布:2025-03-17 12:16:31 浏览:525