JPEG压缩学习笔记

JPEG压缩学习及其C语言实现笔记

JPEG压缩流程

1.颜色转换(RGB->YUV)

2.DCT变换 (分块8*8进行DCT变换)

3.量化(-996, 19, 0, 2,0, 0, 0, 0…)

4.编码 (游程编码,哈夫曼编码)

DCT变换(离散余弦变换)空间域到频率域的变换

“变换”的基本思想是,找一组基,让图像在这组基下能量集中(少量系数值较大,其余系数接近于0)。为了达到分离能量的目的,“变换”一般应是正交的。变换必须是可逆的(否则无法解码),因此变换本身不能压缩信息。不过随后的“量化”步骤将影响不大的系数略去,即可达到压缩的目的。

适合图像压缩的变换有很多种,如Karhunen-Loeve变换(KLT,即主成分分析)、离散傅立叶变换(DFT)、离散余弦变换(DCT)、Walsh-Hadamard变换(WHT)等。

JPEG采用8x8的2-D DCT作为其核心,该变换的定义是:

其中当u,v=0时,C(u),C(v)=1/root(2),否则C(u),C(v)=1。

在计算DCT之前,要把输入图像的像素值减去128,让它的取值范围从[0,255]移到[-128,127]。

每个8x8的分块经过DCT运算得到64个系数。其中,F(0,0)称为直流系数,其余的63个系数称为交流系数。在典型的连续色调图像中,相邻像素之间的差别往往不大。这意味着空间频率的幅值集中在低频部分。对典型的8x8图像分块而言,大多数空间频率的幅值是0或者接近于0,在编码时可以忽略。DCT本身并不会降低图像的质量,最多由于整数运算的舍入误差导致重构的图像与原始图像略有差别。

如果直接采用前面的公式进行计算,则每个DCT系数F(u,v)需要64次乘法,计算全部64个DCT系数则需要64x64=4096次乘法。计算DCT是整个JPEG压缩过程中最耗时的一步,很多人研究快速算法,也有人往CPU增加新指令,使之便于DCT运算。基本思路是把2-D DCT分解为1-D DCT,再利用余弦函数的对称性来减少计算量。每个分块的计算复杂度为O(1)。对于NxM的图像,共有[N/8]x[M/8]个分块,因此,DCT这一步的计算复杂度为O(MxN)。

系数量化

量化(quantization)是JPEG压缩过程中唯一会大幅损失信息的步骤。64个DCT系数会用8x8的量化表进行均匀量化,量化表中的每个元素是1到255之间的整数,表示对应的DCT系数的量化步长。量化的作用在于降低DCT系数的精度,从而达到更好的压缩率。量化是多对一映射,因此是有损的,它是基于变换的编码器中导致信息损失的主要步骤,也是用户唯一能参与控制压缩质量的步骤。

量化的过程是将每个DCT系数除以对应的量化步长,并四舍五入为整数:

反量化(dequantization)是把量化后的系数乘以对应的量化步长:

量化表理论上应该根据输入图像确定,目标是在基本不影响图像的视觉效果的前提下,尽量提高压缩率。量化步长越大,压缩率越大,图像质量越低。JPEG标准的正文中并没有规定或推荐使用哪个量化表,不过在Annex K中有一份量化表的例子(如下图所示),适用于大多数中等质量的图片。对于超高质量和超低质量的图片,这份量化表不是最优的。通常亮度分量和色差分量各有一张量化表,而且对色差分量的将忽略更多的高频成份。实际的JPEG实现都采用这一份量化表,因此后的数据中无须包含量化表。如果把下表中的量化步长除以2,那么图像质量就接近完美了。

每个分块有64个系数需要量化,需用64次除法和取整操作,因此每个分块的计算复杂度为O(1)。对于NxM的图像,共有[N/8]x[M/8]个分块,因此量化这一步的计算复杂度为O(MxN)。

Hoffman编码

JPEG文件的格式及组织形式

参见JPEG标准的 Annex BCompressed data formats

JPEGJointPhotographic Experts Group 的缩写,正是这个专家组制定了JPEG标准以及其他静态图片编解码标准。Joint(联合)是指ISO TC97 WG8(计算机与信息处理技术委员会8工作组)和CCITT SGVIII两个工作组的联合. 这个专家组在1992年颁布了第一个JPEG标准, ITU1992年命名为ITU-T Recommendation T.81,  ISO/IEC1994年命名为10918-1

 

注意JPEG标准仅仅说明定义了codec部分, 也就是图片如何压缩为字节流以及重新解码为图片的过程. 标准没有涉及到文件的存储格式

 

JPEG标准的附录B定义了文件格式"JPEG Interchage Format"(JIF), 不过这个文件格式很少被用到, 主要是因为EncodersDecoders完整实现JIF很困难, 此外这个标准还缺少以下几个方面:

  • Color space定义
  • Component sub-sampling 限制
  • 像素宽高比

因此其他的JPEG文件格式标准陆续出现了.1992年颁布了JPEG FileInterchange FormatJFIF),紧接着出现了Exchange imagefile format(Exif)ICC color profiles. 这些格式都符合JIF的字节layout,但是又增加了一些不同的markers.在某种程度上说,JFIFJIF标准的精简版本.

Exif JPEG文件格式主要用在摄像设备上,摄像产业把Exif作为行业的元数据交换格式.由于Exif标准不支持color profiles,所以大部分软件图像编辑软件使用JFIF格式存储JPEG码流.

不论是Exif还是JFIF格式,都遵守JPEG interchangeformat(JIF),他们都是由JPEG markercompressed data组成的.下面列出了JPEG的所有marker

表1 JPEG marker

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值