基于离散小波变换(DWT)的数字水印嵌入系统
项目介绍
本项目实现了一套基于二维离散小波变换(DWT)的数字水印嵌入与提取方案。系统旨在将一个二值图像(版权信息)隐蔽地嵌入到灰度载体图像中,通过多级小波分解和空间域置乱技术,在保证图像视觉质量的同时提升水印的安全性和鲁棒性。该方案涵盖了从图像预处理、水印置乱、小波域嵌入到水印提取及质量评估的完整流程。
功能特性
- 多级小波分解:采用二级离散小波变换(DWT),将图像能量集中在低频子带,为水印提供稳定的嵌入位置。
- 安全性置乱:集成Arnold变换算法,对水印图像进行迭代置乱,打破像素间的相关性,增强抗剪切和非法提取的能力。
- 加性嵌入策略:利用加性公式将水印信息叠加到特定的低频系数(LL2)中,并通过强度因子控制平衡不可见性与鲁棒性。
- 非盲提取机制:通过对比含有水印的系数与原始载体系数,实现水印的精准提取。
- 多维度量化评估:系统自动计算峰值信噪比(PSNR)衡量图像失真度,计算归一化相关系数(NC)衡量提取水印的准确性。
- 全流程可视化:程序生成包含原始图像、置乱水印、含水印图像、提取出的水印以及嵌入误差残差图的综合结果展示。
系统要求
- MATLAB R2016b 或更高版本。
- 图像处理工具箱 (Image Processing Toolbox):用于图像读取、缩放、二值化及文本插入。
- 小波工具箱 (Wavelet Toolbox):用于执行
wavedec2(多级小波分解)和 waverec2(重构)。
使用方法
- 确保工作目录下存在合适的载体图片(程序默认寻找
cameraman.tif)。 - 直接运行主入口程序,系统将自动执行以下操作:
* 准备 512x512 的载体图像。
* 生成包含指定版权文字的二值水印。
* 执行水印的缩放与 Arnold 置乱(默认 5 次迭代)。
* 进行 2 级小波变换并嵌入水印。
* 生成含水印图像并自动提取水印。
* 弹出结果可视化窗口并输出评估指标。
实现逻辑与算法分析
#### 1. 水印预处理与安全保护
程序首先生成一个与载体比例对应的二值水印。为了适应二级小波分解后的低频子带尺寸,水印被缩放至原始尺寸的 1/4(例如从 512 缩放至 128)。随后,算法应用 Arnold 变换,通过矩阵映射公式对像素坐标进行重新排列。这种映射增加了水印被恶意攻击者直接识别的难度,只有持有正确迭代次数密钥的用户才能恢复原始形状。
#### 2. 二级离散小波变换 (DWT)
程序使用 Haar 小波基对原始灰度图像进行二级分解。分解过程将图像能量集中在 LL2(低频子带),而边缘和噪声信息则分布在水平(HL)、垂直(LH)和对角线(HH)高频子带中。选择在 LL2 子带嵌入是为了确保水印在经过常见的图像处理(如低通滤波)后仍能保持较高的稳定性。
#### 3. 加性嵌入规则
水印的嵌入遵循以下算式:
$LL2' = LL2 + alpha times W$
其中 $LL2$ 是原始低频系数,$alpha$ 是嵌入强度因子(程序默认为 15),$W$ 是置乱后的二值水印信息。通过调整 $alpha$,可以在不引起肉眼察觉的视觉畸变前提下,最大化水印的抗干扰能力。
#### 4. 图像重构与后处理
嵌入完成后,程序利用修改后的系数向量和原始的分解结构参数进行逆二级小波变换(IDWT)。由于重构后的像素值可能超出 [0, 255] 的标准灰度范围,系统执行了像素裁剪处理,确保最终输出的含水印图像符合标准 8 位图像格式。
#### 5. 提取算法与相似度检测
提取过程属于非盲提取,即需要参与原始 LL2 系数的计算。
- 计算差值:从含水印图像的小波分解系数中减去原始系数。
- 归一化恢复:将差值除以强度因子 $alpha$。
- 二值化判别:通过 0.5 的阈值判定提取的比特位。
- 逆置乱:利用逆 Arnold 变换矩阵公式还原出初始的版权文字图像。
#### 6. 核心函数说明
- Arnold 变换函数:实现坐标映射逻辑
new_pos = mod(Matrix * old_pos, size)。 - 逆 Arnold 变换函数:执行对应的反向矩阵映射,用于恢复图像。
- 指标计算:通过对像素误差平方和的计算得出 PSNR;利用向量点积与模长的比值得出 NC,反映提取水印与原始水印的线性相关程度。