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

转载自:https://segmentfault.com/q/1010000000510683   多谢

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

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

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

默认排序时间排序

3个回答

答案对人有帮助,有参考价值2答案没帮助,是错误的答案,答非所问

1

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

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

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

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

2

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

From wiki

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

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

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

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

3

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

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

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

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

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

lohocla4dam562 声望

答案对人有帮助,有参考价值0答案没帮助,是错误的答案,答非所问

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

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

UP1 声望

答案对人有帮助,有参考价值0答案没帮助,是错误的答案,答非所问

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

CT image compression (a) Implement the simplified DCT compression process above for n = 2, 4, and 8 and apply it to the attached image. Show the reconstructed images for these three different cases. [3 images] Compute the PSNR values of the three reconstructed images and discuss what the PSNR value means here. (b) Use the same process in (a) with image transformed to YIQ color model and show the reconstructed image in RGB space. [3 images] Compute the PSNR values of the three reconstructed images and discuss what the PSNR value means here. Dithering 2. Dithering (30%) Convert the image cat2_gray.png to binary (black and white) image with different methods of dithering, show the results, and make some comparison with the results. (a) Apply noise (random) dithering on the provided image and show the result. [1 image] (b) Apply average dithering on the provided image and show the result. [1 image] (c) Apply error diffusion dithering (Floyd-Steinberg algorithm) on the provided image and show the result. [1 image] Image Interpolation Implement the image interpolation function to upsample an image to four times the original width and height. Implement the following two different interpolation methods and show the 4× upsampled images. (a) Apply nearest-neighbor interpolation on the low resolution image, cat3_LR.png, and compute the PSNR with the original high resolution image, cat3_HR.png. [1 image] (b) Apply bilinear interpolation on the low resolution image and compute the PSNR with the high resolution image. [1 image] (c) Apply bicubic interpolation on the low resolution image and compute the PSNR with the high resolution image. [1 image]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值