0

我一直在做更多关于 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,并相信它会在循环的每次迭代中随机化这些指定的系数并嵌入随机选择系数中。我是对的??谢谢

4

1 回答 1

0

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

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

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

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

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

基本上,如果您要嵌入 1,则HH系数必须为正。如果不是,请将其替换为steg_coeffs. 同样,如果您要嵌入 0,则HH系数必须为负。如果不是,则将其替换为来自 的负数steg_coeffs

这个想法是,当您提取秘密时,您只需检查HH系数是正还是负,以了解该位必须为 1 还是 0。

于 2015-01-05T13:06:50.597 回答