当前课程知识点:多媒体技术基础 > 第四章 视频数据的压缩编码 > 4.1 基于帧的视频编码 > 4.1 基于帧的视频编码
同学们好
今天我们开始学习第四章
视频数据的压缩编码技术
视频编码技术
我们可以对它进行简单的一个分类
那么视频压缩编码技术呢
可以分为两大类
第一类是基于图像帧
或者是图像块的编码技术
那么这一类编码技术是以帧或者块
为基本的编码单元进行编解码
主要是依据于先农理论
综合的应用第一代压缩编码器
所以也被称为
第一代的图像压缩编码技术
那么基于这类压缩编码技术
已经形成了一系列的国际编码标准
我们在后面的内容中
会进行相应的学习
第二类视频编码技术是
基于对象的编码技术
那么这类编码技术
主要是以可视对象为基本的
单元进行编辑码
基于对人类视觉特性的研究
通过识别视频序列中的区域和物体
并对它们进行编码
所以也被称为
第二代图像压缩编码技术
那么这类编码技术
首先要对视频序列中的区域和物体
进行一个分类识别
在此基础上进行
针对物体和区域的编码
由于目前来看
对于视频序列中的
区域和物体的方位识别技术
还不够成熟
所以说这类基于对象的视频编码技术
就目前的技术市场应用来看是有限的
还处于研究探索阶段
所以在我们后续的内容中
主要介绍的是
基于图像帧或者叫图像块的
视频编码技术
我们这一节开始学习
基于帧的视频编码技术
首先我们做一个概述
基于帧的视频编码基本框架
我们这个地方给出来了
在基于帧的视频编码技术中
采用的是混合压缩编码的技术
在编码中采用了
变换编码 预测编码和熵编码
所以是一种混合的编码技术
那么我们先看一下
这个编码框架中的编码器这一端
视频信号进入编码器之后
首先进行预处理
后面我们会对预处理环节所要做的
技术处理做详细介绍
预处理之后的视频
进入编码器进行视频的编码处理
视频信号进入编码器
首先要进行一个预测误差的求解
预测误差是基于对
输入视频图像块
进行的预测
在预测的基础上完成预测误差的求解
预测误差进入到
变换编码环节进行一个变换处理
变换编码的系数再进入后续的量化
量化得到的量化结果
进入到熵编码器进行一个商品编码
商品编码形成的比特流
送入信道进行传输
在解码端视频流首先进行一个熵解码
然后是反量化和反DCT变换
通过区块效应
产生最后的视频信号的输出
对于视频信号进行编码
是按层次序列划分进行的
那么我们先来看一下视频编码的层次
基本上是按照六个层次进行划分
第一层是序列层
对应的就是一个序列
序列的长度是不定的
序列层前面有序列的头
那每一个序列层又有若干个
GOP组成
那么所以说序列层
下面对应的是GOP层
每一个GOP是有一组图像
构成的一个图像短序列
那么GOP是指的
两个爱人之间的距离长短
GOP又可以进一步划分为
一个一个的图像
也就是说
GOP是由一个个编码图像构成
那么每一个图像又进一步划分成
一个一个的条带
也叫slice
每一个条带
进一步的划分成
一个个的图像宏块
我们简称MB
每一个宏块又可以
进一步的划分成一个一个的图像块
那么一般宏块的大小是
16·16像素的图像块
那么每一个宏块
进一步划分成图像块
也就是我们所称的block
那么图像块的大小一般是8·8的像素
那么每一个图像块
再进行DCT变化
或者是进行正交变换
那么形成变换系数
那么对应的就是最下面一层的
图像块块层
那么视频压缩编码针对于不同的
编码层次
采用不同的相应技术
李阳说我们的运动估计就在
图像的宏块层上进行
那么我们的正交变换编码
是施加在每一个图像框上
所以在二层上来实现
那么我们来看一下视频编码层
具体的条带划分以及条带对应的宏块
它们之间的关系
那么这张图给出了
一张图像的一个条带划分的一个示意
那么左边每一个细的巨型
调区域对应的是一个一个的
slice的划分
那么对于silce的划分大小呢
是可以不定的
那么我们看到ABCDE到Q
对应着整个一个图像
我们把它划分出相应的调带
那么每一个条带每一个slice
那么每一个条带每一个slice
又可以划分出一个一个的宏块
那么每一个宏块
如果拿出来看的话
它是由亮度和
两个色差分量的块构成的
那么一般
亮度洪块是16·16的像素大小
那么我们右边所看到的
这样子的一个宏块
对应的是4:2:0的抽样格式
亮度和两个色差信号对应的
头像块的大小对应关系
我们看到4个8·8的亮度块
对应有两个8·8的色度块
那么我们后面再进一步的
对于这样子的图像块进行
变换编码的时候
那么其实就是对应的
每一个8·8的图像块来施加
DCT变换
下面我们来看一下编码器的基本工作原理
那么编码器工作的第一个环节
需要进行图像信号的预处理
图像信号的预处理
我们可以用下面这张图
来进行一个描述
预处理包括A/D转换
干嘛矫正以及
RGB信号到YCbCr信号的转换
也就是说
RGB分量到亮度和色差分量的转换
然后是滤波以及抽取
那么在这个预处理环节中
输入的我们假设是模拟的分量信号
首先要进行一个模数转换
转换成数字信号
然后进行一个干妈矫正
矫正之后的分量信号
要进行一个亮度和色差分量的行程
那么我们后续的处理呢
都是分别对亮度和色差信号进行的
那么转换为
YCbCr的亮度和色差分量之后
要进行一个滤波
那么这个滤波主要是
基于我们人的眼睛
对于亮度信号的分辨率要求高
对色度信号的分辨率
要求低的这样子的一个特性
那么我们可以对
色度信号的带宽把它降低
这样子能够方便我们后续
对于数据量的降低
对于两个色差信号
我们在进行一个后续的抽取处理
就形成了类似于我们刚才所看到的
4:2:0的
亮度和色差的这样一个压采样的格式
那么编码器工作的第二个环节
是进行运动估值和补偿
在这个环节中
首先对于图像块
要进行一个分块的处理
比方说我们刚才形成的亮度分量和
两个色差分量
要对亮度分量进行一个16·16的分块
形成一个一个的我们所说的宏块
那么在宏块的基础上
要进行一个块匹配的搜索
那么块匹配的搜索的目的
是为了寻找运动矢量
为了更好的完成预测
那么通过匹配块搜索
获得我们对运动矢量的估计
那么基于估计出来的运动矢量
我们可以得到
输入块的预测值
那么具体预测的时候
我们前面介绍的相关的技术有
前向预测
后向预测还有双向预测
那么基于剧情预测技术
我们得到
对应的宏块的预测值
然后求解预测误差
在预测误差求解的基础上
再做后续环节的相应信号处理
那么我们在这一环节中
基于运动补偿的预测
实现的就是属于帧间预测
那么重点去除的是
视频信号中的时间冗余
当然在具体应用中
还可以根据
图像内容的复杂程度以及图像序列的
场景切换的情况
在不同的图像中采用帧内的预测方式
我们后面的内容会涉及
到该运动补偿的预测完成之后
对预测误差要采取
变换编码的处理
所以说
下一个处理环节是对于
预测误差信号进行一个DCT变换
那么通过DCT变换
我们能够对于预测误差中的
冗余信息进一步的去除
那么我们在前面的介绍中
大家已经知道了
DCT变换这样子的变换编码
能够使这个
变换之后的系数的能量集中
而且借助于
DCT变换之后的量化编码
那么能够使变换系数
大多数的系数或者是高频系数
多数变为零
这样子方便后续的编码环节
那么在DCT变换的这个环节需要考虑
正变换和反变换之间的匹配关系
那么我们知道DCT变换是属于
需要浮点运算的这样子的一类十数变化
那么编解码器如果自常使用的不同
那么会造成
DCT和IDCT之间的适配
那么这也是我们后续编码标准中
采用相应的技术来解决的一个方面
那么DCT变换之后要采取量化编码
DCT变换的系数
送到量化编码环节
进行一个系数的量化
那么量化编码是编码器中
唯一产生信息损失的一个环节
量化编码器的步长的大小
会影响我们编码器输出码率的大小
同时它也会影响
解码图像质量的好坏
所以说在编码器中
通常通过调整量化器的量化参数
来实现对于输出码流的码率的调整
以及图像质量的平衡
那么在量化这个环节
一般帧内编码的量化参数和
帧间编码的量化参数是有区别的
那么在这儿
我们给出了帧内编码的一个8·8的
一个量化矩阵
以及帧间编码的一个8·8的量化矩阵
那么在这个矩阵中
每一个位置上对应的数值
对应的就是我们对于
8·8的DTC变换的系数
不同位置上的系数
所采用的量化步长的数值
那么我们看到帧内预测编码
它的这个量化步长
从低频到高频量化步长逐渐的增加
那么这是因为对于
帧内预测编码一般我们直接应用于
一个一个的图像块
那么图像块的像素之间的相关性
是比较强的
所以我们可以利用这样子的
一种这个处理方式
我们对于高频系数
把它通过大的量化步长
把它的能量降低
那么对于低频系数
一般代表的图像块的平均亮度
那么我们的步长
用小的量化步长进行量化
那么对于经过帧间预测
得到的预测误差
那么预测误差之间跟原始的
图像空间像素之间的关系
没有直接的对应
所以说对于帧间预测得到的预测误差
我们做DCT变换之后得到的系数
我们看到
所有的系数包括从高频到低频的系数
它的量化步长采用的是一样的
那么对于从
DCT系数经过量化
得到量化后的系数
那么我们可以用这样子的一个
表达式来进行一个量化环节的转换描述
那么在这儿DCT(i.j)对应的是我们
DCT系数中不同位置上的
DCT变换系数
那么通过相应的量化器的量化
我们得到它对应的量化结果输出
就是用QDCT来表示
那么在这个表达式中
这个Q对应的就是
相应ij这个位置上对应的量化步长
比方说
对应这个位置上的量化步长是34
那么这个Scale对应的是
一个量化参数或者叫一个放大因子
那么我们在相应的
视频编码标准中
基本上都有相应的一个
放大因子的矩阵定义
那么这样一个放大因子我们又把它叫做是
一个QP的这样子的一个参数
我们通过这个QP参数
来实现对于量化步长的调整
也就是说
对于一个量化矩阵
我们可以通过调整
这个QP参数或者Scale这个参数
来实现对于量化步长的调整
那么这个函数f对于
帧内编码和帧间编码
所采用的这种转换方式是不一样的
对于帧内编码
采用的是round的方式
对于帧间编码采用的是取整的方式
这个就是量化环节的处理
那么量化之后的系数
大多数的值都变为零
所以说DCT系数矩阵
经过量化之后已经变成了一个稀疏矩阵
那么这样一个稀疏矩阵
我们为了后续进行一个熵编码
那么我们需要把
二维的DCT的这种稀疏矩阵
进行一个矩阵的转换
把它转换为一维的数据序列
那么具体的转换方式
我们看一下
那么有这行扫描方式
我们知道对于DCT系数来说
通过相应的量化处理
那么系数
大多数的能量都变为零
尤其是高频系数部分
多数都会通过量化环节变成零
那么非零的部分
基本上集中在低频环节
那么我们可以通过合理的
二维到一维的转换方式
把它转换成一个
更有效的一维数据系列
那么这种合理的转换方式之一
就是这个Z字形扫描
从低频系数开始
沿着这种Z字形轨迹
从左上角序列的扫描到右下角
这样我们就能够实现
把高频系数的0基本上形成一个
连续的0的这样子的一个排序
那么这样子的排序结果就方便后续的
进一步熵编码的处理
那么如果是一种隔行扫描的图像的话
那么每一帧的相邻行之间
来自于不同的茶
如果按照进行扫描可能
如果按照进行扫描可能
不能够实现更有效的数据序列的排序
那么我们可以采用这种交替扫描的方式
也就是说现在垂直方向上进行扫描
然后再在水平方向上进行扫描
通过这样交替扫描的方式
我们也是希望能够把
非零系数和零的系数
能够延续的形成一个一维数据系列
那么我们看右边这样一个例子
那么右边这样一个8·8的矩阵
对应的就是一个
经过量化之后的8·8的
DCT系数
我们看到非零的值
基本上是在左上角
也就是说低频系数这部分
高频系数基本上都是零
所以说我们采用刚才的真情扫描
就可以得到
我们所看到的这样子的一个
二维到一维的数据序列
那么我们这样一个一维的数据系列
我们就可以采用进一步的游程的
这种数据描述方式
得到对于一维这个系列的一种
二维对一维数据系列的游程的这种表示
那么这个游程表示每一组数的
第一个代表的是
非零数值前面零的个数
那么我们看到
12前面的零的个数是零
所以说对于12这样一个非零值
给出来的是(0 12)的这样一组油层的表示
那么后面类似对于这行扫描
在非零值最后一个非零值之后
如果都是零的话
我们用一个零
我们用一个零
也就说用一个结束的标示来进行表示
用UB来描述
从这个位置开始之后全部都是零
这是我们这个转换系列的一个结束
那么我们在视频编码中基本上
从DCT系数到一维数据序列的转换
都是采用的这样子的一种二
维矩阵到一维矩阵的转换方式
那么二维矩阵到一维矩阵转换之后
我们要实现的就是熵编码
那么熵编码这个环节呢
主要去除的是
数据中存在的统计冗余
我们在前面对熵编码的内容做了介绍
我们前面对
熵编码的内容已经做了介绍
所以说在这个环节中
我们可以通过进一步的
统计冗余的去除
使得我们的编码数据的
这个数据率进一步的降低
那么在熵编码的环节
我们给每一个符号指定一个码子
那么在这个环节的处理之后
我们输出的才是比特流
那么对于商户编码之后的比特流
我们可以送入信道进行传输
那么在解码端熵解码之后
那么我们在输出
相应的解码图像之前
还要进行一步处理就是
区块效应的这样一个滤波
那么我们在前面对视频进行编码的时候
基本上是通过对
图像进行一个分块处理
那么针对于每一块来进行相应的
预测编码以及变换编码和熵编码
所以说在这样子的编码环节的处理下
我们的解码图像会有一些块效应
那么为了降低块效应所引起的视觉不快
那么我们可以在输出重建图像之前
通过低通滤波器对
解码后的图像进行一个平滑
那么来时输出的图像质量得到提升
那么我们在实际的应用中
可能压缩之后的视频流
要送入一个恒定的一个信道进行传输
那么我们前面的内容中
大家已经知道了
我们的视频编码形成的视频流
是一个变码率的流
我们采用的技术站内预测
帧间预测以及变长度的这个熵编码
都是形成一种变码率的码流输出
所以说在实际的应用中
为了适应恒定码率的信道
还需要对输出的码流
进行一个码率的控制
要平滑波动的码率
以适应恒定行道
所以说在编码器中
还有相应的速率控制的这样一个
处理环节
那么下面我们看一下视频序列的编码
那么我们知道对于视频序列
进行压缩编码的时候
我们的编码帧一般有三种类型
帧内编码帧
预测编码帧和双向预测编码帧
分别用I P D来描述
那么I帧我们指的是帧内编码帧
那么这一类编码帧
它是不用参考其它的图像帧
只是利用本帧的信息来完成
相应的编码
那么所以说对于I帧来说
它的解码是只要
它本帧的数据有
那么只要知道本帧的数据
那么就可以完成对于这一帧的解码
那么预测编码帧也就说P编码帧
它的编码是利用了它前面的
I帧或者是P帧作为参考来
实现预测编码的
那么所以说这一类帧在解码的时候
是要依赖于已经完成解码的
它的参考帧来实现对它的解码
那么这一点也是跟I帧
解码的一个不同
那么对于B帧来说
它是属于双向预测编码帧
那么它的带运动补偿的预测是
基于前后两个帧来完成的
那么所以说
在解码端要完成对B帧的解码
必须已经完成
对它前后两个参考帧的解码
在这个基础上才能完成对B帧的解码
所以说我们来看一下
对于由IPB帧的
帧编码构成的一个序列
一般是可以形成
什么样的GOP的组合
那么我们前面说了
一个GOP组对应的其实就是
两个I帧之间的
帧序列构成的这样一个组织
我们在右边的这个图里面看到
两种IBP帧的序列组合方式
那么我们看到
每一个组合的第一帧都是一个I帧
那么这个I帧会
作为后续的B帧和P帧的参考帧来
实现对后续的PB帧的编码
那么我们看到的这两个
GOP的序列组合
它的区别在于
第一个GOP的组合的
最后一帧是一个P帧
而第二个GOP组合的最后一帧是B帧
那么这个I帧呢
是下一个GOP的第一帧
那么所以说这两个GOP的组合
前面这个叫GOP方式
后面的这种组合叫开环的闭合
开环的GOP的方式
-1.1 概述
--1.1 概述
-第一章 作业
--第一章 作业
-2.1 光和彩色
--2.1 光和彩色
-2.2 视觉特性
--2.2 视觉特性
-2.3 扫描
--2.3 扫描
-2.4 模拟彩色电视信号
-2.5 数字电视信号
-第二章 作业
--第二章 作业
-3.1 信息熵理论
-3.2 率失真理论
-3.3 预测编码
--3.3 预测编码
-3.4 序列图像中运动矢量的估计
-3.5 具有运动补偿的帧间预测
-3.6 正交变换编码
-3.7 子带编码
--3.7 子带编码
-3.8 量化编码
--3.8 量化编码
-3.9 熵编码
--3.9 熵编码
-第三章 作业
--第三章 作业
-4.1 基于帧的视频编码
-4.2 视频压缩编码国际标准
-4.3 H.264/AVC
-4.4 H.265/HEVC
-4.5 基于率失真优化的编码模式选择
-4.6 恒定速率编码器的速率控制
-4.7 压缩编码算法性能的评价
-第四章 作业
--第四章 作业
-5.1 概述
--5.1 概述
-5.2 人的听觉特性
-5.3 音频信号编码方法
-第五章 作业
--第五章 作业
-6.1 多媒体传输对网络的要求
-6.2 网络对多媒体信息传输的支持
-第六章 作业
--第六章 作业
-7.1 多媒体数据及其时域特征的表示
-7.2 分布式多媒体系统中的同步
-7.3 连续媒体同步的基本方法
-7.4 广播应用的传输层协议
-7.5 宽带应用的传输层协议
-第七章 作业
--第七章 作业