基于LSB与DCT综合算法的数字水印全流程仿真系统
项目介绍
本项目是一个基于MATLAB开发的数字图像水印处理全流程仿真平台。系统集成了空间域的LSB(最低有效位)算法与频率域的DCT(离散余弦变换)算法,旨在通过对比实验分析两种不同水印嵌入策略在不可见性与鲁棒性方面的差异。
平台内置了完整的仿真链路:从载体与水印图像的自动生成、水印的Arnold置乱加密、水印嵌入、多种攻击模型的自动化模拟,到最终的水印提取与客观指标评价(PSNR与NC)。该系统能够直观地展示数字水印在不同攻击场景下的生存能力。
主要功能特性
1. 自动生成仿真数据
系统无需外部图片文件输入,依靠代码逻辑自动生成仿真所需数据:
- 载体图像:自动生成512x512尺寸的Modified Shepp-Logan幻影图像(灰度图),模拟医学或标准测试图像环境。
- 水印图像:自动生成64x64尺寸的二值“回”字形图案,用于直观判断提取后的几何失真情况。
2. 双重水印算法实现
项目实现了两种经典的水印嵌入与提取策略:
- LSB算法:基于位平面的空间域嵌入。系统允许指定嵌入的具体位平面(默认为最低位),通过直接替换像素二进制位的方式嵌入数据。
- DCT算法:基于分块离散余弦变换的频率域嵌入。系统将图像分为8x8像素块,利用人类视觉系统对中频系数不敏感的特性,通过比较并调整每块中固定位置((5,2)与(4,3))的一对系数大小关系来调制比特信息。
3. 安全性预处理
在嵌入水印之前,系统使用
Arnold置乱(猫映射)算法对二值水印图像进行加密处理。通过设定具体的迭代次数,将原始水印的像素位置打乱,消除图像的空间相关性,从而提高水印的安全性与抗剪切攻击能力。
4. 自动化攻击模拟
系统内置了一个综合攻击测试模块,能够对嵌入水印后的图像自动施加以下类型的干扰,以测试算法鲁棒性:
- 无攻击:作为基准对照。
- 高斯噪声:模拟成像传感器噪声(方差0.005)。
- 椒盐噪声:模拟脉冲干扰(密度0.02)。
- JPEG压缩:模拟有损压缩存储(质量因子70)。
- 图像剪切:模拟图像被裁剪掉左上角1/4区域的情况。
- 几何旋转:模拟微小的旋转攻击(2度)及后续的自动裁剪。
- 模糊处理:使用3x3均值滤波器进行平滑处理。
5. 客观质量评估
系统自动计算并输出关键评价指标:
- PSNR(峰值信噪比):用于衡量嵌入水印后图像的失真程度,评估水印的不可见性。
- NC(归一化相关系数):用于衡量提取出的水印与原始水印的相似度,量化评估算法抵抗攻击的能力。
系统逻辑与核心算法分析
本项目的核心逻辑通过以下流程严格执行:
参数初始化与数据准备
程序启动时首先清理工作区,定义关键全局参数,包括载体尺寸(N=512)、水印尺寸(n=64)、Arnold迭代次数(10)、LSB位平面位置(1)以及DCT嵌入强度系数(30)。通过
phantom函数生成灰度载体,通过矩阵操作构建二值逻辑水印。
预处理模块
调用Arnold置乱函数,对原始水印进行坐标变换。该过程是可逆的,主要利用模运算改变像素位置。在仿真中,嵌入的是置乱后的杂乱纹理,提取后需要经过逆置乱才能恢复“回”字形图案。
LSB算法仿真链路
- 嵌入逻辑:程序遍历水印图像的每一个像素,利用
bitset函数将载体图像对应位置(此处逻辑为左上角区域对应嵌入)像素的特定位平面修改为水印比特。 - 提取逻辑:利用
bitget函数读取受损图像对应位置的特定位平面,重新组装成二值图像。
DCT算法仿真链路
1. 将载体图像转换为双精度类型,并按8x8大小进行分块。
2. 对每个块执行二维DCT变换。
3. 选取中频区域的两个固定系数 $D(u_1, v_1)$ 和 $D(u_2, v_2)$。
4. 根据待嵌入的水印比特(0或1),调整这两个系数的大小关系。例如,若嵌入0,确保前者小于后者且差值大于设定阈值alpha;若嵌入1,则确保前者大于后者。
5. 执行二维DCT逆变换(IDCT)重构图像块。
* 同样对受损图像分块并进行DCT变换,直接比较两个特定位置系数的大小关系来判决出比特0或1,无需原始图像参与(盲提取)。
攻击与评估引擎
程序包含一个名为
run_attacks_and_extract的通用测试框架。该框架遍历预定义的攻击列表,对每种攻击依次执行:
- 应用攻击:调用专门的攻击函数库,对含水印图像进行破坏。特别说明了JPEG攻击是通过写入临时文件再读取的方式模拟真实的压缩损失。
- 执行提取:根据当前测试的算法类型(LSB或DCT),调用对应的提取函数还原比特流。
- 逆置乱恢复:对提取出的比特流进行逆向Arnold变换,尝试恢复原始图形。
- 指标计算:计算攻击后的图像与原图的PSNR值,以及恢复水印与原始水印的NC值。
- 可视化输出:动态创建图表,左右并列显示“受攻击图像”和“提取出的水印”,并在标题中直接标注当前的PSNR和NC分值。
系统要求
- 软件环境:MATLAB R2016a 或更高版本。
- 工具箱依赖:
* Image Processing Toolbox(用于
imnoise,
imrotate,
fspecial,
dct2,
im2uint8,
phantom等函数)。
使用方法
- 确保MATLAB已安装图像处理工具箱。
- 直接运行主函数
main。 - 程序将依次弹出三个窗口:
*
窗口1:显示生成的原始载体图像和原始水印图像。
*
窗口2:展示LSB算法在不同攻击下的图像质量与水印恢复效果。
*
窗口3:展示DCT算法在相同攻击下的图像质量与水印恢复效果。
- 控制台(Command Window)将实时输出每一步的执行状态、嵌入后的PSNR值以及各类攻击下的量化测试数据表格。