【问题标题】:Steganography using the DCT使用 DCT 的隐写术
【发布时间】:2014-04-18 23:18:23
【问题描述】:

一般来说,使用 DCT 嵌入消息涉及 4 个步骤:

  1. 将图像分成 8x8 块
  2. 使用 DCT 数学运算转换每个块
  3. 量化每个 DCT 块(有损压缩)
  4. 从量化系数中嵌入消息位(避免使用 0、1、-1 和 AC)

没关系,但我不确定如何提取数据。您是否假设要通过步骤 1-3 量化每个块以提取每个系数的 LSB?

如果是这种情况,您会不会因为这是一种有损技术而丢失(可能是嵌入的数据)数据?

此外,当我尝试量化每个块时,我得到的系数与前一张图像相同(因为 LSB 更改没有影响)??

有人能告诉我这个问题吗?

谢谢

【问题讨论】:

    标签: java text jpeg steganography dct


    【解决方案1】:

    消息的嵌入发生在有损压缩之后——不可能丢失消息,因为已经执行了丢失数据的步骤(除了实际的嵌入,它只丢失图像数据,将其替换为您的信息)。理想情况下,您可以直接从系数本身中提取消息——也就是说,在提取过程中不涉及解压缩。

    【讨论】:

    • 你的意思是只是转换每个块,然后提取它的 LSB。因此不要量化它们?
    • 发生量化是因为 JPEG 压缩需要量化。编码端没有任何 LSB 提取——它是 LSB 替换。
    • 好的,只是为了清除它。您嵌入量化的系数(步骤 3),然后提取 DCT 系数(仅到步骤 2)?再次感谢(只是我不认为量化的系数与去量化的系数具有相同的 LSB)
    • 我认为这里仍然存在一些混乱。步骤 1-4 仅涉及嵌入消息,步骤 1-3 只是基本的 JPEG 压缩。也就是说,您进行完全标准的 JPEG 压缩,然后对 已经 DCT 处理的图像进行隐写术。然后,在接收端,您从 JPEG 系数本身中提取信息。也就是说,提取过程不需要执行任何类型的 DCT 操作。它只是读取位。
    • 啊。看看我目前正在做的是,在所有步骤之后,我对每个块进行去量化,然后应用逆 DCT 来带回像素数据,然后将其存储为像素。这不是正确的方法吗?因为在接收端,经过隐写处理的图像随后被转换为 DCT 系数以进行提取(但现在这似乎是错误的)。对所有这些混乱感到抱歉
    【解决方案2】:

    当您将 DCT 块与量化矩阵相乘时,您很可能会在大空间频率下得到非常大的数字 - 图像会变得嘈杂。但是随后您需要对系数进行归一化,以使任何像素的任何值都不会超过 [0..1] 范围( [0..255] ),归一化后您可能会丢失一些信息。

    【讨论】:

    • 归一化系数是什么意思?
    • @DouglasGrealis,在浮点数中返回图像,将所有像素标准化为边界,然后重新编码为 JPEG。
    猜你喜欢
    • 2020-03-12
    • 1970-01-01
    • 2016-05-25
    • 2012-06-08
    • 2021-12-08
    • 2011-01-01
    • 2014-07-11
    • 2018-08-01
    • 2013-03-17
    相关资源
    最近更新 更多