离散余弦DCT域的数字水印
基于MATLAB的离散余弦DCT域的数字水印
一、数字水印技术的概述
1.1数字水印的概述
随着计算机网络的发展, 信息传播的数字化为信息获取带来了极大的便利, 并显著提升了信息表达效率与准确性水平。然而这一变革也带来了诸多负面影响, 即使是经过合法授权也无法复制传播拥有版权保护的作品或数据文件, 这一现象愈发引起了社会各界的关注与担忧, 成为亟待解决的关键问题所在。在信息安全领域, 传统密码技术作为重要组成部分之一存在明显缺陷: 首先, 加密处理后得到的数据由于其不可读性而阻碍了信息的有效传输;其次, 解密后则完全丧失原有的保护作用。基于上述困境, 需要一种能够替代现有技术或者作为补充的技术体系出现以解决此类问题, 而数字水印技术应运而生为解决这一问题提供了一种有效的解决方案
数字水印技术基本特征主要有:鲁棒性、不可见性、不可检测性、自恢复性。
主要应用领域涵盖版权管控、盗版追踪、图片识别、票据鉴别以及文件标题信息及注释管理等关键环节,并注重文件拷贝控制以确保数据安全
数字水标按照属性可分为强健型与脆弱型;根据承载的信息类型可分为图像信息、声音信息、视频信息以及文字信息;其依据嵌入的方式可分为时空域与频域,在时空域中又可分为时空域与频域,在时间尺度方面则分为时间尺度域。
尽管数字水印技术的发展仍在不断推进中,在这一过程中人们都表现出了积极的态度与努力。然而目前这一技术尚未完全成熟,并且尚未被广泛理解;其中还存在许多未解决的问题。然而目前数字水印技术在短期内难以取得实质性的突破;但由于其广泛的实用价值值得对其作深入研究。
1.2数字水印的典型算法
目前实现数字水印的典型算法有:
空域算法。最简单的方案是用水印信息替代图像的最低有效位(LSB)或多个位平面的所有比特。这属于典型的用于数据隐藏的技术。
变换域算法涵盖离散余弦变换(DCT)、小波变换(WT)、傅氏变换(FT或FFT)以及哈达马变换(Hadamard transform)等技术。其中基于分块的DCT是最常用的一种方法之一。数字水印技术中采用分块DCT的方法是将图像分割为8×8像素的小块,在经过分块DCT变换后得到由DCT系数组成的频率块,并随机选择部分频率块嵌入与密钥相关控制的选择性DCT系数中的水印信号。该方法通过微小地调节选定的DCT系数以满足特定关系来表示单比特信息。另外基于离散傅里叶变换(DFT)和小波变换(WT)等算法与上述方法具有类似的原理特点。以这种基于变换域的方法为代表的通用算法普遍采用频域处理技术以实现水印信号叠加并借鉴扩频通信手段对水印信号进行有效编码处理从而显著提升了透明度和抗干扰能力;同时巧妙地利用滤波技术消除由水印信号引入的高频噪声进而增强对低频滤波器的防护能力
3、压缩域算法。基于JPEG、MPEG标准的压缩域数字水印系统不仅减少了完全解码与重新编码所需的大量步骤,并且能够在数字电视广播及VOD(视频点播)系统中获得较为广泛的应用前景。
4、NEC算法。
5、生理模型算法。
二、可实现数字水印技术的实用工具——Matlab
2.1概述
用Matlab研究数字水印的优点:(1)整合了包括离散傅里叶变换(DFT)、离散余弦变换(DCT)和离散小波变换(DWT)等功能模块,并拥有完善的Wavelet函数库以及丰富的矩阵运算功能包,在实际应用中极大地方便了研究人员的操作与实现。(2)凭借强大的矩阵运算能力,在音频信号与视频数据中能够高效地完成大规模的数据矩阵运算。(3)提供了图像处理工具包(Image Processing Toolbox)、小波分析工具包(Wavelet Toolbox)以及数字信号处理工具包(DSP Toolbox),这些资源为跨学科领域的数字水印技术开发提供了强有力的技术支撑。(4)具备开放性特征的Matlab编程环境使得各类程序设计者的开发人员可以根据需求选择合适的工具包,并根据Matlab官方提供的API规范进行自定义数字水印解决方案。
2.2算法中常用的Matlab函数介绍
Matlab通过丰富的库函数集合为数字水印算法提供了强大的技术支持,并成功简化了算法实现过程。针对数字水印技术中常用的几类核心函数进行概述性介绍。
1、图像文件输入输出函数
imread:从文件读取图像,图像文件可以是bm、pdf、jpeg、pcx、tiff、xwd等格式。
imwrite:把图像写成文件
load:将以mat为扩展名的图像文件调入到内存
save:将工作空间中的变量保存到以mat为扩展名的图像文件中
2、图像显示函数
image:建立并显示图像,它可返回一个图像的句柄给一个image对象
imshow:显示一幅图像
truesize:调整图像显示大小
3、LSB空间域算法常用函数
rand:产生随机序列
unit8:把其它类型对象转换为8位无符号整数类型
double:把其它类型对象转换为双精度数值
size:计算图像(矩阵)的大小
sum:对元素求和
reshape:重新排列矩阵
4、DCT域图像变换函数
dct,dct2:分别实现一维信号和二维信号的DCT(离散余弦变换)
idct,idct2:分别实现一维信号和二维信号的IDCT(逆向离散余弦变换)
5、DWT域图像变换函数
dwt,dwt2:分别实现一维信号和二维信号的DWT(离散小波变换)
idwt,idwt2:分别实现一维信号和二维信号的IDWT(离散小波变换)
wavedec2:多级二维小波分解函数
waveinfo:提供小波包中所有的小波信息
6、攻击函数
imcrop:将图像剪裁成指定的矩形
imresize:使用指定的插值方法,调整图像大小
imrotate:使用指定的插值方法逆时针将图像旋转任意指定的角度
imadjust:用于调整图像的对比度
imnoise:给图像增加噪声
filter,filter2:实现对一维和二维信号的滤波
3.3DCT变换水印的实现
数字图像水印算法选择时优先采用二值化灰度图像作为载信息体,在分析其二值特性基础上决定不同层次的嵌入强度,并将宿主图像按照8×8像素网格进行划分处理。随后,在DCT变换域中提取出目标区域,并对该区域实施数字水印信息注入操作。整个过程的具体步骤如下:首先,在DCT变换域中提取出目标区域;其次,在该区域内完成数字水印信息的具体注入;最后完成水印信息的整体嵌入过程。
设原始图像I具有M×N的尺寸,则其上附加的水印信息图J具有P×Q尺寸(其中M和N分别为P和Q的偶数倍)。随后将该水印信息图J嵌入至原始图像I之中,并按照以下具体步骤完成算法操作:
1. 将I分解为(M/8)×(N/8)个8×8大小的方块B;同时,J也分解为 (M/8)×(N/8)个(8P/M)×(8Q/N)大小的方块V;
2. 对每一个B进行DCT变换:DB=DCT(B);
在每个数据库和向量上执行加载水印的过程。对于每个i值,在范围1到(8P/M)乘以(8Q/N)之间选择位置坐标s(i),对应的t(i)则表示水印向量V在空间中的位置坐标,在同样的范围内进行选择。其中A是一个加权系数,在生成新的数据库版本时被用来替代原来的数据库D_B^C;经过这一过程处理后即可得到带有加载水印的图像DBC
4. 对每个DBC执行逆DCT操作:将所有IDBC块合并成完整的图像I,并得到嵌入水印后的完整图像。
3.4离散余弦变换水印提取算法
令图像D为已加载水印的承载图像。
欲从中提取所加载的水印。
此过程对应于前述载入水印算法的操作反向实施。
1. 将D分解为(M/8)×(N/8)个8×8大小的方块BD;
2. 对每一个BD进行二维DFT变换:DBD=DCT(BD);
3. 提取数据对每一个DBD,按照式V’=1/A×DBD得到V’;
4. 将上面得到的所有V’合并成一个水印整图J’。
3.5DCT算法的matlab程序运行
size=512; N=32;K=8; D=zeros(size);E=0.01;
Y1=imread('22.jpg');
I=rgb2gray(Y1);
3.6 仿真结果
1、低通滤波攻击
hh=fspecial('gaussian',3,0.1);

2、低通滤波攻击
hh=fspecial('gaussian',3,0.3);

3、低通滤波攻击

四、数字水印的性能评估和攻击
制定科学的评估方法与基准标准是数字水印研究的关键内容之一。其评估内容涵盖两个主要方面:一是 watermark 健壮性评估;二是 watermark 对图像影响的主观与客观定量评价。通常情况下,在 watermark 健壮性和不可感知性之间需要进行权衡。因此,在保证各 watermark 系统可比性的前提下进行测试是确保公平合理性能评价的基础。
4.1影响水印健壮性的因素
水量:它直接决定水印的鲁棒性。对于同一水印方案而言,在水量上投入越大,则其鲁棒性将相应降低。被嵌入的数据源自不同的应用场景。
2、水印编码深度。在平衡图像质量与抗攻击能力之间存在一种权衡关系。为了增强鲁棒性需要提高水印编码深度这会相应地导致水prints可见度的提升。
3、图像是由大小和特性的两个方面组成的。嵌入水印的技术其抗毁能力与其像素尺寸密切相关。一个实用有效的水印软件程序应该具备从图片中恢复出水印的能力。打印时通常要求图像是高分辨率的;但同时也希望这些图像是经过扫描并在网络上传播时能受到保护。此外图像是各种特性的综合体现;传统的基于自然图象的方法在应用于计算机生成图形时其抗毁性能会明显下降。经过优化设计后的公平基准测试应支持从几百到上万个像素不等的各种尺寸,并且测试样本应涵盖不同类型的图象类型。
4、密钥。系统安全主要依赖于密钥的作用发挥。在水印算法设计中,默认的安全参数设定必须足够大以防止穷举攻击成功。
4.2视觉质量的定量描述
两种定量度量的方法:
1、基于像素的度量方法
该方法归类于量化失真度量指标,在实际应用中展现出良好的性能特点。其评估结果不受主观因素的影响,并能为不同评估方法间的公平比较提供可能基础。在视觉信息处理领域中,大多数用于衡量失真程度的方法都基于差分失真度量原理展开研究与应用。这些指标通常基于原始图像与其经处理后的版本之间的差异计算得出。然而,在实际应用中发现这类差分失真度量指标与人类视觉系统存在一定的偏差关系。复杂水印技术可能模拟不同视觉系统的行为特征,在这种情况下直接将其应用于水印技术可能会带来一些局限性问题例如,在定量评估水印引入所带来的图像失真的时候往往会导致测量结果出现偏差或者无法准确反映真实情况进而影响后续的应用效果因此建议采用符合人类视觉感知特性的失真测量标准以期达到更为理想的效果
2、可见性质量度量
人们意识到基于像素划分的失真测量方法存在局限性,并因此逐渐有更多研究关注能够适应人眼视觉特性的失真评估方法。可见性质量主要依赖于人眼对亮度差异的感受以及通过遮挡弱化信号的能力,并且这种特性是基于人眼处理信息时的空间并行机制而形成的。
五、总结
在本设计中,在图像处理领域中离散余弦变换发挥着关键作用,并被采用以将水印信息融入到原始图像的较低频区域。本文所提出的鲁棒性相对较高的水印算法虽然不如那些依赖于原始未加水印图像的方法有效(即某些基于宿主图像的传统水印算法),但它具有一个显著的优势:无需依赖未经处理的原始图像即可实现嵌入,并且这种新方法能够有效地抵抗诸如旋转、裁剪以及低通滤波等常见的攻击手段。通过先对原始图像进行直方图均衡化预处理工作,则可以使该算法的表现得到进一步提升,并通过实验验证可知该方法具有良好的鲁棒特性。实验所采用的仿真软件为MATLAB7.0版本,在这一版本软件与更高版本相比可能会缺少一些功能模块(例如某些高级函数),但对于当前的设计方案而言不会造成实质影响)。
同样地,在未受攻击情况下嵌入的水印图像清晰度依然较高。这表明离散余弦变换方法在实际应用中仍具一定的有效性。在无攻击手段干预的情况下提取出的水印与原图像具有极高的相似度(其与原始图像之间的相似度达到了惊人的99.55%!)。然而,在面对旋转和剪切等几何变换时该算法的表现尚可;但就旋转 attack 和 shear attack 来说效果并不显著——在这种情况下无法提取出有效的水印信息。这种现象充分证明了这种算法虽然有效但在处理特定类型的图像处理问题时仍存在明显的局限性
最后,在程序的设计中采用了最为基础的循环语句结构,并未对代码执行效率进行任何优化方面的考量。就本研究而言,在处理图像数据时所设计的算法具有较高的计算效率( execution cost is relatively low),但随着图像尺寸的增长这一优势将逐渐消失( if image size becomes significantly large)。值得注意的是,在for循环的应用场景下采用向量化运算将使运行时间大幅减少( particularly, when using vectorized operations on for loops, execution time can be reduced by hundreds or even thousands of times!)。然而,在内存管理方面存在一些不足之处( 即缺乏充分考虑预分配内存的情况)。具体来说,在引入预分配内存后( when introducing pre-allocated memory),不仅能够显著提升计算效率( execution time will be notably shortened),还能有效避免因频繁动态内存申请导致的碎片化问题( memory fragmentation issues can be effectively mitigated)
