MatlabCode

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

您现在的位置是:MatlabCode > 资源下载 > 一般算法 > 基于离散小波变换的图像数字水印提取系统

基于离散小波变换的图像数字水印提取系统

资 源 简 介

本项目专注于数字图像处理领域的信息安全应用,实现了一套完整的基于离散小波变换(DWT)的数字水印提取算法。该系统的主要逻辑是对包含水印信息的载体图像进行多级小波分解,利用小波的多分辨率特性,从特定的频带系数(如低频逼近子带LL或高频细节子带LH/HL/HH)中逆向还原出隐藏的二值图像水印或伪随机序列水印。功能涵盖了图像读取、色彩空间转换、多层DWT变换、系数逆运算及水印重构等核心步骤。该项目设计旨在与水印嵌入程序配套使用,通过模拟逆过程来验证水印算法的不可感知性和鲁棒性。系统不仅能提取水印,还包含性能评估模块,能够计算提取出的水印与原始水印之间的归一化相关系数(NC)以及峰值信噪比(PSNR),从而定量分析在遭受噪声、滤波、压缩等攻击后的水印残留质量。代码逻辑严谨,注释详尽,是理解频域数字水印技术与深入学习MATLAB小波分析工具箱的优秀实践案例。

详 情 说 明

基于小波变换的数字水印提取系统

项目介绍

本项目是一个专注数字图像处理与信息安全的算法演示系统,基于离散小波变换(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. 结果可视化

程序最后生成一个包含六个子图的窗口,直观展示实验结果:
  1. 原始载体图像。
  2. 生成的原始二进制水印。
  3. 嵌入水印后的图像(标题显示 PSNR 值)。
  4. 遭受高斯噪声攻击后的图像。
  5. 从攻击图像中提取出的水印(标题显示 NC 值)。
  6. 图像差异图(将差异放大10倍显示,以便肉眼观察)。

使用方法

  1. 确保 MATLAB 已安装所需工具箱。
  2. 将包含 main.m 的文件夹设置为 MATLAB 当前工作路径。
  3. 确保工作路径下存在 peppers.png 图片文件(可选,若无则自动生成随机图)。
  4. 直接运行 main 函数。
  5. 观察弹出的结果窗口及命令行输出的评估指标。可通过修改代码顶部的 alpha 参数观察嵌入强度对图像质量和提取鲁棒性的影响。