音视频领域里面,JPEG编码是最常用的图片编码格式。接下去几篇文章打算从JPEG图片编码开始到视频编解码,学*结下音视频的编码原理、相关文件协议,现在让我们先进入jpeg编码。
一、JPEG有损编解码简介
jpeg有损编解码流程
如上图所示,为jpeg编解码的流程图。图片编码:离散余弦变换->量化->熵编码,图片解码:熵解码->反量化->反向离散余弦变换。
有损编码的数据流
如上图所示,有损编码的数据处理过程。损失主要在量化阶段引入,由于量化不可逆。
二、图像分割
JPEG算法的第一步,图像被分割成大小为8X8的小块,这些小块在整个压缩过程中都是单独被处理的。
输入图片分割
分割后的数据
三、色彩空间转化
JPEG编码的第二步,做色彩空间转换,将输入待编码图片转成统一的色彩格式。所谓色彩空间,是指表达颜色的数学模型,比如我们常见的“RGB”模型,就是把颜色分解成红绿蓝三种分量,这样一张图片就可以分解成三张灰度图。数学表达上,每一个8X8的图案,可以表达成三个8X8的数据分别为R、G、B的矩阵,其中的数值的范围一般在[0,255]之间。在JPEG压缩算法中,需要把图案转换成为YCbCr模型,这里的Y表示亮度(Luminance),Cb和Cr分别表示绿色和红色的“色差值”。
RGB/YCbCr转化公式
为什么JPEG编码要使用YCbCr模型呢?对于人眼来说,图像中明暗的变化更容易被感知到,这是由于人眼的构造引起的。视网膜上有两种感光细胞,能够感知亮度变化的视杆细胞,以及能够感知颜色的视锥细胞,由于视杆细胞在数量上远大于视锥细胞,所以我们更容易感知到明暗细节。有损压缩首先要做的事情就是“把重要的信息和不重要的信息分开”,尽量保留重要信息,不重要的信息删减,达到压缩的目的。基于YCbCr色彩模型的特点,可以将亮度和色差分开表示。这样编码时可以针对人眼敏感的亮度分量着重处理,不敏感的色差分量做部分损失。
YC分离
从上图看,对图片做YC分离可以明显看到,亮度图的细节更加丰富,人眼更加敏感。JPEG把图像转换为YCbCr之后,就可以根据数据的重要程度的不同,针对性地做不同的处理。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved