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

1

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

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

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

那么什么是高频部分?对于一个矩阵

b2c111d8f9a9f5305c6497619bb94a0d.png

对其离散余弦变换后并舍位取最接近的整数,得

f6aa963e132900ba94c414e6e9686924.png

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

2

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

From wiki

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

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

e2059420b0773c8b01725290d4fb69aa.png

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

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

3

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值