基于离散傅里叶变换(DFT)的数字图像水印系统
项目介绍
本项目是一个基于离散傅里叶变换(DFT)实现的数字图像水印处理系统。系统通过将宿主图像变换到频域,利用频域系数的幅度分布特性,在图像的中频分量中嵌入二值化的水印信息。该方案旨在通过频域处理,在保证水印不可见性的同时,提升其在面对图像攻击(如噪声、压缩等)时的鲁棒性。
功能特性
- 中频域嵌入策略:算法选择在DFT幅度谱的环形中频区域嵌入信息,平衡了图像透明度与鲁棒性。
- 共轭对称处理:在嵌入过程中同步修改对称位置的频率分量,严格遵循DFT的共轭对称属性,确保逆变换后的图像无虚数分量。
- 鲁棒性压力测试:内置高斯噪声、椒盐噪声、JPEG压缩、图像裁剪、角度旋转等多种攻击模型。
- 定量评估指标:提供峰值信噪比(PSNR)用于衡量宿主图像质量,以及归一化相关系数(NC)用于评估提取水印的准确度。
- 可视化界面:系统能够自动生成对比图表,直观展示攻击前后的图像变化及对应的水印提取结果。
使用方法
- 启动 MATLAB 软件。
- 加载本项目源代码。
- 直接运行主程序。系统将自动加载图像并执行从水印嵌入、攻击模拟到提取分析的全流程。
- 在弹出的图形界面窗口中查看原始含水印图、受攻击图及对应的提取水印效果。
系统要求
- 环境:MATLAB R2016b 或更高版本
- 工具箱:Image Processing Toolbox(图像处理工具箱)
实现逻辑与功能细节
#### 1. 数据准备与预处理
- 宿主图像处理:系统默认读取标准测试图(512x512 灰度级),若环境缺失特定文件,则采用内置函数生成合成图像作为载体。
- 水印生成:系统在内部创建一个 32x32 的二值化矩阵。生成的图形为一个空心矩形,通过降维处理为列向量以便后续按序嵌入。
#### 2. 水印嵌入过程
- 频域变换:对宿主图像执行二维快速傅里叶变换(FFT),并应用频谱平移(fftshift)将零频成分移至中心。
- 分量选择:保留图像的相位谱(Phase)不变,仅在幅度谱(Magnitude)中操作。
- 区域选取:定义环形半径范围(60至120像素距离),在此中频范围内根据水印长度搜索合适的嵌入位置。
- 系数修改:采用叠加法嵌入水印,公式为:修改后的幅度 = 原始幅度 + 强度系数(alpha) * 水印位。
- 对称性维护:为保证逆变换结果为实数图像,系统在定位到一个坐标 (u, v) 后,会计算其关于频谱中心的镜像点 (M-u+1, N-v+1),并同步修改两点的幅度值。
- 图像重建:结合修改后的幅度谱与原始相位谱,通过逆频谱平移和二维逆傅里叶变换(IFFT)还原图像,并仅保留其实部。
#### 3. 攻击模拟模块
系统依次对含水印图像施加以下六种预设环境测试:
- 无攻击:作为对照基准。
- 高斯噪声:模拟信道传输或感光元件产生的随机噪声(均值0,方差0.005)。
- 椒盐噪声:模拟由于脉冲干扰产生的噪点(密度0.02)。
- JPEG压缩:通过图像写入与重读过程,执行质量因子为50的压缩处理。
- 裁剪攻击:将图像左上角 100x100 区域的像素值强制设为255,模拟信息丢失。
- 旋转攻击:对图像进行 2 度的双线性插值旋转,并保持裁剪比例,测试几何变换鲁棒性。
#### 4. 水印提取逻辑
该系统采用非盲提取算法:
- 变换分析:对遭受攻击后的图像再次执行 DFT 变换并提取幅度谱。
- 判定规则:依据预存的嵌入坐标,将提取到的幅度值与原始图像幅度值进行对比。若两者差异大于嵌入强度的一半(alpha/2),则判定该位水印为1,否则为0。
- 矩阵恢复:将提取出的列向量重新排列为 32x32 的矩阵,实现水印图像的还原。
关键算法分析
- 峰值信噪比 (PSNR):通过计算原始宿主与含水印图之间的均方误差(MSE),评估嵌入算法对载体图像质量的影响。
- 归一化相关系数 (NC):通过计算原始二值水印与提取水印之间的内积与模长比例,衡量水印恢复的保真度。NC值越接近1,表示提取效果越好。