以JPEG算法为例,了解图像压缩与编码原理。

本篇仅仅是对以下视频的补充,关于JPEG算法原理这个视频已经讲解得很清楚了,建议以视频学习为主:

【中英双字】JPEG算法原理 jpeg图片是如何压缩的?_哔哩哔哩_bilibili

图像压缩的生物学原理

人眼对图像中的高频部分相对不敏感,可以通过保留图像的低频部分,丢弃高频部分,实现对图像进行压缩。

所谓图像的高频部分,指的是画面变化复杂的部分,而低频部分,指的是画面比较连续的部分,比如颜色相近的大面积色块。以下面的图片为例:

人眼可以很好得识别完整的树干,石头的轮廓,但对于稀疏阴影的变化,落叶堆中的小草,叶片丛中的某几片叶子,人眼则不能很好地识别。树干、石头这些对应的就是低频信号,阴影、落叶堆、叶片丛对应的就是高频信号。将这些高频信号丢掉一部分,让其变模糊一点,对人眼识别画面并不会造成很大的影响,这就是JPEG算法压缩的生物学原理。

关于图像的高频、低频的更详细说明可参考以下链接:

  • 低频分量(低频信号):代表着图像中亮度或者灰度值变化缓慢的区域,也就是图像中大片平坦的区域,描述了图像的主要部分,是对整幅图像强度的综合度量。
  • 高频分量(高频信号):对应着图像变化剧烈的部分,也就是图像的边缘(轮廓)或者噪声以及细节部分。 主要是对图像边缘和轮廓的度量,而人眼对高频分量比较敏感。之所以说噪声也对应着高频分量,是因为图像噪声在大部分情况下都是高频的。

JPEG算法处理流程

色彩空间转换

将RGB转换为YUV,形成亮度(Y)、蓝色色度(Cb)、红色色度(Cr)三个通道的分量。

色度缩减采样

Chrominance Downsampling,将YUV444转换成YUV422或YUV420,降低U通道和V通道的数据量。

离散余弦变换

对缩减采样后的YUV每个通道执行离散余弦变化(DCT/Discrete Cosine Transform),将其从空域转换成频域。

量化

对经过离散余弦变化后的系数表进行量化,也就是除以一组系数,得到量化后的值。量化系数决定了图像压缩的程度,系数越大,高频信号丢失得越多,压缩比越大,图像还原后就越模糊。

游程编码与霍夫曼编码

使用zigzag的方式对量化后的8x8方格进行游程编码,以便于尽量压缩连续多0的,再对流程编码后的数据进行堆夫曼编码,进一步压缩数据的长度。

JPEG算法局限性






















  • 无标签