基于DCT域的扩频水印嵌入与攻击分析系统
项目介绍
本项目是一个基于离散余弦变换(DCT)与扩频通信技术的数字图像水印方案。该系统通过在宿主图像的频域中嵌入经过伪随机码(PN sequence)调制的二值水印信息,实现了信息隐藏与版权保护功能。系统内置了完整的攻击模拟与性能评估体系,能够量化分析水印在经过各类图像处理操作后的鲁棒性。
功能特性
- 频域嵌入技术:采用 8x8 分块 DCT 变换,将水印信息隐藏于对视觉感知影响较小的中频系数中。
- 扩频通信机制:利用高斯伪随机序列对水印位进行调制,提高抗干扰能力和安全性。
- 参数自主调节:支持修改嵌入强度因子(Alpha)、随机码密钥(Key)以及分块大小,便于测试不同配置下的平衡性。
- 全方位攻击测试:集成高斯噪声、椒盐噪声、中值滤波、均值滤波、局部裁剪、几何旋转以及 JPEG 压缩等多种主流攻击手段。
- 定量评估体系:系统自动计算峰值信噪比(PSNR)评估宿主图像质量损失,计算归一化相关系数(NC)评估提取水印的准确度。
- 结果可视化:提供直观的六分布图对比界面,展示原始图像、水印、含水印图、受损图、提取结果及指标趋势。
使用方法
- 环境准备:启动 MATLAB 环境,并确保拥有图像处理工具箱(Image Processing Toolbox)。
- 设置参数:在程序起始位置可调整
alpha(建议 1~20 之间)和 attack_type(1-8 对应不同攻击)。 - 执行程序:运行程序后,系统将自动读取或生成 256x256 的宿主图像,并生成 32x32 的 'W' 字样水印。
- 观察结果:程序运行结束后将弹出图形窗口,可视化展示水印的嵌入效果以及在设定攻击下的提取质量。
- 查看终端:控制台会实时输出实验的量化指标(PSNR、NC 和攻击信息)。
系统要求
- 软件环境:MATLAB R2016b 及以上版本。
- 依赖工具箱:图像处理工具箱(若无可使用内置的抗缺失辅助函数手动执行 DCT/IDCT)。
实现逻辑分析
1. 预处理阶段
系统首先将宿主图像统一缩放至 256x256 分辨率并转为双精度浮点数。水印信号为一个自定义生成的 32x32 二值图(代表字符 'W')。为了符合扩频逻辑,水印中的逻辑 0 被映射为 -1,逻辑 1 保持为 1。
2. 扩频码产生
系统使用固定的随机种子生成符合正态分布的伪随机序列(PN Sequence)。该序列用于与水印位进行相乘,从而将单个比特的信息分布到多个频率系数中,大幅提升水印的隐蔽性与鲁棒性。
3. 水印嵌入算法
- 分块变换:将图像划分为 8x8 的相互独立块。
- 频率选择:在 DCT 扫描矩阵中选取特定的中频位置索引(共 15 个点),这些点对图像质量影响较小且不易在压缩中丢失。
- 叠加法则:根据公式
D'(i,j) = D(i,j) + alpha * PN * bit 修改 DCT 系数。其中 alpha 控制嵌入强度。 - 逆变换:执行 IDCT 恢复空域像素,并转换回 8 位无符号整型格式进行显示或存储。
4. 模拟攻击模块
系统支持以下干扰模拟:
- 噪声攻击:高斯白噪声与椒盐噪声。
- 滤波处理:3x3 模板的中值滤波与均值滤波。
- 几何攻击:64x64 区域的左上角裁剪,以及基于双线性插值的图像旋转。
- 压缩攻击:质量因子为 50 的 JPEG 有损压缩模拟。
5. 水印提取与检测
提取过程无需原始宿主图像(盲提取逻辑):
- 对受损图像进行分块 DCT。
- 相关性计算:将对应频点的系数与已知的 PN 序列进行点乘求和,计算相关性得分。
- 判定规则:如果相关性得分大于零,判定水印位为 1,否则判定为 0。
6. 性能评价函数
- PSNR (Peak Signal-to-Noise Ratio):用于衡量嵌入操作对原图造成的失真程度。
- NC (Normalized Correlation):用于评估提取出的二值矩阵与原始水印矩阵的相似程度,数值越接近 1 则说明鲁棒性越高。
关键算法细节
- 分块逻辑:通过行列步长为 8 的双重循环遍历整个图像,确保 1024 个水印位精确映射到 1024 个 8x8 块中。
- 中频嵌入策略:选择
tc_idx 定义的 15 个中频坐标,避开了含有大部分能量的低频(会导致视觉显著失真)和极高频(极易被压缩抹除)。 - 辅助函数:程序内部提供了
manual_dct2 与 manual_idct2 函数,通过一维 DCT 变换的转置组合实现二维变换,保证了在缺乏工具箱的环境下程序依然具备可移植性。