【信号隐藏-数字水印】基于奇异值分解svd实现音频水印嵌入提取含攻击附Matlab代码

该博客介绍了一种使用Arnold变换加密并结合奇异值分解(SVD)嵌入数字水印的方法。通过加密水印图像并将其无痕地嵌入待加水印图像,增强了水印的抗攻击性。提供的MATLAB代码实现了水印的加密、嵌入和解密过程,可用于图像保护。

1 内容介绍

提供一种基于奇异值分解的数字水印的嵌入和提取方法及系统,包括:获取水印图像和待加水印图像;基于所述待加水印图像,对所述水印图像进行加密,得到加密水印图像;基于奇异值分解,将所述加密水印图像嵌入到所述待加水印图像中,得到加水印图像;对应存储待加水印图像,加水印图像,以及基于奇异值分解得到的所述待加水印图像的加密向量.本发明通过根据待加水印图像,对水印图像进行加密,使得加密水印图像可分散分布在整个待加水印图像上,进一步基于奇异值分解,将所述加密水印图像嵌入到所述待加水印图像中,实现数字水印的无痕嵌入到待加水印图像中,从而可避免通过裁剪等方法将数字水印删除.

2 仿真代码

function M = Arnold(Image,Frequency,crypt)

%图像数值矩阵Arnold转换函数

%输入参数

%   Image:    待加密(待解密)图像文件名(注意写格式后缀),只能为二维

%   Frequency:   图像需要变换迭的次数

%       crypt           0~加密;1~解密

%输出参数

%   M:     转换后图像数据矩阵

%            输出由M对应的图像文件

if nargin<3

    disp('请按程序的输入参数格式输入参数!!!');

    return;

end

if crypt~=0 & crypt~=1

    disp('encrypt 必须为0或1!');

end

%将Q赋值给M,计算Q的大小

Q=Image;

M = Q ;

Size_Q   = size(Q);

%如果不是二维或三维数组,则不处理,返回

if (length(Size_Q) <= 2)

   if Size_Q(1) ~= Size_Q(2)

      disp('不是方阵,不能Arnold转换');

      return

   end

else

   disp('不是二维数组,不进行Arnold变换');

   return

end

    %------------------------------------------

   %Arnold转换

   n = 0;

   K = Size_Q(1);

  

   M1_t = Q;

   M2_t = Q;

  

   if crypt==1   %解密

       Frequency=ArnoldPeriod( Size_Q(1) )-Frequency;

   end

      

   for s = 1:Frequency

       n = n + 1;

       if mod(n,2) == 0

            for i = 1:K

               for j = 1:K

                  c = M2_t(i,j);

                  M1_t(mod(i+j-2,K)+1,mod(i+2*j-3,K)+1) = c;

               end

            end

       else

            for i = 1:K

               for j = 1:K

                   c = M1_t(i,j);

                   M2_t(mod(i+j-2,K)+1,mod(i+2*j-3,K)+1) = c;

               end

            end

       end

   end

  

   if mod(Frequency,2) == 0

      M = M1_t;

   else

      M = M2_t;

   end

   %------------------------------------------

   %imwrite( double(M)/255,strcat( 'Arnold_',num2str(Frequency),'_',Image ),'bmp' );

%    imshow(M);

   

   function Period=ArnoldPeriod(N)

% 求周期

if ( N<2 )

    Period=0;

    return;

end

n=1;

x=1;

y=1;

while n~=0

    xn=x+y;

    yn=x+2*y;

    if ( mod(xn,N)==1 && mod(yn,N)==1 )

        Period=n;

        return;

    end

    x=mod(xn,N);

    y=mod(yn,N);

    n=n+1;

end

3 运行结果

4 参考文献

[1]杜康华, 任文越, and 王崇. "一种基于奇异值分解的数字水印的嵌入和提取方法及系统.", 2018.

[2]刘广起, 郑晓势, 赵彦玲. 基于奇异值分解的DCT域音频数字水印算法[J]. 电声技术, 2010(3):5.​

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值