5

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

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

4

3 回答 3

3

你读维基百科吗?

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

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

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

于 2012-12-29T03:44:01.390 回答
1

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

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

于 2013-01-12T16:31:01.390 回答
0

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

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

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

于 2016-11-07T09:26:14.563 回答