使用隐写术将数据嵌入DWT子带系数中

时间:2015-01-05 12:02:16

标签: steganography dwt

我一直在研究DWT隐写术的主题。我在网上看到了以下代码。这是我第一次遇到指定的子带系数。我知道代码的作用但我希望有人来验证它!

steg_coeffs = [4, 4.75, 5.5, 6.25, 7];

for jj=1:size(message,2)+1
    if jj > size(message,2)
        charbits = [0,0,0,0,0,0,0,0];
    else
        charbits = dec2bin(message(jj),8)';
        charbits = charbits(:)'-'0';
    end

    for ii=1:8
        bit_count = bit_count + 1;

        if charbits(ii) == 1
            if HH(bit_count) <= 0
                HH(bit_count) = steg_coeffs(randi(numel(steg_coeffs)));
            end
        else
            if HH(bit_count) >= 0
                HH(bit_count) = -1 * steg_coeffs(randi(numel(steg_coeffs)));
            end
        end
    end

我认为steg_coeffs是HH子带的选择系数,其中比特将嵌入这些选定的系数中。我用google搜索randi并相信它会在循环的每次迭代中随机化这些指定的系数并嵌入随机选择系数中。我是对的?谢谢

1 个答案:

答案 0 :(得分:0)

键入help randi,您会发现randi(IMAX)将返回一个标量,该标量将是1:IMAX范围内均匀分布的整数(基于prng)。简而言之,它选择1到IMAX之间的随机整数。

numel(matrix)返回矩阵中元素的总数。

因此,steg_coeffs(randi(numel(steg_coeffs)))通过选择1到5之间的随机索引,从steg_coeffs中选择一个随机元素。

嵌入算法在以下块中实现。

if charbits(ii) == 1
    ...
else
    ...
end

基本上,如果你要嵌入1,HH系数必须是正数。如果不是,请将其替换为steg_coeffs中的一个。同样,如果您嵌入0,则HH系数必须为负数。如果不是,请将其替换为steg_coeffs中的否定值。

这个想法是,当你提取秘密时,你需要检查的是HH系数是正还是负,才能知道该位是1还是0。