MatlabCode

本站所有资源均为高质量资源,各种姿势下载。

您现在的位置是:MatlabCode > 资源下载 > 一般算法 > 基于DWT-JND模型与DCT变换的图像水印系统

基于DWT-JND模型与DCT变换的图像水印系统

资 源 简 介

本项目设计并开发一套完善的数字图像水印处理系统,旨在解决水印透明性与鲁棒性之间的矛盾。核心功能主要包含四个方面:首先,重点实现离散小波变换(DWT)域下的恰可察觉失真(JND)模型计算。该模块通过分析DWT子带系数的亮度掩蔽特性(Luminance Masking)和纹理掩蔽特性(Texture Masking),结合人类视觉系统(HVS)的对比度敏感函数,精确计算出每个小波系数的视觉冗余阈值(JND Profile)。其次,利用计算得到的JND值作为自适应因子,控制水印信号嵌入到图像DWT域中高频子带的强度,确保嵌入的水印在人眼无法察觉的前提下具备最强的能量,从而提高抵抗攻击的能力。再次,为了进行算法性能对比,项目还包含了一套标准的基于分块离散余弦变换(DCT)的扩频水印算法实现,支持在中频系数中嵌入伪随机序列水印。最后,系统集成了完整的水印攻击测试平台,能够模拟JPEG压缩、高斯噪声、椒盐噪声、滤波、裁剪等常见图像处理攻击,并自动计算峰值信噪比(PSNR)、结构相似性(SSIM)以及提取水印的归一化相关系数(NC),以量化评估算法的性能。

详 情 说 明

基于DWT-JND模型与DCT变换的自适应图像水印系统

项目介绍

本项目设计并实现了一套基于Matlab的数字图像水印系统。系统核心在于融合了DWT(离散小波变换)域的JND(恰可察觉失真)感知模型,实现了水印的自适应嵌入,以平衡水印的不可见性(透明性)与鲁棒性。此外,为了评估算法性能,系统还并行实现了一套基于DCT(离散余弦变换)扩频的水印算法作为对比组,并集成了多种常见的图像攻击模拟与性能评价指标计算功能。

功能特性

  • 自适应DWT-JND水印嵌入:利用人类视觉系统(HVS)特性,在小波域计算JND阈值,根据图像的亮度掩蔽和纹理掩蔽特性动态调整水印嵌入强度。
  • 对比算法实现:提供基于分块DCT的扩频水印算法作为性能参照。
  • 鲁棒性测试平台:内置自动化攻击模拟模块,支持高斯噪声、椒盐噪声、JPEG压缩、中值滤波及裁剪攻击。
  • 多维性能评估:自动计算并输出峰值信噪比(PSNR)、结构相似性(SSIM)以及归一化相关系数(NC),量化评估图像质量与水印提取效果。
  • 可视化展示:直观展示攻击后的图像、提取的水印图案、差值图以及JND阈值图。

系统要求

  • MATLAB (推荐 R2016b 或更高版本)
  • Image Processing Toolbox (图像处理工具箱)

使用方法

直接运行主脚本 main 即可启动系统。程序将按以下流程自动执行:

  1. 加载图像:尝试读取名为 cameraman.tif 的图像,若不存在则自动生成一幅合成灰度图像,并统一调整尺寸为 512x512。
  2. 水印生成:创建一个 64x64 大小的二值“方框”图案作为原始水印。
  3. 算法执行:分别执行DWT-JND嵌入和DCT扩频嵌入。
  4. 攻击与测试:对两种水印图像依次施加预设的攻击干扰。
  5. 结果输出:弹出图像窗口展示视觉效果,并在控制台打印详细的性能评估报表。

代码实现逻辑详解

主程序主要由以下几个核心步骤构成:

1. 初始化与数据准备

系统首先清理环境,加载或生成宿主图像并转为灰度图。同时构建一个中心带有镂空方框的 64x64 二值矩阵作为数字水印。

2. DWT-JND 水印嵌入

调用 dwt_jnd_embed 函数处理图像:
  • 变换:对图像进行单层 Haar 小波变换,得到 LL, LH, HL, HH 子带。
  • JND计算:利用子带系数计算视觉阈值,作为嵌入强度的权重。
  • 序列化:将二维水印拉伸为一维向量,并映射为 {-1, 1} 的伪随机序列。
  • 嵌入:在 HL(水平高频)子带中,按照随机选定的位置,结合计算出的 JND 阈值和全局强度因子(alpha=0.8)进行加性嵌入。
  • 重构:执行逆小波变换得到含水印图像。

3. DCT 扩频水印嵌入 (对比组)

调用 dct_spread_embed 函数:
  • 分块:将图像分为 8x8 的非重叠块。
  • 变换:对每个块进行 DCT 变换。
  • 嵌入:随机选择图像块,修改其中频系数(位置坐标 (5,5)),采用加性规则嵌入水印信息,强度系数设为 alpha=15。
  • 重构:执行分块逆 DCT 变换。

4. 攻击模拟与提取评估

程序遍历预定义的攻击类型列表(无攻击、噪声、压缩、滤波、裁剪):
  • 模拟攻击:对 DWT 和 DCT 处理后的图像施加不同程度的破坏。
  • 水印提取
* DWT提取:采用非盲提取策略(依赖原始图像)。计算攻击后图像与原图在 HL 子带的差值,通过判断差值的符号来还原水印比特。 * DCT提取:采用盲提取策略(不依赖原图)。通过检测中频系数值的正负符号来判决水印信息(假设原始系数均值接近0)。
  • 指标计算:分别计算两组算法的 PSNR(图像保真度)、SSIM(结构相似度)和 NC(水印提取准确度)。

5. 结果可视化与报告

  • 绘图:创建一个包含多子图的窗口,重点展示“无攻击”和“JPEG压缩”下的受攻击图像及对应的提取水印。特别地,在无攻击状态下,还会显示 DWT 嵌入造成的差值图和计算出的 JND 视觉阈值图。
  • 终端输出:格式化打印表格,列出每种攻击下 DWT-JND 方案与 DCT 方案的 PSNR 和 NC 值对比。

关键算法实现细节

JND 模型计算 (compute_jnd_dwt)

该函数实现了基于小波域的视觉感知模型,通过以下两个特性合成最终的阈值:
  1. 亮度掩蔽 (Luminance Masking):利用 LL 子带(低频背景)估算局部亮度。使用分段线性函数模型,对于过暗或过亮的区域通过赋予较高的阈值权重(人眼对这些区域的噪声不敏感)。
  2. 纹理掩蔽 (Texture Masking):计算高频子带(LH, HL, HH)绝对值之和的局部标准差(3x3窗口),作为纹理复杂度的度量。纹理越复杂的区域,掩蔽效应越强,允许嵌入的强度越大。
  3. 阈值合成:将亮度掩蔽因子、纹理掩蔽因子和小波层级权重相乘,并进行归一化和幅度限制,防止嵌入过强导致明显失真。

水印同步与扩频

在嵌入过程中,为了增强安全性与抗干扰能力,代码中使用了 randperm 生成随机位置索引,并将二进制水印 {0, 1} 映射双极性序列 {-1, 1} 进行扩频处理。这要求提取端必须拥有相同的随机数种子或索引序列(Key)才能正确恢复水印。