% 定义 MATLAB 函数 setdwtwatermark,用于在载体图像中嵌入经过 Arnold 置乱和 Haar 小波变换处理的数字水印,并计算 PSNR 值
function [Iw, psnr] = setdwtwatermark(I, W, nums, seeds, flag)
% 获取载体图像 I 的数据类型
type = class(I);
% 将载体图像 I 和水印 W 转换为 double 类型(I)和逻辑类型(W)
I = double(I);
W = logical(W);
% 获取载体图像和水印的尺寸
[mI, nI] = size(I);
[mW, nW] = size(W);
% 对载体图像 I 进行两次 Haar 小波分解
[ca1, ch1, cv1, cd1] = dwt2(I, 'haar');
[ca2, ch2, cv2, cd2] = dwt2(ca1, 'haar');
% 如果 flag 为真,则展示载体图像的小波分解结果
if flag
figure('Name', '载体小波分解');
subplot(121);
imagesc([wcodemat(ca1), wcodemat(ch1); wcodemat(cv1), wcodemat(cd2)]);
title('一级小波分解');
subplot(122);
imagesc([wcodemat(ca2), wcodemat(ch2); wcodemat(cv2), wcodemat(cd2)]);
title('二级小波分解');
end
% 复制原始水印并应用 Arnold 置乱
Wa = W;
H = [1, 1; 1, 2]^nums;
for i = 1:nW
for j = 1:nW
% 计算新的坐标
idx = mod(H * [i-1; j-1], nW) + 1;
% 在新的位置上设置水印位
Wa(idx(1), idx(2)) = W(i, j);
end
end
% 如果 flag 为真,则展示水印置乱的效果
if flag
figure('Name', '水印置乱效果');
subplot(121);
imshow(W);
title('原始水印');
subplot(122);
imshow(Wa);
title(['置乱水印,变换次数=', num2str(nums)]);
end
% 初始化用于存储修改过的小波系数变量
ca2w = ca2;
% 设置随机数生成器种子
rng(seeds);
% 生成随机排列索引并对小波系数进行置乱
idx = randperm(numel(ca2), numel(Wa));
for i = 1:numel(Wa)
% 获取随机排列的小波系数
c = ca2(idx(i));
% 计算对应的水印位置及扰动后的值
z = mod(c, nW);
if Wa(i)
if z < nW/4
f = c - nW/4 - z;
else
f = c + nW*3/4 - z;
end
else
if z < nW*3/4
f = c + nW/4 - z;
else
f = c + nW*5/4 - z;
end
end
% 更新小波系数
ca2w(idx(i)) = f;
end
% 对扰动后的小波系数进行逆变换得到嵌入水印后的高频部分
ca1w = idwt2(ca2w, ch2, cv2, cd2, 'haar');
% 对高频部分再进行逆变换得到完整的嵌入水印后的图像
Iw = idwt2(ca1w, ch1, cv1, cd1, 'haar');
% 截取原始尺寸范围内的图像
Iw = Iw(1:mI, 1:nI);
% 计算像素总数和最大像素值
mn = numel(I);
Imax = max(I(:));
% 计算 PSNR 值
psnr = 10 * log10(mn * Imax^2 / sum((I(:) - Iw(:)).^2));
% 将处理后的图像转换回原数据类型
I = cast(I, type);
Iw = cast(Iw, type);
% 如果 flag 为真,则展示原始图像和嵌入水印后的图像
if flag
figure('Name', '嵌入水印的图像');
subplot(121);
imshow(I);
title('原始图像');
subplot(122);
imshow(Iw);
title(['添加水印,PSNR=', num2str(psnr)]);
end
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.版本:matlab2022A。 2.包含:程序,中文注释,参考文献,仿真操作步骤(使用windows media player播放)。 3.领域:水印嵌入和提取 4.仿真效果:仿真效果可以参考博客同名文章《基于小波变换的水印嵌入和提取算法matlab仿真》 5.内容:基于小波变换的水印嵌入和提取算法matlab仿真。使用小波函数(如Haar、Daubechies等)对载体图像进行多级小波分解,通常选取低频系数或高频系数作为嵌入区域。根据嵌入时采用的策略从读取到的小波系数中提取水印信息,如通过阈值比较或某种编码方式恢复原始水印比特流。并提供不同的水印干扰方式,计算提取的水印效果。 6.注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。
资源推荐
资源详情
资源评论
收起资源包目录
基于小波变换的水印嵌入和提取算法matlab仿真.rar (8个子文件)
操作步骤.mp4 3.29MB
参考文献.rar 2.6MB
code
wk.tif 1KB
1.jpg 154KB
Runme.m 489B
func
dwtwatermarkattack.m 2KB
setdwtwatermark.m 3KB
getdwtwatermark.m 2KB
共 8 条
- 1
资源评论
fpga和matlab
- 粉丝: 17w+
- 资源: 2626
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- java人力资源HR管理系统源码数据库 MySQL源码类型 WebForm
- BT_esp32_370_DRV8833_BALANCE_verticalPID_turnPID.ino
- buildroot package使用示例
- C#ASP.NET快速开发平台源码带视频教程和操作手册数据库 SQL2008源码类型 WebForm
- 23网安六徐少方 20237209.cpp
- 多多买菜自动入库,拼多多自动入库使用
- a616354ce1a6e7d06267ae7821e38321.JPG
- 4e77c15f65be2f550de3265f33a4d427.JPG
- d25358831b9f038c041861d5add73551.JPG
- 大学专业课技术经济期末复习整理资料
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功