Advertisement

DWT-SVD数字水印

阅读量:

数字水印技术通过频域方法(如DWT-SVD)隐藏信息以提高鲁棒性,在空间域直接修改像素值会导致较弱的鲁棒性。DWT(小波变换)将图像分解为低频和高频分量(LL, LH, HL, HH),通常将水印嵌入低频分量以增强抗攻击能力。SVD(奇异值分解)用于提取图像特征并实现降维和压缩,在数字水印中用于增强嵌入效果。基于DWT-SVD的算法通过嵌入奇异值矩阵实现水印隐藏,并支持分块处理和水印加密以提升安全性。该方法适用于抗噪声、抗缩放等常见攻击场景,并可通过验证测试其鲁棒性[1]。
[1] 数字水印常见攻击类型汇总,噪声,缩放,旋转,剪切(附matlab代码)_LLLLnannan的博客-博客

数字水印是一种通过修改图像像素值来嵌入隐秘信息的技术。由于其空间域实现往往难以抵抗多种类型的攻击干扰,在经过一般性攻击处理后难以准确定位和提取原始水印数据。鉴于此,在实际应用中通常偏好采用频域中的数字水印技术。
常用的频域算法主要包括离散余弦转换技术、小波转换方法以及傅里叶分析等基本手段。这些不同的转换方法虽然在具体实现上各有特点,并且还衍生出了许多新型的应用方法如快速小波转换算法以及Contourlet变换等复杂形式。尽管具体的转换方法不同但它们的基本原理和工作流程却存在内在的一致性。

这里单独介绍一下基于DWT-SVD的数字水印算法。

DWT(小波变换)
小波变换的基本定义及其实现过程不在本节详细展开(如需进一步了解,请参考其他相关资料)。
数字水印算法中涉及的小波变换知识简述如下:
1.通过小波分解技术将图像划分为LL(低频区域)、LH(水平高频区域)、HL(垂直高频区域)和HH(对角线高频区域)四个子带;
2.其中LL子带包含了图像的主要信息内容,并与原图几乎完全相同;
3.其余三个子带(LH、HL、HH)通常被视为图像中的冗余信息;
4.每个子带的尺寸均为原始图像尺寸的1/4。

在实际应用中

复制代码
 I=imread('lena.png');

    
 I=rgb2gray(I); 
    
 [LL,LH,HL,HH]=dwt2(I,'haar');
    
 figure,
    
 subplot(221);imshow(uint8(LL));title('低频');
    
 subplot(222);imshow(LH);title('高频水平');
    
 subplot(223);imshow(HL);title('高频垂直');
    
 subplot(224);imshow(HH);title('高频对角线');

一般情况下,在进行数字水印技术设计时, 会将目标水印信号嵌入到载体图像的低频分量中, 这种做法不仅能够有效提高水印的抗干扰能力, 而且还能增强其鲁棒性. 同样采用了嵌入水印至低频成分的技术, 后面的例子也是这一策略的具体体现.

SVD (奇异值分解)
SVD通常用来提取图像的特征值,实现降维、图像压缩。在数字水印技术中,也可以用来提高水印
1.图像经过SVD分解会得到三个矩阵,左奇异矩阵U,奇异值矩阵S和右奇异矩阵V;
2.奇异值矩阵为奇异值由大到小排列的对角矩阵;

一般情况下,我们会在进行水印奇异值分解后获得奇异值矩阵S,并将其叠加至载体图像上以完成水印的嵌入过程。

基于DWT-SVD数字水印

复制代码
 %% 水印嵌入

    
 I=imread('lena.png');                       %载入载体图像
    
 I=im2double(I);
    
 I=rgb2gray(I);                              %转为灰度图
    
 [LL,LH,HL,HH]=dwt2(I,'haar');               %载体图像dwt变换
    
 [U,S,V]=svd(LL);                            %低频分量SVD分解
    
 W=imread('digital.png');                    %载入水印图像
    
 W=im2double(W); 
    
 W=rgb2gray(W);                              %转为灰度图
    
 [Uw,Sw,Vw]=svd(W);                          %水印图SVD分解
    
 af=0.2;                                     %嵌入量
    
 S2=S+af*Sw;                                 %水印图的奇异值矩阵Sw以af嵌入量加到载体图像LL子代的奇异值矩阵S上
    
 LL2=U*S2*V';                                %嵌入后新的低频分量
    
 IW=idwt2(LL2,LH,HL,HH,'haar');              %dwt逆变换得到含水印图
    
 imwrite(IW,'watermarked.png');
    
 figure,
    
 subplot(221);imshow(I);title('载体图像');
    
 subplot(222);imshow(W);title('水印图像');
    
 subplot(223);imshow(IW);title('含水印图');
    
 %% 水印提取
    
 J=imread('watermarked.png');                %读取含水印图             
    
 J=im2double(J);
    
 [LL3,LH3,HL3,HH3]=dwt2(J,'haar');           %含水印图dwt变换
    
 [U3,S3,V3]=svd(LL3);                        %低频分量SVD分解
    
 S4=(S3-S)/af;                               %得到提取水印图的奇异值矩阵
    
 W2=Uw*S4*Vw';                               %SVD逆变换得到提取水印图
    
 subplot(224);imshow(W2);title('提取水印图');

这里的例子是经典的DWT-SVD数字水印算法;此外,我们可以通过将载体图像分割为块,并对水印图像应用预处理手段来提高该算法的安全性水平。

评估水印算法的抗干扰能力可以参考该博主的文章《数字水印常见攻击类型汇总、噪声、缩放、旋转、剪切(附Matlab代码)》(附Matlab代码)。下面将简要介绍基于DWT-SVD的数字水印算法及其MATLAB实现。

全部评论 (0)

还没有任何评论哟~