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