JPEG格式是一个很老的格式了,笔者刚刚认识5寸软盘的时代就知道这种文件是用来保存图片的,而且比同尺寸的“bmp”图片要小很多。很多年过去了,信息技术各个领域全面发展,视频编解码技术更新换代了好几轮,然而大家从网页上看到的、自己磁盘里存储的、照相机/手机拍摄的,仍然以这种格式的图片为主。曾经有人将JPEG称为“来自未来的外星科技”。
为什么JPEG能够流行这么长的时间呢?一个很重要的原因固然是它流行得很早,但另外一个原因则是这种图片编码格式体现了基于主流图片/视频压缩技术最根本的世界观和方法论。本文就以JPEG中最基本最常用的Baseline-DCT模式为例,简单回顾下JPEG编解码技术的整体概况和若干细节。
一. 基本概况
JPEG支持多种编解码模式。最基本的Baseline-DCT支持8比特sample,熵编码采用哈夫曼编码,然而扩展DCT模式则能够支持12比特的sample,熵编码既可以用哈夫曼编码也可以用算术编码。
采样格式方面,支持纯亮度,YUV420,YUV422和YUV444。
分块方面,一律8x8大小分块。
JPEG标准可从ITU-T官网下载,标准编号是T.81。
二. 格式
JPEG文件中的语法单位基本是由marker来组织的。每个marker都是由0xFF开头的一个16位整数,标记接下来的数据内容。对于熵编码部分,如果出现了0xFF则要填充一个0x00。
下面列一些重要的marker:
SOI:即start of image的意思。应出现在文件最开头。纯marker。
SOFn:即sta