基于小波变换的数字水印提取系统
项目介绍
本项目是一个专注数字图像处理与信息安全的算法演示系统,基于离散小波变换(DWT)技术实现了数字图像水印的嵌入、攻击模拟与提取功能。系统利用小波变换的多分辨率特性,将二值化的数字水印信息嵌入到载体图像的频域系数中。该项目不仅展示了完整的水印处理流程,还包含了鲁棒性测试模块,通过模拟高斯噪声攻击来验证算法的有效性,并使用定量指标(PSNR 和 NC)评估水印的不可感知性和提取质量。
功能特性
- 多色彩空间处理:支持将RGB图像转换为YCbCr色彩空间,仅对亮度分量(Y通道)进行水印处理,以最大程度减少对图像视觉质量的影响。
- 动态水印生成:根据分解层数自动计算水印尺寸,并在代码内部生成包含简单几何形状(矩形)的二值水印图案。
- 多级小波分解:利用Haar小波基进行二级离散小波变换(DWT),实现图像的时频域分解。
- 频域加性嵌入:选择中高频子带(HL2)作为嵌入区域,采用加性算法将水印强度因子融合到小波系数中。
- 攻击模拟机制:内置攻击模拟模块,能够对含水印图像施加高斯噪声,用于测试水印算法的鲁棒性。
- 非盲提取算法:采用逆向运算的方式,结合原始载体信息,从遭受攻击的图像中精确提取水印信息。
- 量化性能评估:自动计算峰值信噪比(PSNR)以评估图像质量,计算归一化相关系数(NC)以评估水印提取的准确度。
- 全流程可视化:提供包含原始图像、原始水印、含水印图像、受攻击图像、提取水印及差分图的综合对比视图。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
- Wavelet Toolbox(小波分析工具箱)
核心算法与实现逻辑
本项目的主程序逻辑严谨,涵盖了从环境初始化到结果展示的完整闭环,具体实现步骤如下:
1. 环境初始化与参数配置
系统首先清理工作空间与命令窗口,重置随机数种子以确保结果可复现。关键参数包括:
- 嵌入强度因子 (Alpha):设定为 10,控制水印嵌入的深度。
- 分解层数:设定为 2 层。
- 小波基函数:选用 'haar' 小波。
2. 载体图像预处理
程序尝试读取名为
peppers.png 的标准测试图像。若文件不存在,系统具备容错机制,将自动生成一张随机噪声图像作为替代。读取图像后,将其从 RGB 空间转换至 YCbCr 空间,并提取
Y(亮度)分量 作为主要操作对象,Cb 和 Cr 分量保持不变。
3. 水印信号生成
根据二级小波分解后的子带尺寸,系统动态计算水印大小。在生成的全黑背景上绘制白色矩形图案,并进行二值化处理(0或1),构建出可视化的几何水印。
4. DWT 分解与嵌入
对载体图像的 Y 分量进行二级小波分解。
- 分解路径:原图 -> (L1, H1) -> (LL2, HL2, LH2, HH2)。
- 嵌入策略:选择 HL2(二级水平细节子带) 作为目标区域。
- 嵌入算法:$C_{new} = C + alpha times W$,其中 $C$ 为原始系数,$W$ 为水印,$C_{new}$ 为嵌入后的系数。此过程中包含尺寸自适应调整,确保水印与子带维度一致。
5. IDWT 重构与图像合成
利用修改后的系数进行逆离散小波变换(IDWT)。
- 重构路径:先由二级系数重构出 LL1,再结合一级细节系数重构出完整的 Y 分量。
- 合成:将含有水印的 Y 分量与原始的 Cb、Cr 分量合并,并逆变换回 RGB 空间,生成最终的含水印图像。
6. 噪声攻击模拟
为了验证鲁棒性,系统对生成的 RGB 含水印图像施加
高斯噪声(均值为0,方差为0.005)。(注:代码中保留了JPEG压缩的接口,但当前运行逻辑主要演示噪声攻击)。
7. 水印提取
系统实现的是
非盲提取(Non-blind extraction)逻辑,即提取过程依赖原始载体图像的信息。
- 对受攻击的图像进行同样的色彩空间转换和二级小波分解。
- 提取算法:利用逆运算公式 $W_{ext} = (C_{attacked} - C_{original}) / alpha$ 还原水印信息。
- 后处理:设置阈值(0.5)对提取出的连续值矩阵进行二值化处理,恢复黑白水印图像。
8. 性能评估
系统内置了两个关键的数学评估函数:
- PSNR (峰值信噪比):计算原始图像与含水印图像之间的均方误差,以 dB 为单位衡量图像的失真程度。
- NC (归一化相关系数):计算原始水印与提取水印之间的相似度,数值范围 [0, 1],越接近 1 表示提取效果越好。
9. 结果可视化
程序最后生成一个包含六个子图的窗口,直观展示实验结果:
- 原始载体图像。
- 生成的原始二进制水印。
- 嵌入水印后的图像(标题显示 PSNR 值)。
- 遭受高斯噪声攻击后的图像。
- 从攻击图像中提取出的水印(标题显示 NC 值)。
- 图像差异图(将差异放大10倍显示,以便肉眼观察)。
使用方法
- 确保 MATLAB 已安装所需工具箱。
- 将包含
main.m 的文件夹设置为 MATLAB 当前工作路径。 - 确保工作路径下存在
peppers.png 图片文件(可选,若无则自动生成随机图)。 - 直接运行
main 函数。 - 观察弹出的结果窗口及命令行输出的评估指标。可通过修改代码顶部的
alpha 参数观察嵌入强度对图像质量和提取鲁棒性的影响。