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

时间:2015-01-28 10:57:32

标签: steganography dwt

我正在尝试提取使用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

1 个答案:

答案 0 :(得分:0)

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

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

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

  • 使用无损压缩方案,例如png或zip。
  • 使用不同的隐写算法,该算法对jpeg压缩很有效。

额外:您的解码过程仅循环一次的原因是因为前几个HH系数之一为0,导致提前终止。要么是,要么前8个系数是负数,这导致提取的字符为0,这是你的消息条件的结束。