图像隐写术的阈值函数生成

Threshold function generating for Image Steganography

我正在用 C# 开发一个项目,实现了一个 research paper。现在我遇到了问题,我用这张图片给两位作者发了一封邮件,但没有人回复

对计算阈值的摘要算法有什么建议吗?

也难以理解研究论文的映射功能

Research paper 2 我认为两者都是一样的,只是有一点点变化..

你所处的情况很不幸。两篇论文都缺乏清晰度和所有相关信息,无法完全复制该过程。较旧的论文甚至承认(第 4 节,第 IX 步)。

无论如何,我们可以自己做一些澄清和侦探工作。

  • T先计算C.
  • 使用T计算C没有歧义。

阈值算法中的 C 很可能是 Ch 的拼写错误。在最近的论文中,第 II 部分的第 1 步指出,阈值计算取决于消息中的字符数。此外,在较旧的论文中,他们将字符数分配给 C。考虑到两篇论文之间的重复量,如果他们忘记将 C 更改为 Ch 也就不足为奇了。不幸的是,他们没有提供计算因子(相关论文中的阈值)的算法,但我们可以假设他们至少在未发表的地方写下了它,他们复制了新论文以描述阈值算法。

说到 X,你就倒霉了。我在论文的任何地方都没有找到它的其他参考资料,并且考虑了阈值函数的所有输入(Ch:字符总数,PL:密码,PM:密钥)。这让我猜测...如果...XC 的错字怎么办,因为它们在键盘上彼此相邻?这也与算法 returning 值不大于 9 一致。除了怀疑所有 mod 9 操作在整个过程中乱七八糟之外,旧论文明确这样说(第 4 节,第 IX 步) :

Generally factor value lies within the range 2 to 9 because practical experiment shows that above this value, the time taken by the block mapping function is too much and output values goes beyond the range.

总的来说,我推测正确的算法是这样的:

T = Ch % 9
T = T + PL
T = T % 9
T = T + [(9-Ch)((PL-PM)/PL)

但是,还有最后一点。 (PL-PM)/PL可以return一个浮点数。如果你使用整数除法或 floor 函数(两者等价),该算法 几乎 与给出 2 到 9 之间的值一致。事实上,我得到的值介于 0 到 8 之间,但你可以将它们移动一位以获得范围 1-9。

如果一切都失败了,我可以建议你在可接受的范围内随机生成一个 T 的值吗?只要该值的生成不会造成算法的任何内部不一致,即 T 必须 按照论文中的描述进行计算,否则后面的一些步骤将不会功能正常,你应该没问题。


关于Bi的映射函数,公式7非常清楚这个函数是什么。示例(第 47 页)的第 10 步中描述的表格的不一致源于错别字和论文中途重新定义变量。明确地说,F是T的错别字,u与C相同,是unit的大小。由于一些愚蠢的原因(可能是因为它在旧论文中被定义为这样),他们在示例的第 3 步中使用 u 而不是 C。并且是T的i次方乘以C的i次方,即Math.Pow(T,i) * Math.Pow(C,i).

如果我在这一点上表达我的意见,他们定义映射函数的方式对我来说没有说服力。他们说函数的特点必须是生成的数字必须在 1 和 B 之间,其中 B 是高度和宽度分割后图像中的块数。他们还说一定不能发生冲突,否则你最终会两次嵌入到同一个块中,从而覆盖以前隐藏的信息。这些特征是合法且必要的,但它们的实施和关于什么 最有效 的论证是有问题的。无需重新发明轮子,尤其是随机数生成函数,因为你不能保证彻底调查它确实满足你的要求。

我会简单地生成一个数字 1、2、3、...、B 的列表,然后将其洗牌。它保证没有数量超过限制,不会发生碰撞,你也保证随机顺序。最流行的洗牌算法是 Fisher-Yates。 Here is an implementation in C#. To ensure both the embedding and extraction processes generate the same randomised order, you can initialise the PRNG with the same seed, which in this case can be the password shared between both parties. Since the seed must been an integer and the password is string, just hash它。