我正在用Java创建一个DCT隐写算法的实现,我遇到了一个小问题。当我将一条消息嵌入到封面图像中时,我是这样做的:首先获得特定8*8块的DC系数,然后根据嵌入的二进制消息替换最后一个等于0或1的系数。一旦它被嵌入到8x8块中,我就会通过反DCT来重新创建我的Stego对象。
但是,当我通过DCT传递Stego对象并恢复每个块的最后一个系数时,有时系数发生了变化,因此无法产生我最初嵌入其中的正确消息。
有没有人知道/明白为什么会发生这种情况,以及我如何解决它?
例如,嵌入式消息= 00 0 0 1001000 0 0111101 0 0 1 1 0101100101恢复消息= 00 1 1001000 1 0111001 1 01 0 0101100101
这只发生在一些图片上,但不是全部,我不知道发生了什么。我的程序在决定嵌入与否之前检查最后一个系数是否等于0。
发布于 2020-03-24 19:49:02
反DCT用于解压缩图像,但不必解压缩图像。如果你解压缩图像,我想你也会再次压缩它来读取DCT系数,至于JPEG是一种有损格式,一些DCT系数可能会改变它们的值。
但是JPEG并不是这样工作的。在JPEG中,DCT系数被压缩并保存到文件中。它是一个可视化工具,它解压图像以显示给用户。
https://crypto.stackexchange.com/questions/78414
复制相似问题