基于MATLAB的数字水印嵌入与检测系统
项目介绍
本项目实现了一个基于MATLAB平台的数字图像水印嵌入与提取系统。该系统采用了集成离散小波变换(DWT)、离散余弦变换(DCT)和奇异值分解(SVD)的复合频率域算法。通过对载体图像频域系数的精细修改,实现了将加密后的二值水印信息隐藏于图像中。该系统主要用于研究数字媒体版权保护、内容完整性认证以及评估算法在各种攻击环境下的鲁棒性。
功能特性
- 多重频率域变换:结合了DWT的空间分频、DCT的能量集中以及SVD的稳定性特征,提高了水印的隐蔽性和抵抗几何攻击的能力。
- 安全性加密:内置Arnold置换算法,通过对原始水印进行坐标置乱,确保了水印信息的安全性,即使被非法提取也难以直接识别。
- 鲁棒性测试:系统集成了多种模拟攻击模块,包括高斯噪声、JPEG压缩(质量因子为50)、中值滤波以及图像裁剪攻击。
- 性能定量评估:自动计算峰值信噪比(PSNR)以衡量含水印图像的视觉质量,同时计算归一化相关系数(NC)以定量分析提取水印的准确度。
- 动态水印生成:支持手动构造特定形状的二值矩阵作为水印信号。
系统要求
- 软件环境:MATLAB R2016a 或更高版本。
- 工具箱需求:Image Processing Toolbox(图像处理工具箱)。
- 硬件要求:标准桌面或笔记本电脑,建议至少 4GB 内存。
实现逻辑与流程
1. 预处理阶段
系统首先读取或生成 256x256 分辨率的灰度载体图像。水印信息为一个 32x32 的二值矩阵,通过预定义的字符形状(如代码中模拟的“H”字符)生成。为了增加安全性,水印在嵌入前会经过 5 次 Arnold 置乱迭代。
2. 水印嵌入过程
- 空间分解:利用 Haar 小波对原图进行一级分解,提取 LL 子带(低频部分)。
- 分块变换:将 LL 子带划分为 4x4 的不重叠小块。
- 频域映射:对每个块执行 DCT 变换,随后对 DCT 系数矩阵进行奇异值分解(SVD)。
- 系数修改:将置乱后的水印位信息嵌入到最大奇异值 $S(1,1)$ 中,嵌入强度由因子 $alpha$(默认 0.05)控制。
- 逆变换重构:依次执行逆 SVD、逆 DCT 和逆 DWT,最终合成含水印的图像。
3. 攻击模拟
系统对含水印图像施加五种不同的环境模拟:
- 无攻击:作为对照基准。
- 高斯噪声:添加均值为 0,方差为 0.01 的噪声。
- JPEG压缩:模拟图像经网络传输后的有损压缩处理。
- 中值滤波:使用 3x3 模板进行平滑处理。
- 图像裁剪:将图像左上角 64x64 区域置零,模拟局部遮盖攻击。
4. 提取与验证过程
提取过程是嵌入的逆过程。系统对受攻击后的图像进行 DWT 分解,针对 LL 子带的 4x4 分块进行 DCT-SVD 变换。通过对比受攻击图像与原始载体图像在频域上的奇异值差异,判定水印位是 0 还是 1。提取出的码流经过逆 Arnold 变换恢复原始水印形状。
关键函数与算法分析
Arnold 变换算法
系统通过自定义函数实现了二值图像的空域坐标置乱。利用线性同余映射对像素坐标 $(x, y)$ 进行重新排列,打破了原始水印的统计规律和视觉特征,增强了抗攻击后的鲁棒性。
DWT-DCT-SVD 混合架构
- DWT:负责将图像能量集中在低频区域,确保水印嵌入在图像的主干部分。
- DCT:进一步增强能量压缩,提升抵御压缩攻击的能力。
- SVD:利用奇异值的稳定性,即当图像遭受微小扰动时奇异值变化较小的特性,确保水印提取的准确性。
评估指标说明
- PSNR (Peak Signal-to-Noise Ratio):单位为 dB。PSNR 值越高,表示含水印图像与原图差异越小,透明性越好。
- NC (Normalized Correlation):取值范围 [0, 1]。NC 值越接近 1,表示提取出的水印与原始水印越一致,证明算法在该种攻击下越稳定。
使用方法
- 将所有相关代码保存在 MATLAB 当前工作目录下。
- 直接在命令行窗口输入
main 并回车,或在编辑器中点击“运行”按钮。 - 系统将自动执行嵌入、攻击测试及提取全过程。
- 运行完成后,系统会弹出可视化界面展示各阶段图像,并在命令行窗口输出详细的 PSNR 和 NC 评估报告。