天天看點

【信号隐藏-數字水印】基于奇異值分解svd實作音頻水印嵌入提取含攻擊附Matlab代碼

1 内容介紹

提供一種基于奇異值分解的數字水印的嵌入和提取方法及系統,包括:擷取水印圖像和待加水印圖像;基于所述待加水印圖像,對所述水印圖像進行加密,得到加密水印圖像;基于奇異值分解,将所述加密水印圖像嵌入到所述待加水印圖像中,得到加水印圖像;對應存儲待加水印圖像,加水印圖像,以及基于奇異值分解得到的所述待加水印圖像的加密向量.本發明通過根據待加水印圖像,對水印圖像進行加密,使得加密水印圖像可分散分布在整個待加水印圖像上,進一步基于奇異值分解,将所述加密水印圖像嵌入到所述待加水印圖像中,實作數字水印的無痕嵌入到待加水印圖像中,進而可避免通過裁剪等方法将數字水印删除.

【信号隐藏-數字水印】基于奇異值分解svd實作音頻水印嵌入提取含攻擊附Matlab代碼

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 運作結果

【信号隐藏-數字水印】基于奇異值分解svd實作音頻水印嵌入提取含攻擊附Matlab代碼

4 參考文獻

部落客簡介:擅長智能優化算法、神經網絡預測、信号處理、元胞自動機、圖像處理、路徑規劃、無人機等多種領域的Matlab仿真,相關matlab代碼問題可私信交流。

部分理論引用網絡文獻,若有侵權聯系部落客删除。