【数据压缩】JPEG原理分析及JPEG解码器的调试

本文深入解析JPEG图像压缩原理,包括颜色空间转换、离散余弦变换(DCT)、量化编码、熵编码等步骤。同时,介绍了JPEG文件格式的组成,如DQT、DHT标记段,并分享了实验过程,包括量化矩阵和霍夫曼码表的输出与验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.实验原理

1,JPEG原理

  JPEG是常见的一种图像格式,由ISO与CCITT建立并开发,是一个国际数字图像压缩标准。JPEG文件的扩展名为.jpg或.jpeg,其压缩技术十分先进,用有损方式去除冗余的图像与彩色数据,在获取极高的压缩率同时能展现十分生动的静态图像,JPEG被认为是目前压缩比最高的静态图像,它被广泛地应用于多媒体与网络程序中。
  根据人眼视觉特性:眼睛对亮度的敏感程度要大于对色彩的敏感程度。在图像中,为了利用人类的种视角特性,从而降低数据量,通常将RGB空间表示的彩色图像变换到YCbCr颜色空间中。由于人眼对亮度Y的敏感度大于色差CrCb,因此可以在适当程度上对CrCb进行削弱以达到压缩的目的。由于原始图像是由很多独立的像素组成的,其实人眼对于每个细微像素的分辨能力很弱,只有众多像素集合一块,才能呈现出颜色连续变化的图像,因此图像中相邻两像素点,其彩色分量在很大程度上是接近的。在一幅图像内,包含了各种频率的分量,但大多数分量都属于低频信号,只在占图像区域比例很小的图像边缘的像素才含有高频信号。因此在对图像编码的时候,在图像质量不出现可察觉损失的情况下,对包含信息量大的低频谱区分配较多比特数,对包含信息量较低的高频谱区域分配较少的比特数,就能达到数据压缩目的。
  将图像的色彩空间域转换到频谱域,这就用到了DCT。DCT过程并不产生压缩作用,其作用是将图像数据去相关化,去除图像数据内部的相关性后,以便在其后将对这些图像数据分类处理——即对不同的频路部分进行不同的量化。
  量化编码是JPEG编码中产生信息损失的根源,也是图像质量下降的最主要原因。简单的说,就是将频谱领域中的每个值,除以量化表中对应的常数,且四舍五入取最接近的整数,这样会把很多高频的成分四舍五入为0。量化后左上角的值较小,右下角的值较大,这样就保持低频分量、抑制高频分量的目的。这一步在实现的时候会对Y进行细量化,对Cr、Cb采用粗量化,依次来提高压缩比。因此存在两张不同的表。
  经过DCT变换后,图像中的低频分量会集中在左上角,而右下角有较多的0值,因此采用Z字形编排。JPEG算法使用了差分脉冲编码(DPCM)技术,对相邻图像块之间量化DC洗漱的差值进行单独编码,从而再次利用相邻特性简化数据。并对剩余的63个交流(AC)系数进行游程编码。
  为了进一步提高压缩比例,JPEG算法对DPCM编码后的直流系数与行程编码后的交流系数使用Huffman熵编码。使用huffman码表可以简单的查表进行编码。对于AC与DC所采用的码表是不同的,对于色差和亮度的霍夫曼码表也不同。因此应该有四个霍夫曼码表。
编码流程如下图:
这里写图片描述

2.JPEG文件格式

  JPEG文件大体上可以认为是标记码和压缩数据的组合体。标记码部分提供JPEG图像的特征信息,与BMP中头文件相似,但复杂的多。JPEG的每个标记都是两个字节组成的,且前一个字节恒为0xFF.下表列出了几个比较常用的标记码:

标记码 英文全称/说明 标记结构 意义
SOI start of Image 0FFD8 图像开始
DQT define Quantization Table 0FFDB 量化表
DRI Define Restart Interval 0FFDD 重入间隔
SOF0 start of Frame 0FFC0 帧开始
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值