DCT隐写术

信息处理 图像处理 图片 dct 隐写术
2022-02-05 07:32:28

我正在尝试实现一个简单的隐写算法(类似于 JSteg 算法),用于在 Matlab 中将数据隐藏在 DCT 系数的 LSB 中,我遇到了一个问题。

一种。我申请 DCT。

湾。修改除第一个以外的不同于 1 和 0 的系数的 LSB

C。应用逆 dct

现在我必须将结果块保存到输出图像文件中,并且在从 double 到 int 的舍入过程中,一些系数丢失了,并且在提取阶段我没有获得确切的系数。

我查看了 JSteg 的 C 源代码,它的 DCT 实现基于 C. Loeffler、A. Ligtenberg 和 G. Moschytz 描述的算法"Practical Fast 1-D DCT Algorithms with 11 Multiplications"这个程序可以正常工作,所以我想知道实现它是否也能解决我的问题?

如果有另一种方法来处理舍入问题?

谢谢

1个回答

每当您进行逆 DCT 变换以返回图像时,您将获得浮点结果。这是不可避免的。假设您使用的图像格式需要整数值(不是图像人,所以我不确定是否有任何格式允许浮点值 - 可能不是),那么舍入是不可避免的。舍入意味着丢失信息,这意味着使用您描述的方法无法避免DCT LSB受到影响的可能性。

您可以通过对 DCT 值进行较大更改来恢复有意义的信息,但这也意味着对图像的更改会更大。您也许可以通过使用前向纠错 (FEC) 代码来恢复有用的信息,但您需要更好地了解错误特征才能回答这个问题。

编辑:我对JPEGJSTEG做了一些研究,我认为(尽管我可能会弄错)你误解了正在发生的事情。JSTEG 适用于 JPEG 文件。为了进行压缩,JPEG 编码器 DCT 转换图像(从亮度/色度模型开始,而不是 RGB)并保留所有亮度信息,同时基本上丢弃除低频色度信息之外的所有信息。 这用作压缩,因为文件存储 DCT 值,而不是直接图像值(它比这更复杂一点,但足够接近本次讨论的真相)。因此,逆变换消除 LSB 的事实并不重要。事实上,这可能是一个加分项。出于隐写术的目的,您从文件本身而不是解码图像中获取隐写术位。因此,隐藏位的接收者可以使用其 LSB 有效负载访问 DCT 值。