【问题标题】:DCT operating on pixel values between -128 to +127DCT 对 -128 到 +127 之间的像素值进行操作
【发布时间】:2012-12-14 05:52:20
【问题描述】:

为什么 DCT(离散余弦变换)在 JPEG 压缩中要在像素值 -128 到 127 之间进行操作?

为什么在对图像应用 DCT 之前对像素值进行水平偏移(减去 128)

【问题讨论】:

    标签: image-processing signal-processing


    【解决方案1】:

    你读过Wikipedia吗?

    使用归一化的二维 II 型离散余弦变换 (DCT) 将每个分量(Y、Cb、Cr)的每个 8×8 块转换为频域表示。

    在计算 8×8 块的 DCT 之前,它的值从一个正范围转移到一个以零为中心的范围内。对于 8 位图像,原始块中的每个条目都在 [0, 255] 范围内。从每个条目中减去范围的中点(在本例中为值 128)以生成以零为中心的数据范围,因此修改后的范围为 [-128, 127]。

    此步骤降低了后续 DCT 处理阶段的动态范围要求。 (除了 DCT 阶段动态范围的差异之外,这一步在数学上相当于在执行变换后从 DC 系数中减去 1024——这可能是在某些架构上执行操作的更好方法,因为它只涉及执行一次减法而不是 64 个)。

    【讨论】:

      【解决方案2】:

      这就是我所理解的..假设没有完成水平偏移,那么如果我们在这个矩阵上取 DCT,DC 值(比如 X)将是一个更大的数字,因为所有像素值是积极的。当对图像像素值进行电平偏移时,一些像素值将是负的,一些像素值将是正的。稍后当我们对结果矩阵进行 DCT 时,DC 值(比如 Y)现在不会像以前那样是一个更大的数字,即 Y 。因此存储此数据 Y 所需的位数将少于 X 所需的位数。

      因此需要进行电平偏移,并且 DCT 旨在在像素值 -128 到 127 之间进行操作

      【讨论】:

        【解决方案3】:

        在应用 DCT 之前,像素的 RGB(红、绿、蓝)值在 0-255 范围内。为了使值以 0 为中心(因为很容易找到值的余弦),我们将其减去 128。

        请访问http://www.whydomath.org/node/wavlets/basicjpg.html 以供参考。

        或者你可以这样理解。 [0,255] 有 256 个值。 256/2 = 128。以 0 为中心,范围变为 [-127,127]。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-11-15
          • 1970-01-01
          • 2015-03-11
          • 1970-01-01
          • 1970-01-01
          • 2018-06-09
          • 1970-01-01
          • 2013-09-08
          相关资源
          最近更新 更多