这一份详细的 README.md 文档。该文档严格基于您提供的 code snippet 进行编写,准确描述了代码中的内部生成逻辑、盲水印嵌入策略以及特定的 DWT 处理流程。
***
基于 DWT 的数字水印嵌入与提取系统
项目简介
本项目实现了一个基于离散小波变换(Discrete Wavelet Transform, DWT)的完整数字图像水印系统。核心算法采用盲水印技术(Blind Watermarking),即在提取水印时无需原始载体图像的参与,仅凭含水印图像即可恢复信息。
该系统设计为全自动化流程,代码内部自动生成实验所需的载体图像的数字水印,无需依赖外部图片文件。算法利用人眼视觉系统的掩蔽特性,将经过加密处理的二值水印信息嵌入到图像小波分解后的中频子带(HL2)系数关系中,实现了在保证图像视觉质量的同时,具备抵抗噪声和模糊攻击的鲁棒性。
系统功能特性
- 全流程自动化:无需准备测试图片,代码通过数学函数自动生成 Shepp-Logan 灰度仿真图作为载体,以及特定几何形状的二值矩阵作为水印。
- 安全性增强:引入 Arnold 置乱算法(及逆变换)对水印图像进行预处理,消除了水印的空间相关性,即使图像被提取也不易直接识别内容。
- 频域嵌入算法:利用 Haar 小波基进行二级 DWT 分解,选择对图像修改较为隐蔽且具备一定鲁棒性的第二级水平细节分量(HL2)进行操作。
- 盲水印提取:采用基于系数对相对大小关系的调制策略,提取过程不需要原始载体图像,更符合实际应用场景。
- 攻击模拟与评估:内置模拟椒盐噪声干扰与高斯模糊攻击,并自动计算峰值信噪比(PSNR)与归一化相关系数(NC)以客观评价算法性能。
系统运行环境
* Image Processing Toolbox(图像处理工具箱)
* Wavelet Toolbox(小波工具箱)
快速开始
- 确保 MATLAB 环境已按照上述工具箱。
- 将包含
main.m 及相关辅助函数(如有)的脚本文件夹设置为 MATLAB 当前工作目录。 - 直接运行
main 函数:
* 系统将在控制台输出各阶段的处理状态(初始化、预处理、分解、嵌入等)。
* 程序运行结束后,将弹出包含原始图像、水印图像、攻击后图像及提取结果的综合对比图表。
* 命令行窗口将输出 PSNR 值(衡量图像质量)和 NC 值(衡量提取准确度)。
核心算法与实现细节
本项目的 main.m 文件包含了以下关键技术实现逻辑:
1. 图像数据生成(无需外部 I/O)
- 载体图像:使用 MATLAB 内置的
phantom('Modified Shepp-Logan', 512) 函数生成 512x512 的标准医学仿真体模灰度图,并强制转换为 uint8 格式。 - 水印图像:通过矩阵操作构建一个 64x64 的逻辑二值矩阵,并在中心区域绘制了一个 "X" 形状的图案。
- 容量检测:代码自动计算二级小波分解后 HL2 子带的尺寸,验证嵌入容量是否满足水印大小(每个水印位需要 2 个小波系数),防止溢出。
2. 水印预处理
- 调用
arnold_transform 函数对二值水印进行 Arnold 置乱。 - 参数配置:置乱迭代次数设置为 10 次。这一步将原本有序的图像离散化为杂乱的噪声点,提高了水印的保密性。
3. 多级小波分析(DWT)
- 分解设置:使用
wavedec2 函数,采用 haar 小波基,对载体图像进行 2 级分解。 - 频带选择:利用
detcoef2 提取第 2 级的水平细节系数(HL2/H2)作为嵌入域。 - 选择理由:相较于将水印嵌入低频(近似分量 A2),修改中频(HL2)对图像视觉质量影响较小;相较于高频(对角分量 D2),中频对压缩和滤波等攻击的抵抗力更强。
4. 盲嵌入策略(系数对差值调制)
这是本算法的核心部分,无需原图即可提取水印的逻辑基础:
- 系数配对:将 HL2 子带的系数矩阵拉平为一维向量,每两个相邻系数作为一个嵌入单元 $(C_1, C_2)$。
- 嵌入逻辑:
* 设定强度阈值
alpha_step = 20。
* 若当前水印位为
1:强制调整系数对,使得 $C_1 - C_2 geq alpha$。
* 若当前水印位为
0:强制调整系数对,使得 $C_1 - C_2 leq -alpha$。
- 重构:修改完 H2 系数后,配合未修改的其他分量(A2, V2, D2, H1, V1, D1),使用
waverec2(IDWT)重构生成含水印图像。
5. 攻击模拟与提取
- 攻击:代码实现了对含水印图像施加椒盐噪声和高斯模糊,模拟真实信道中的传输失真。
- 提取逻辑:
* 对接收到的(可能被攻击的)图像再次进行 2 级 DWT 分解,提取 HL2 系数。
* 遍历系数对,无需原系数,仅判断相对大小:若 $C_1 > C_2$,判决为水印位 1;否则判决为 0。
- 逆处理:提取出的比特流重组为矩阵,并执行逆 Arnold 变换恢复原始水印图案。
6. 性能评价
- PSNR (Peak Signal-to-Noise Ratio):计算原始载体与含水印载体之间的差异,数值越高代表水印越不可见(隐蔽性越好)。
- NC (Normalized Correlation):计算原始水印与提取出的水印之间的相关性,数值越接近 1 代表提取越准确(鲁棒性越强)。