开发者学堂课程【高校精品课-华中科技大学 -智能媒体计算:JPEG(下)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/811/detail/15689
JPEG(下)
实例应用讲解
我们结合一个应用解释 JPEG 如何进行压缩,
比如一个8×8的图像块,知道色度的分量,因为有不同的取值。原始图像按照 JPEG 来讲,第一步进行正向的DCT变换也就是 FDCT 变换,DCT 变换之后产生了64个系数。
左上角的叫做 DC 系数也就是直流系数,之后的63个是交流系数。直流系数的值独树一帜,比其他的系数要大很多,而后面的交流系数距离直流系数越近,频率越低,值相对较大。
越往右下角走,频率越高,值也就越小。也就是说,高频部分,频率越高,对图像的贡献相对要小。
第二步是量化,这个量化表是心理视觉模型做实验做出来的,那么特定的频率应该取怎样的步长?FDCT 系数与量化表作除法就是量化之后的系数。
量化系数中有许多0,因为除以一个很大的数再四舍五入就是量化的系数,而这个系数中四舍五入有很多0,四舍五入之后的系数叫做规格化的系数。
规格化的系数要还原就要乘以量化步长,在 JPEG 中,就是以规格化的系数开始进行编码。
比如直流分量用 DPCM 编码,其他的交流分量使用 zigzag 编排也就是 z 字型编码,z 字型编码为了产生0的个数增多,从第一行第二列开始一个0,旁边有-1,发现只有一个0,后面五个0,再到第二行左边的时候变为2了,这样还是不连续。
而15、0、2,然后-1、-1、-1,这是 z 字型编排,然后是0、0、-1、0,再往下后面就是若干个0连续在一起,就形成长度编码,在最后再使用哈弗曼编码。
假定已经通过熵编码,最后组成了数据流,现在编程解码,解码依然从熵编码相应解码,解码之后因为是无损的可以完完全全还原成规格化的量化系数,量化系数继续解码乘以量化表,这两个相乘得到逆量化产生的系数。
因为规格化系数很多0,0乘任何数都是0,所以逆量化之后也有很多0,小的值就没有了。再对逆量化的系数实施逆向的 DCT 变换就得到了重构的8×8的图像。
对比压缩之前和还原之后的值相比对应的像素位置其实不完全相同,但是差别不大。
也就是说压缩之后还原产生的图像与原始图像很接近,但是通过一系列的编码大幅压缩了数据。大家做这个实验可以下载 matlab,可以将以上过程通过 matlab 进行重复,还可以输入不同的图像进行变换,加深对理论知识的理解。
课后思考一个问题,在计算机精度足够高的情况下,请问 JPEG 的每个步骤的计算中,哪些是有损的,哪些是无损的。




