使用隐写术将数据嵌入 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 子带的选定系数,其中位将嵌入到这些选定的系数中。我已经用谷歌搜索了randi,并相信它会在循环的每次迭代中随机化这些指定的系数,并嵌入到随机选择的系数中。我是对的??谢谢

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

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

所以,steg_coeffs(randi(numel(steg_coeffs)))steg_coeffs中选择一个随机元素,通过选择一个介于 1 和 5 之间的随机索引。

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

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

基本上,如果要嵌入 1,则HH系数必须为正数。如果不是,请用 steg_coeffs 中的一个替换它。同样,如果要嵌入 0,则HH系数必须为负数。如果不是,请用 steg_coeffs 中的负数替换它。

这个想法是,当你提取秘密时,你所要做的就是检查HH系数是正数还是负数,知道位必须是 1 还是 0。

相关内容

  • 没有找到相关文章

最新更新