上一节的图中有一个表示显示的图像序列与编码序列是不同的,不知道大家注意到没有,这个图很重要,编码是有固定规则的,视屏播放时,并不是按照各帧达到顺序播放的,而是按照这个规则进行播放。

前言

即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙。原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的。有关实时音视频开发时的技术难题请参见《音视频云声网Agora:从demo到实用,中间还差1万个WebRTC》。

本文主要讲解实时音视频技术中视频技术的预测技术理论知识。

系列文章

        本文是系列文章中的第4篇,本系列文章的大纲如下:

  • 《即时通讯音视频开发(一):视频编解码之理论概述》
  • 《即时通讯音视频开发(二):视频编解码之数字视频介绍》
  • 《即时通讯音视频开发(三):视频编解码之编码基础》
  • 《即时通讯音视频开发(四):视频编解码之预测技术介绍》(本文)
  • 《即时通讯音视频开发(五):认识主流视频编码技术H.264》
  • 《即时通讯音视频开发(六):如何开始音频编解码技术的学习》
  • 《即时通讯音视频开发(七):音频基础及编码原理入门》
  • 《即时通讯音视频开发(八):常见的实时语音通讯编码标准》
  • 《即时通讯音视频开发(九):实时语音通讯的回音及回音消除概述》
  • 《即时通讯音视频开发(十):实时语音通讯的回音消除技术详解》
  • 《即时通讯音视频开发(十一):实时语音通讯丢包补偿技术详解》
  • 《即时通讯音视频开发(十二):多人实时音视频聊天架构探讨》
  • 《即时通讯音视频开发(十三):实时视频编码H.264的特点与优势》
  • 《即时通讯音视频开发(十四):实时音视频数据传输协议介绍》
  • 《即时通讯音视频开发(十五):聊聊P2P与实时音视频的应用情况》
  • 《即时通讯音视频开发(十六):移动端实时音视频开发的几个建议》
  • 《即时通讯音视频开发(十七):视频编码H.264、V8的前世今生》
  • 《即时通讯音视频开发(十八):详解音频编解码的原理、演进和应用选型》
  • 《即时通讯音视频开发(十九):零基础,史上最通俗视频编码技术入门》(必读)

1. 预测技术的作用

目的是去除空间冗余和时间冗余(简单的讲,就是把重复出现的东西用尽量少的字节表示)。因为视频存在大量的空间冗余和时间冗余,包括空间冗余、时间冗余,预测后得到去除大部分空间或时间冗余的残差。

  • 空间冗余:用帧内预测编码去除

    • 基于块的帧内预测
  • 时间冗余:用帧间预测编码去除

    • 基于块匹配(Block Matching)的帧间预测

2. 空间冗余

图像空间相邻像素具有很强的相关性,帧内预测技术去除空间冗余。

3. 亮度预测模式

用PS的时候,特别是颜色替换和边缘擦除时,我们也会发现这个现象,一般沿着某个固定方向,颜色是一样的,我们可以把该方向的直接换掉。

以上述右图中方框圈中区域为例,该区域右下方均置为黑色(暂时),我们分析一下它的来源。下图中,垂直方向的ABCD是上图右图方框中的上面紧邻的4个单元的值,同理,下图中水平方向的IJKL也是方框左侧紧邻的值。左下右下,是只以当前值为依据 推算左下右下的值。DC暂时不懂,好像是平均值的样子(因为值都一样了)

4. 色度预测模式

5. 时间冗余

视频图像在时间上有较强的相关性,即存在时间冗余。去除时间冗余的编码技术有:运动估计(Motion Estimation,ME)、运动补偿(Motion Compensation,MC)。

  • 运动估计(Motion Estimation,ME)

    • 为待编码块搜索最相似的预测块
    • 记录运动矢量(Motion Vector,MV)
    • 记录预测残差:

  • 运动补偿(Motion Compensation,MC)

    • 根据运动矢量获取预测块
    • 根据预测残差计算重构块:

6. 运动模型

7. 匹配准则

匹配准则简化

  • 简化技术方法

    • 分别计算当前块和预测块的象素值和
    • 根据简化形式,比较当前块和预测块
    • 如果用简化准则对预测块和当前块比较的结果比以前最好的结果差,可以确定预测效果不好,不必对预测块再进行比较。

8. 运动估计

目的是去除视频图像的时间冗余。运动估计在搜索范围内为当前块寻找匹配最好的预测块,全搜索方式的运动估计计算复杂度高。

全搜索复杂度分析

  • 图像大小:MxM
  • 预测块大小:NxN
  • 搜索范围:(-R,R)
  • 每个搜索点象素比较个数:N2
  • 搜索点个数(2R+1)2
  • 在搜索范围内的象素比较个数总和N2(2R+1)2
  • 一帧图像所有块的全搜索象素比较个数总和N2(2R+1)2(M/N)2=(2R+1)2M2
  • 例:M=512,N=4,R=8,帧率:30帧/秒

    (2R+1)2M2

    =172X5122

    = 75759616次/帧

    = 75759616x30次/秒

    =2272788480次/秒

    采用SSD匹配准则:每次象素比较需1个减法,1个乘法,1个加法,则上述全搜索计算每秒需要2272788480x2次加减法和2272788480次乘法操作。

9. 快速运动估计算法种类

        在保持预测精度的同时减少运动估计的搜索次数,典型算法有:

  • 三步搜索(Three Step Search,TSS)
  • 二维Log搜索(2D Logarithmic Search,2DLOG)
  • 正交搜索(Orthogonal Search Algorithm,OSA)
  • 十字搜索(Cross Search Algorithm,CSA)
  • 新三步搜索(New Three Step Search,NTSS)
  • 四步搜索(Four Step Search,FSS)
  • 共轭方向搜索(Conjugate Direction Search,CDS)
  • 梯度下降搜索(Gradient Descent Search,GDS)
  • 层次块搜索(Hierarchical Block Matching Algorithm,HBMA)

三步搜索

  • 由粗到精搜索最优点,初始步长为R/2.
  • 第一步:检查起始点和其周围步长为R/2的8个点,将最优点作为第二步的起始点;
  • 第二步:以新的起始点为中心检查其周围步长为R/4的8个点,找到最优点作为第三步的起始点;
  • 第三步:以新的起始点为中心检查其周围步长为R/8的8个点,找到最优点,如果R/8=1则搜索终止,最优点位置的预测块作为最优的预测块,否则重复该过程直到R/n2=1;
  • 三步搜索方法检查点的个数为1+8log2(d+1),当d=8时,检查点个数为9+8+8=25

二维Log搜索

  • 每一步采用十字搜索模式
  • 如果每一步的最优点为中心点或者搜索窗的边界点,搜索步长减半,否则搜索步长不变
  • 当搜索步长为1时,中心点周围的8个点都要检查
  • 两个搜索路径一个需要5+3+3+8=19,另外一个需要5+3+2+3+2+8=23

正交搜索

  • 起始搜索步长R/2,从起始点开始水平搜索三个点,得到最优点并沿着最优点垂直方向搜索相邻的两个点,得到最优点,以搜索步长为R/4再以同样的方式先水平再垂直搜索,当步长为1时停止搜索
  • 搜索方法检查点的个数为1+4log2(d+1),当d=8时,检查点个数为3+2+2+2+2+2=13。

十字搜索

  • 起始搜索步长R/2,从起始点开始以"X"形十字搜索,当搜索步长降为1时,如果上一步的最优点为中心点,左上点或右下点,则这一步搜索以"+"形状十字搜索,然后结束搜索,否则还是以"X"形十字搜索,然后结束搜索。
  • 十字搜索方法检查点的个数为1+4log22d,当d=8时,检查点个数为5+4+4+4=17

新三步搜索

  • 与三步搜索方法不同的是,考虑到运动矢量高的中心分布特点,新三步搜索方法,除了围绕起始点为中心搜索步长为R/2的8个点之外,在起始点周围增加了步长为1的8个搜索点,如果最优点为步长为1的8个搜索点之一,则在最优点邻近的三个点中搜索最优点,然后结束搜索,否则,和三步搜索方法过程一样
  • 其中一个搜索路径需要检查点个数为17+3=20,另一个需要17+8+8=33。

块梯度下降搜索

  • 该方法以起始点为中心搜索8个步长为1的相邻点,确定最优点,再以最优点为中心搜索8个步长为1的相邻点,如此循环下去,不限制搜索步骤,但当搜索得到的最优点为中心点或者到搜索窗的边界,搜索终止。

层次块搜索

  • 对编码图像和参考图像下采样,分别得到编码图像和参考图像的下采样图像,未经采样处理的编码图像和参考图像属于第0层,一次下采样的编码图像和参考图像属于第1层,对第1层图像再进行下采样得到的编码图像和参考图像属于第2层,依次重复上述过程,得到第n层下采样的编码图像和参考图像。
  • 然后在n层下采样参考图像的搜索范围中找到与下采样编码图像块最佳匹配块的MV,该MV作为n-1层的运动估计搜索范围的中心点,依次重复上述过程,直到n=0为止,此时得到的最佳匹配块就是编码图像的预测块,其对应的MV为最终的最优MV。

10. 搜索算法复杂度比较

11. 分像素运动估计与运动补偿

时域运动位置更可能在整象素之间,即分像素上。利用相邻的整象素可以估计出分象素的值:常用线性或双线性插值得到分象素的值。分象素运动估计有更高的预测精度,但复杂度也更高:1/2分象素运动估计,图像存储空间增加4倍,运动矢量需要放大2倍,1/4分象素运动估计,图像存储空间增加16倍,运动矢量需要放大4倍,计算复杂度也成倍增加。

12. 分像素插值

13. 多参考帧预测

有更多的候选图像,搜索更精确的预测块。

14. 图像分块编码

视频内容的运动非常复杂,图像分块编码可以更好的提高运动预测精度,提高压缩效率。要在编码块大小和附信息(MV,Mode)编码比特数之间权衡,小的编码块大小会有更好的预测但有更多的附信息比特数。

15. 双向预测编码

16. B帧有更好的编码效率

新出现的对象参考将来的帧有更好的预测效果,前后两个预测的平均值可以减少预测方差。

17. 全局运动估计

基于全局仿射运动模型。预测精度不如基于块的运动估计。MV数目少,适合简单运动场景的运动估计。

同前,本文还是增加了部分内容,参考了https://www.cnblogs.com/xkfz007/archive/2012/07/29/2613824.html

音视频开发入门(4):视频编解码之预测技术介绍相关推荐

  1. 音视频开发入门(3):视频编解码之编码基础

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关实时 ...

  2. 直播软件搭建音视频开发中的视频采集

    直播软件搭建音视频开发中的视频采集 前言 在直播和短视频行业日益火热的发展形势下,音视频开发(采集.编解码.传输.播放.美颜)等技术也随之成为开发者们关注的重点,本系列文章就音视频开发过程中所运用到的 ...

  3. 【安卓】音视频开发入门

    文章目录 音视频开发学习思路 关于开发的思考 音视频开发的内容 采集 渲染 处理 传输 音频基础知识 基础概念 采样率(samplerate) 量化精度(位宽) 声道数(channels) 音频帧(f ...

  4. 音视频开发入门基础知识(视频入门篇)

    RTSP实时音视频开发实战课程:<RTSP实时音视频开发实战> 音视频开发入门基础知识(音频入门篇) 目录 一.前言 二.视频采集和显示 三.视频常见的格式 四.RGB转YUV和YUV转R ...

  5. 音视频开发入门基础知识(音频入门篇)

    RTSP实时音视频开发实战课程:<RTSP实时音视频开发实战> 音视频开发入门基础知识(音频入门篇) 目录 前言 音频的采集和播放 音频常见的格式 音频的编码 前言 在音视频开发入门基础知 ...

  6. iOS音视频开发八:视频编码,H.264 和 H.265 都支持

    我们将通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发. 这里是第八篇:iOS 视频编码 Demo. ...

  7. python自学视频教程 38-python编程开发入门中文视频培训教程38讲

    Python 当前位置:主页 > 编程教程 > Python > python编程开发入门中文视频培训教程38讲 python编程开发入门中文视频培训教程38讲 教程大小:   发布 ...

  8. Android 音视频开发入门指南

    最近收到很多网友通过邮件或者留言说想学习音视频开发,该如何入门,我今天专门写篇文章统一回复下吧. 音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,希望我后面能挤出时间整 ...

  9. 浅谈音视频开发入门基础及进阶资源分享

    导言:音视频开发涉及的知识面比较广,知识点又相对独立琐碎,入门门槛相对较高.想要对音视频开发具有深入全面的了解,需要在行业深耕多年.本文将简单介绍音视频的采集,编解码,传输,渲染四个技术点并对涉及到的 ...

最新文章

  1. java 操作 redis_java操作Redis
  2. django forms 错误处理
  3. 修改anaconda3 jupyter notebook 默认路径
  4. 关于团队开发项目的想法
  5. 数据在内存中的存储(二进制形式存储)
  6. groovy语言 累加_使用Groovy管理数据:查找和累加器
  7. 电话面试的技巧和注意事项
  8. 网络配置问题Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization.
  9. 怎样完美卸载IE8浏览器
  10. 计算机基础知识键盘知识,电脑键盘的一些基础知识和维护方法
  11. pyhanlp机构名识别时动态添加自定义词表(CustomDictionary)
  12. Python一个回合制兵棋小游戏(1)
  13. pyscripter与python的关系_详解python开发环境PyScripter中文乱码问题解决方案
  14. 使用caffe对mnist进行训练遇到的点点滴滴
  15. 中专计算机基础期末考试题,职业中专第一学期计算机应用基础WIN7和Word2010版期末考试题.doc...
  16. 适合小白的大白话讲解---Git与Github的区别
  17. HTML5视频教程,HTML5项目实战,HTML5中文指南,HTML5使用手册
  18. 访问 Linux 服务器上的文件(以图片为例)
  19. 虚拟机不可恢复错误-vcpu0的解决办法
  20. lazypics——用python实现漫画网站自动浏览

热门文章

  1. 大数据——个性化推荐系统
  2. 区块链技术影响的 10 个领域
  3. 异步电机无感MRAS-cc(三.推导及仿真)
  4. C++常见内存错误及解决办法
  5. 博弈论笔记1-博弈论基础引论
  6. 《前端》MouseEvent (事件)
  7. windows 文件夹备份_如何使用D7备份配置文件,修复和调整Windows设置
  8. 初级的平面设计如何求职?
  9. 25.STM32光传感器
  10. MVC模式 单一入口