基于 Matlab 的 DFT 数字水印嵌入与提取攻击
基于Matlab的DFT数字水印嵌入与提取是一种有效且常用的技术用于保护数字版权和防止盗版行为。本文详细介绍了一种基于DFT的数字水印算法及其鲁棒性验证过程:
数字水印嵌入:将载体图像转换为频域后,在指定位置加入带有嵌入强度α的水印信息。
数字水印提取:从带有水印的图像中通过频域相位信息反解出水印,并进行逆变换恢复。
鲁棒性验证:通过添加高斯白噪声等方式对载体图像进行攻击,并计算PSNR值评估算法性能。
该方法展示了在一定攻击下的鲁棒性表现(PSNR>30dB),但仍需进一步优化以提高抗攻击能力。
基于 Matlab 的 DFT 数字水印嵌入与提取攻击
数字水印是一种新兴技术,在信息隐藏方面具有重要应用价值,在数字媒体中对信息实施保护性藏匿是其主要目标之一。主要是在数字图像领域内应用最为广泛的一种方法论则是利用离散傅里叶变换原理实现数据加密与解密操作过程中所涉及的技术体系研究已经取得了显著成果。本文将深入阐述基于Matlab平台下DFT算法的具体应用步骤并系统分析相关的攻击手段及其抗干扰能力
- 数字水印嵌入
数字水印的融入过程涉及将水印信息融入到承载图像中。在基于 DFT 的数字水marking 码算法中,则遵循以下步骤:首先对被加密图像实施 DFT 转换以获取其频率成分;随后利用特定算法将原始 watermark 信号转换为适合嵌入的形式;接着将其整合进被加密图像的频率成分中;最后通过 IDFT 逆变换得到最终带有隐藏 watermark 的加密图像。以下是基于 DFT 的数字水marking 编码的具体实现步骤:首先获取承载图像的数据矩阵;随后对该矩阵执行快速傅里叶变换;接着生成与原始 watermark 信号匹配的频域数据;将这些频域数据与被加密图像的高频分量混合融合;最后通过反傅里叶变换恢复出最终的加密图像数据。
% 读取载体图像和水印
I = imread('carrier_image.png');
M = imread('watermark.png');
% 将载体图像和水印转换为灰度图像
I = rgb2gray(I);
M = rgb2gray(M);
% 进行DFT变换
F = fft2(I);
fM = fft2(M);
% 定义水印嵌入强度 alpha 和嵌入位置 u, v
alpha = 0.05;
u = 10;
v = 20;
% 将水印信息加入到载体图像频域中
F(u:u+size(M,1)-1, v:v+size(M,2)-1) = ...
F(u:u+size(M,1)-1, v:v+size(M,2)-1) + alpha*fM;
% 进行逆DFT变换,并保存带有数字水印的图像
I_wm = ifft2(F);
imwrite(uint8(abs(I_wm)), 'watermarked_image.png');
上述代码中,I变量代表原始图像,而M变量代表水印信息。为了获取这些图像数据,程序通过调用imread()函数来读取相关文件。在执行DFT变换之前,请注意将图像转换为灰度图像是必要的操作,因为DFT变换仅适用于单通道信号的处理。经过DFT变换后得到的结果分别存储于F变量(对应原始图像)和fM变量(对应水印信号)。其中,
- alpha参数决定了水印信息在频域中的占比程度;
- u和v则表示水印信息在频域中的具体嵌入位置,
这些参数共同控制着整个水印嵌入的过程。
在代码中将水印信息加入到载体图像频域中的操作为:
F(u:u+size(M,1)-1, v:v+size(M,2)-1) = ...
F(u:u+size(M,1)-1, v:v+size(M,2)-1) + alpha*fM;
除了上述方法外,还可以采用其他方式将水印信息附加至载体图像的DC值上.具体实施步骤可通过如下的Matlab代码来完成:DC\text{-value embedding technique}.
% 计算水印信息嵌入位置 u 和 v 的 DC 值
dc = sum(sum(I(1:size(M,1), 1:size(M,2)))) / numel(M);
wm_dc = sum(sum(M)) / numel(M);
% 计算加入水印信息后的载体图像的 DC 值
I_wm = I + alpha*(M-wm_dc+dc);
在代码中使用 I 变量代表源图像,在代码中使用 M 变量代表水印信息。分别通过调用 \texttt{imread}() 函数读取原始图像和水印图像。利用 \texttt{sum}() 和 \texttt{numel}() 函数计算源图像和水印信息在指定区域内的像素总值与像素数量之比得到DC值。计算源图像的DC值作为基准参数。计算水印信息的DC值时采用相同的计算方法。参数α表示嵌入强度,在嵌入过程中控制着水印信息在整个源图像中的占比比例。
- 数字水印提取
数字水mark提取主要涉及从具有数字watermark的图像源中获取watermark数据。采用基于DFT的方法进行watermark嵌入与检测。具体而言,在带watermark的图像上执行离散傅里叶变换(DFT)操作后,在频域内解码获取watermark的信息及其位置与大小。经过上述步骤后可恢复完整的watermark数据。以下是一些实现该过程的关键步骤说明:
% 读取带水印图像
I_wm = imread('watermarked_image.png');
% 进行DFT变换
F_wm = fft2(I_wm);
% 定义水印提取位置 u, v
u = 10;
v = 20;
% 解调水印信息
fM_wm = alpha*fM .* exp(-1i*angle(F_wm(u:u+size(M,1)-1, v:v+size(M,2)-1)));
% 进行逆DFT变换,并保存提取出的水印
M_extracted = ifft2(fM_wm);
imwrite(uint8(abs(M_extracted)), 'extracted_watermark.png');
在代码中,变量I_wm存储了一个带有数字水印的载体图像,并使用imread()函数进行读取。进行DFT变换之前,并不需要将该图像预先转为灰度图像。变量F_wm则代表该带水印的载体图像经过DFT变换处理后得到的结果。其中参数α代表嵌入强度,在一定程度上决定了水印信息在整个频域中的占比程度;而其位置则由u和v两个变量表示。实现水印信息提取的过程:
fM_wm = alpha*fM .* exp(-1i*angle(F_wm(u:u+size(M,1)-1, v:v+size(M,2)-1)));
基于带有水印的宿主图像的相位特性进行计算,并进而利用该相位特性和相关算法提取出载波图像中被嵌入的水印频谱。假设在嵌入水印的过程中,我们采用复数域运算来将水印信息叠加到宿主图像的频域数据中,则可以通过对相位数据进行分析来恢复相应的频域特征。
- 攻击与鲁棒性验证
为了确保其在实际应用中的稳定性和可靠性,在设计数字水岭算法时必须考虑到潜在的攻击手段。尽管如此,在经过一定处理后的图像中嵌入了数字水印信息也不会影响其完整性。然而这并不意味着我们必须放弃这种技术而是应在实现过程中采取相应的保护措施从而确保其在实际应用中的稳定性和可靠性得到充分保障
常见的攻击手段涉及裁剪、旋转、缩放以及加噪声等技术。本文将具体阐述数字水印算法在抗加噪声攻击中的鲁棒性验证过程。代码如下:
% 读取带水印图像
I_wm = imread('watermarked_image.png');
% 添加高斯白噪声
I_wm_noisy = imnoise(I_wm, 'gaussian', 0.01);
% 提取数字水印
F_wm_noisy = fft2(I_wm_noisy);
fM_wm_noisy = alpha*fM .* exp(-1i*angle(F_wm_noisy(u:u+size(M,1)-1, v:v+size(M,2)-1)));
M_extracted_noisy = ifft2(fM_wm_noisy);
% 计算 PSNR
psnr = 10*log10(255^2/mean(mean((M-M_extracted_noisy).^2)));
disp(['PSNR = ', num2str(psnr), ' dB']);
在提供的代码中,变量I_wm被定义为带有数字水印的载体图像。为了模拟攻击环境,在图像上应用了高斯白噪声处理以生成带干扰的版本。随后对含有数字水印的载体图像进行快速傅里叶变换(DFT)处理,并将其与常规提取过程一致地进行对比分析。随后通过以下Matlab代码段可实现PSNR值的计算:
psnr = 10*log10(255^2/mean(mean((M-M_extracted_noisy).^2)));
在编码过程中,在数学表达式M中表示原始水印数据,在另一表达式M_{ExtractedNoisy}中代表经受攻击后的提取结果。采用均方误差作为评估指标来确定PSNR值。
为了评估数字水印算法在遭受攻击情况下的鲁棒性,需对比未受干扰条件下的水印提取结果与遭受干扰后的结果.若两组数据间的PSNR值相对较高,则表明该算法具备较强的抗干扰能力.通常情况下,当计算得到的PSNR值超过30dB时,则可判定该数字水印方案是有效的.
- 结论
本文阐述了基于Matlab的数字水印嵌入与提取方法,并通过引入攻击手段来评估其抗干扰能力。在实现过程中需掌握DFT变换原理及其在频域的应用,并了解如何进行图像亮度调整以及利用复数运算将水印数据注入到载体的频域特征中。
在验证数字水印算法的鲁棒性时,在验证过程中需要挑选适合的攻击手段,并采用计算 PSNR 的方法进行评估。尽管该算法具有一定的抗干扰能力,在实际应用中仍需进一步提高其防御性能以适应更多复杂的攻击场景。
