图像处理之JPEG编码原理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上式中,R、G、B 和 Y、Cr、Cb 都是 8bit 无符号整数,取值范围为 0-255。另从上式可 看到,计算过程会涉及到小数运算,也就是 浮点运算,所以有必要考虑算法优化,把浮点数 运算转换为移位与加法运算,从而可使计算机更快速的进行处理。 RGB 与 YCrCb 之间的逆变换式如下:
R 1 1.4020 G = 1 − 0.7141 0 1 B
0.5870 Y 0.2990 Cr = 0.5000 − 0.4187 Cb − 0.1687 − 0.3313
0.1140 − 0,0813 0.5000
R 0 G + 128 B 128
JPEG 编码原理
1.JPEG 编码概述 JPEG 是 Joint Photographic Experts Group 的缩写,即 ISO 和 IEC 联合图像专家 组,负责静态图像压缩标准的制定,这个专家组开发的算法称为 JPEG 算法,并已成为当前 的通用标准,即 JPEG 标准。作为一个基本的图像压缩方式,JPEG 已经得到了广泛的运用。 遵照 JPEG 标准建立的图像文件使用的格式称为 JFIF 格式, 文件名称的后缀为“.jpg”或者 “.jpeg”。 需要说明的是,JPEG 是一种文件压缩处理的标准,而 JFIF 是一个文件格式的标准,它 们属于不同的概念范畴。JFIF 是 JPEG File Interchange Format 的缩写,也即 JPEG 文 件交换格式, 是一种使用 JPEG 图像压缩技术存储图像的方法, 这种方法给用户提供了在不 同的计算机和应用程序间传输 JPEG 图像的标准。 JPEG 压缩算法是一种有损压缩算法,它根据人眼视觉特性剔除图像信息中视觉不敏感 的成份,从而实现图像信息的高度压缩。所根据的视觉特性主要为:高频不敏感性和色彩不 敏感性。具体来说,人眼 不能察觉到图像中的细微部分,这称之为高频不敏感性。人眼所包 含的对亮度敏感的柱状细胞有 1.8 亿 个,而对色彩敏感的椎状细胞仅有 0.08 亿个,因而眼 睛对亮度的敏感程度要远大于对色彩的敏感程度,这就是色彩不敏感性。 具体来说,对原始图像信息(直接包含每个具体像素的数据的图像,如位图等)进行 JPEG 编码需要以下 3 个步骤: 1) 2) 3) 信息空间压缩。对信息所占用的空间进行优化,初步压缩图像信息。 信息数据压缩。对图像数据本身的冗余度进行解析处理,实现数据压缩。 数据编码压缩。对经前 2 步处理所得到的数据进行编码优化,从而进一步压缩数 据量,最终形成目标 JPEG 代码。 2.信息空间压缩 原始图像信息是直接包含了每个具体像素的数据信息, 对应于自然世界中的实际光色信 息。比如我们在电脑屏幕上看到的图像,它们都是由许多像素点组成的,一幅 1024×768 的图像所包含的像素量为 1024×768=786432 个。什么是像素呢?像素是我们在工程上表达 自然光色所设置的一个最小单元。 比如一张彩色照片中的像素大小取决于感光材料的粒度大 小,而对于电脑显示屏,其像素大小则取决于制造精度以及实际应用要求,高分辨率的显示 器能再现的像素要比普通显示器更加精细,因而可达到非常细腻的显示效果。 通常,为了准确地记录一个像素,要使用三个字节,分别用来表示自然光中的红、绿和 蓝这三种颜色,称为三基色,用 R、G 和 B 表示。由于每个颜色都使用一个 8 位的二进制字 节进行表示,因此每个颜色的取值范围都是 0-255,专业上我们说这是 8 位位深。以三基色 的不同配比,就能再现任意自然色。由于每个像素都由三基色进行表示,因此一个像素总的 位深就是 8×3=24 位,所以 24 位色被称为真彩色。以 RGB 方式记录如前所述的 1024×768
0.114 R Y 0.299 0.587 U = − 0.147 − 0.289 0.436 G 0 . 615 0 . 515 0 . 100 V − − B
即: Y=0.3R+0.59G+0.11B U=B-Y V=R-Y 计算机所使用的数字域色彩空间与电视所使用的模拟色彩空间不同,它们的分量使用 Y、Cr 和 Cb 来表示,与 RGB 空间的转换关系如下:
2.2 存储空间压缩
0 0 − 0.3441 Cr − 128 − 128 1.7720 Cb
JPEG 可以处理连续色调的灰度图像或彩色图像。对于灰度图像, 每个像素可以是 8-bit 或者 12-bit 的灰度值。 baseline 模式只要求处理 8-bit 图像 (某些医学影像是 12-bit 的) 。 对于彩色图像, 原则上可以将每个色彩分量看作是一幅灰度图像来进行处理。 不过如前所述, 由于人眼对色彩不敏感,因此通常把彩色信息转换为亮度和色差信息,并对色差信息进行下 采样(downsamping),从而提高压缩率。 色彩变换基本不影响图像质量,最多是由于浮点数取整操作带来的微小差别。所以可认 为是无损变换。 所谓下采样实际上是把原始图像中每 4 个相邻像素构成的小方块进行平均, 然后作为一 个像素进行图像重构。因此通过下采样可以把原图像变换为 1/4 大小的新图像。 这种变换只 应用于色差图像,而亮度图像保持原始内容。 JPEG 进行图像处理时,首先要把输入图像按从左到右,从上到下的顺序分成 8×8 像素 的子图像块,编码过程本质上是对一连串的 8×8 灰度图像进行处理。如果原图像的高度或 者宽度不是 8 的整数倍,还需要对原图像进行扩大,保证图像的高和宽都是 8 的整数倍。当 然,在生成的 JPEG 图像文件中,要记录原始图像的大小,并在解压缩时复原。由于图像的 填补和分块是伴随着变换过程同时进行的,所以并不增加复杂度。 下面以一个 8×8 的图像块为例对存储空间的压缩加以说明。 对于位深为 8-bit,RGB 格式的 8×8 像素图像,其大小为: 8×8×3=192 字节 现在以 YCrCb 方式来表示同一图像。 亮度图像仍然保持原内容,因此大小为 8×8=64 字节。而对于 Cr 和 Cb 分量的图像,由于下采样都变成了 4×4 像素的图像,两幅图像的大 小为 4×4×2=32 像素。这样,变换得到的图像其大小为: 8×8+4×4×2=64+32=96 像素 可见,根据人眼的百度文库彩不敏感特性进行处理, 新图像所占用的存储空间只有原图像的一 半,存储空间的压缩量达到了 50%。
上表中,Y 表示亮度,U 和 V 分别表示色差,是构成彩色的两个分量。 YUV 表示法的意 义在于其亮度信号(Y)和色度信号(U、V)相互独立,由 Y 信号分量构成的灰度图像与用 U、V 信号构成的另两幅单色图像之间没有关联。因此可以对这些单色图分别进行编码。仅使用亮 度信息时可以构成我们平时见到的黑白灰度图像。 由于所有的显示器最终都只能以像素方式显示图像, 所以无论任何色彩空间的图像信息 在进行显示时都必须转换到 RGB 空间,也就是还原 RGB 分量。 在显像管方式的电视机中,考虑了人眼的视觉特性和阴极射线管(CRT)的非线性特性之 后,RGB 和 YUV 的对应关系用下面关系式近似表示为:
DCT 变换本身并不降低图像质量,而是在丢弃图像细节的对极小幅度频率的忽略过程中降低 了图像质量。 从 DCT 变换式可以看出, 对于每一个 DCT 值 F(u,v)都需要进行 64 次乘法, 完成 8×8=64 个 DCT 系统则需要 64×64=4096 次乘法。对包含了大量 8×8 图像块的整幅图像来说,计算 量之大可想而知。由此可见,计算 DCT 是整个 JPEG 压缩过程中最耗时的操作,很多人研究 过快速算法,更为有效的方法是在 CPU 中增加新指令(专用 CPU),以便于 DCT 运算。 下面以一个 8×8 图像块的变换过程进行示例说明: 原始图像的像素矩阵为: 52 63 62 63 67 79 85 87 55 59 59 58 61 65 71 79 61 55 68 71 68 60 64 69 66 90 113 122 104 70 59 68 70 109 144 154 126 77 55 65 61 85 104 106 88 68 61 76 64 69 66 70 68 58 65 78 73 72 73 69 70 75 83 94
其中,当 u=0,v=0 时,C(u)=C(v)=1/ 2
当 u 和 v 取其它值时,C(u)=C(v)=1 这里,f(i,j)为对应的像素数据,而 F(u,v)就是 DCT 值。在进行上式的计算前,首先 要把像素值减去一个 128,使数据取值范围从[0,255]移到[-128,127]。由上式计算得到的 F(u,v)就是 DCT 系数,每个 8×8 分块经过计算都将得到 64 个 DCT 系数, 其中,F(0,0)称为直流系数,其它 63 个系数称交流系统。在典型的连续色调图像中, 相邻像素之间往往差别不大, 这意味着空间频率的幅值主要集中分布在信号的低频部分。 对 典型的 8×8 图像块而言,大多数频率的幅值是 0 或者接近 0,因此在编码时可以被忽略。
3.信息数据压缩 3.1 数据压缩方法 要利用人眼视觉的细节不敏感性,需要选择一种变换算法,以帮助提取图像信息中的主 要能量,而丢弃那些影响很小或者没有影响的微小能量。适合图像压缩的变换有很多种,例 如 Karhunen-Loève 变换(KLT, 即主成分分析)、 离散傅立叶变换(DFT)、 离散余弦变换(DCT)、 Walsh-Hadamard 变换(WHT)等。 “变换”的基本思想是,找到一组基,让图像在这组基下能量集中(少量系数值较大, 其余系数接近 0)。变换必须是可逆的(否则无法解码),因此变换本身不能压缩信息。不 过通过随后的“量化”步骤将影响不大的系数略去,即可达到压缩的目的。 在数据压缩方面最佳的变换是 Karhunen-Loève 变换,但实际系统中一般不用它。 原因 有两点: 1) KLT 得到的基与输入数据相关,意味着除了需要把系数传给解码器,还需要把基传 给解码器。而且每个分块的基往往是不同的!这使得压缩效果大打折扣。 KLT 需要计算协方差矩阵的特征向量,计算量相当大。
图 1 重构误差与分块大小之间的关系
可以看出,从重构误差来说, DCT 比 DFT 和 WHT 的效果要好。DCT 优于 DFT 的另一个原 因是由于 DFT 的边缘振铃( Gibbs 现象使相邻图像分块之间的边界变得可见)小,减少了边 缘效应。再者, DCT 的固有周期比 DFT 长一倍,边界不间断。如下图的比较。
图 2 一维 DFT(上)和 DCT(下)的固有周期 因此为了兼顾压缩效果和计算复杂度,JPEG 压缩选择了 8×8 的 2 维 DCT 算法。 3.2 2 维 DCT 算法 8×8 矩阵的 2 维 DCT 变换的定义是:
F (u , v ) =
7 7 1 (2i + 1)uπ (2 j + 1)vπ C (u )C (v) ∑∑ f (i, j ) cos cos 4 16 16 i= 0 j =0
2)
DFT、WHT、DCT 的基是固定的,与输入无关。在与输入无关的各种变换中,非正弦变换 (如 WHT)最容易实现,正弦变换(如 DFT 和 DCT)的信息压缩能力更接近最佳的 KLT 方 法。DFT 是复空间的正交变换(系数是复数),DCT 是欧式空间的正交变换(系数是实数), 因此 DFT 的系数比 DCT 多一倍。不过实数的 DFT 的系数是共扼对称的, 实际所需的存储空间 与 DCT 相同。 图像压缩的质量不但与所使用的变换方式有关,还和分块大小有关。最常采用的分块尺 寸为 8×8 和 16×16。下图显示了以不同分块方式进行变换所产生的图像重构误差。下图是 在首先计算分块变换后,截取 75%的系数,然后对得到的数组进行反变换来重构图像所得到 的数据。
的图像时,要使用的记录容量为 1024×768×3=2359.296K 字节。需要补充说明的是,文件 作为数据记录载体,除数据内容外还应提供必要的有关存储格式的说明以方便以后读取(具 体可参考相关格式的标准化资料), 因此实际存储使用的文件要比上面计算的数据容量稍大, 如 1024×768 的 24 位位图文件(bmp 文件)为 2359.350K 字节。 2.1 色彩空间 (color space) 在图像处理中,可以把 RGB 空间表示的彩色图像变换到其他色彩空间。常用的色彩空 间有三种:YIQ,YUV 和 YCrCb。不同的色彩空间通常是对应于不同的物理设备特性,见下 表: 色彩空间 YIQ YUV YCrCb 适用范围 NTSC 制彩色电视 PAL 和 SECAM 制彩色电视 计算机显示器