0

我正在研究隐写术/水印领域。我对此很陌生,所以请多多包涵!我在这里找到了一篇很棒的帖子如何将一些文本信息封装在图像中并使用 MATLAB 提取它?使用 LSB 方法,我可以接受!我想问的问题是,可以修改链接中使用的代码以使用 LSB 隐藏 DWT 转换中的数据。如果是这样,我将如何尝试,正如我所说,我对此很陌生。我会得到四个子带吗?我想嵌入哪个子带(即 LH_1)只需更改代码,例如,将 L 指定为封面图像,我会将 L 更改为 LL_1 吗?

如果我让任何人对这个问题感到困惑,我很抱歉。但我需要帮助才能知道!十分感谢

编辑

%Cover Image
origIm = imread('lena.bmp');


% Discrete Wavelet Transform
[LL LH HL HH]=dwt2(origIm,'haar');
dec=[...
    LL,LH
    HL,HH
    ...
    ];

%figure;imshow(dec,[]);title ('DWT');
%[visibleRows visibleColumns] = size(origIm);

A = importdata('minutiaTest.txt');
binaryString = transpose(dec2bin(A,8));
binaryString = binaryString(:);
N = length(binaryString);

b = zeros(N,1); %b is a vector of bits
   for k = 1:N
       if(binaryString(k) == '1')
              b(k) = 1;
       else
              b(k) = 0;
       end
   end
%c=HH;   
s = HH;
%figure (1);imshow(s);
height = size(HH,1);
width = size(HH,2);

k = 1; Array=[];l=1;my=1;
   for i = 1 : height
       for j = 1 : width
           LSB = mod(double(HH(i,j)), 2);
             if (k>N || LSB == b(k))
                s(i,j) = HH(i,j);
                    l=k+1;
             else 
       if(LSB == 1)
           s(i,j) = HH(i,j) - 1;
       else
           s(i,j) = HH(i,j) + 1;
             Array(my)=l;
                l=l+1;
                    my= my + 1;
       end
                          k = k + 1;
     end
   end
   end


  %figure (2); imshow(s);

  stego=idwt2(LL,LH,HL,HH,'haar');
  imwrite(uint8(stego), 'hiddenmsgimage.bmp');
  %imshow(stego);



  Stego = imread('hiddenmsgimage.bmp');
  %imshow(Stego);


 [LL LH HL HH]=dwt2(Stego,'haar');
dec=[...
    LL,LH
    HL,HH
    ...
    ];
%imshow(HH);
%figure;imshow(dec,[]);title ('DWT');
k = 1;my=1;ur=1;
for i = 1 : height
  for j = 1 : width
    if( k<=N )
      if (my<numel(Array) && Array(my)==ur)
         b(k)=~(mod(double(s(i,j)),2));
      else
         b(k) = mod(double(s(i,j)),2);
      end
    k = k + 1;
    my= my + 1;
 end
 ur=ur+1;
  end
end

好的,这就是我到目前为止所做的。我现在正在尝试提取我隐藏的数据,有人可以帮忙吗?

4

0 回答 0