Steganography 压缩应用于图像后无法提取嵌入的隐藏消息?

Steganography 压缩应用于图像后无法提取嵌入的隐藏消息?,steganography,dwt,Steganography,Dwt,我试图提取使用DWT隐写术隐藏的隐藏数据。然后,当我应用压缩时,什么也没有发生! 我使用了下面的代码来压缩我的.bmp图像,但在应用压缩后没有提取隐藏消息。我试着在调试器中运行,在只循环了一次之后,它似乎跳到了代码的末尾。对这个问题有什么想法吗。在应用压缩之前,数据被很好地提取出来 %%%%%%%%%%%%%%%%%%DECODING%%%%%%%%%%%%%%%%%%%%%%% %clear; filename='newStego.bmp'; stego_image=imread(filena

我试图提取使用DWT隐写术隐藏的隐藏数据。然后,当我应用压缩时,什么也没有发生! 我使用了下面的代码来压缩我的.bmp图像,但在应用压缩后没有提取隐藏消息。我试着在调试器中运行,在只循环了一次之后,它似乎跳到了代码的末尾。对这个问题有什么想法吗。在应用压缩之前,数据被很好地提取出来

%%%%%%%%%%%%%%%%%%DECODING%%%%%%%%%%%%%%%%%%%%%%%
%clear;
filename='newStego.bmp';
stego_image=imread(filename);
compression=90;
file_compressed=sprintf('compression_%d_percent.jpg',compression);
imwrite(imread(filename),file_compressed,'Quality',compression);
new_Stego = double(imread (file_compressed));
[LL,LH,HL,HH] = dwt2(new_Stego,'haar');

message = '';
msgbits = '';
for ii = 1:size(HH,1)*size(HH,2)
    if HH(ii) > 0
        msgbits = strcat (msgbits, '1');
    elseif HH(ii) < 0
        msgbits = strcat (msgbits, '0');
    else
        return;
    end

    if mod(ii,8) == 0
        msgChar = bin2dec(msgbits);
        if msgChar == 0
            break;
        end
        msgChar = char (msgChar);
        message = [message msgChar]; 
        msgbits = '';


       disp(message);

    end


end
%
%清晰;
filename='newStego.bmp';
stego_image=imread(文件名);
压缩=90;
file\u compressed=sprintf('compression\u%d\u percent.jpg',compression);
imwrite(imread(文件名),压缩文件,'Quality',压缩);
new_Stego=double(imread(file_compressed));
[LL,LH,HL,HH]=dwt2(new_Stego,'haar');
信息=“”;
msgbits='';
对于ii=1:尺寸(HH,1)*尺寸(HH,2)
如果HH(ii)>0
msgbits=strcat(msgbits,'1');
elseif HH(ii)<0
msgbits=strcat(msgbits,'0');
其他的
返回;
结束
如果mod(ii,8)=0
msgChar=bin2dec(msgbits);
如果msgChar==0
打破
结束
msgChar=char(msgChar);
message=[message msgChar];
msgbits='';
disp(信息);
结束
结束

您的压缩方案是有损的,这意味着您在压缩数据时会不可逆转地丢失一些信息

具体来说,jpeg压缩将像素数据转换为频域,并将许多高频分量归零。DWT详细系数(LH、HL和HH)与频率系数有一些相似之处,因此将受到这种压缩的强烈影响(HH系数更是如此)。请记住,即使是100%质量的jpeg压缩也是有损的,但失真自然会最小化

如果仍要压缩数据,则必须以不破坏嵌入信息方式的方式进行压缩。您有两个选择:

  • 使用无损压缩方案,例如png或zip
  • 使用另一种对jpeg压缩具有鲁棒性的隐写算法
Extra:解码过程仅循环一次的原因是前几个HH系数中的一个为0,导致过早终止。或者,前8个系数为负数,这将导致提取的字符为0,这是消息结束条件