JPEG的DCT压缩原理,谁能通俗易懂解释一下?

看了这篇博文http://blog.csdn.net/jubincn/article/details/6882179,对JPEG的压缩原理还是有点模糊:

1.JPEG经过离散余弦处理后为什么就能压缩图片大小?
2.JPEG图片到底存储的是什么,压缩后减少的是什么?
3.对每个像素点进行离散余弦变换,是每个像素点的R、G、B值分别进行吗?

上面问题虽然很菜,还是希望大大们不吝赐教,感激不尽。

阅读 33.7k
3 个回答

1

首先人眼对低频敏感对高频不敏感,而维基百科里说了

由于离散余弦变换具有很强的"能量集中"特性:大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分

所以可以省去离散余弦变换后矩阵里的高频部分来对图像进行压缩,这是JPEG的主要原理。

那么什么是高频部分?对于一个矩阵
a
对其离散余弦变换后并舍位取最接近的整数,得
dct(a)
可以看到矩阵每个元素的绝对值是从左上角到右下角越来越小的,其中左上角称为DC系数,是整个矩阵的平均值。其余的称为AC系数。越靠近右下角,其对应的频率越高。那么根据人眼对低频敏感对高频敏感这个原理,省掉右下部分的一些值的话,对人眼来说,看起来实际上是没什么区别的。

2

对一个图像的矩阵DCT之后,需要对它进行量化。这方面我不是很熟悉。

From wiki

简单地把频率领域上每个成份,除以一个对于该成份的常数就可完成,且接着舍位取最接近的整数。这是整个过程中的主要有损运算。以这个结果而言,经常会把很多更高频率的成份舍位成为接近0,且剩下很多会变成小的正或负数。

对1中的结果进行量化的结果如图
c

接下来对这个矩阵使用熵编码,最后存的就是熵编码再二进制编码(总不可能直接以文本的形式存储熵编码吧)之后的东西。

回答1里说了,压缩减少的是高频区域上的信息量。

3

不可能对一个像素点进行离散余弦变换的,没有意义。你的原文里也说了,是将矩阵分为8x8的块,分别进行DCT、量化、熵编码。

对于第二个问题,简单的回答是是。但是维基百科说

图像由RGB(红绿蓝)转换为一种称为YUV的不同色彩空间。... 。这种编码系统非常有用,因为人类的眼睛对于亮度差异的敏感度高于色彩变化。使用这种知识,编码器(encoder)可以被设计得更有效率地压缩图像。

然后在DCT过程中对每个成分(Y,U,V)分别使用离散余弦变换和余下的步骤。

时间仓促,错误之处请不吝指正。

新手上路,请多包涵

1,首先说一下存储的是什么,这个问题解决后自然就可以明白为何文件变小,也就是压缩。
简单说jpeg存储的是DCT后模矩阵的系数。那模矩阵又是什么呢,看图
图片描述

如果显示出所对应的色块的话,是这样的!

图片描述
借助2楼的矩阵我们来看一下,第三个矩阵既是系数矩阵,也就是jpeg存储的,为什么右下角大部分都是零?因为模矩阵右下角是高频嘛,画成函数图像就是超级密集的cos波形,最右下角达到了7pi/16,不是说这么细小的地方我们把它忽视,而是JPEG在yuv采样的时候也达不到如此精细。

2,知道存储的是系数我们回到第一个问题,为啥就压缩了呢,为了便于理解咱们先把霍夫曼算法放一边,简单说一下压缩这个概念,以游程编码为例,10000010001001000100这么一串数如果写成,51 150的话是不省地方,解码器一看,啊就是TM5个1,15个0啊,当然真正游程编码还要分段这里就打个比方。霍夫曼编码又有自己的思想,查一下就知,但是那个树状图也是1,0构成。

3,这里纠正下楼主,一般jpeg是把图像分块,每个区是8*8,越保真的分的块越多,当然文件大小也变大,保真和大小是鱼和熊掌不可兼得。所以是以矩阵的形式做dct至于图层是以RGB还是YUV,发明者说他们是以YUV做的。最后附上发明者解说视频https://www.youtube.com/watch?v=Q2aEzeMDHMA

新手上路,请多包涵

1.DCT变换只是将空间域的像素点转换成频率域而已,压缩是靠哈弗曼压缩技术。
这里就要说一下信号与系统,当一些信号在当前信号域下不好处理的时候,可以转换到别的域处理。像素点所在的是空间域,如果通过离散余弦变换(DCT)之后,转换到频率域。在这个信号域下处理更方便。类似的变换方式还有 离散傅里叶变换,小波变换等。这些个变换在去噪、滤波方面用的多。
而压缩图片大小的根本方式是哈弗曼编码,如果你知道这个编码就好办,如果不知道我就简单说一下。这个事可证明的,效率最高的压缩方式。对单个字符按照频率编码长度,比如使用频率最高的字符a就可以直接编写为2进制01两位,频率最低的x可能编码超过一个字节,比如0001010101总共10位二进制位。但是这样的总码长是最短的。通过这样的方式给每个DCT系数编码,这样处理来压缩数据大小。
2.存储的是DCT系数表,不过这个DCT系数表是用Huffman编码之后存储的。Huffman编码分为两部分,一个是编码表,另外的一个是编码数据。当然JPEG图片不可能只存储这些东西,其他的内容,你可以看一下jpeg图像格式,知道具体分为哪些部分,就明白了。
3.对的。是分别进行的。

我也是一知半解,希望我的回答能够解答你最基础的疑惑。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏