视频编解码基本流程

视频编解码基本流程视频编解码基本框架

大家好,又见面了,我是你们的朋友全栈君。

本文简要概述视频编解码中的基本流程。具体表现为下图的过程:

视频编解码基本流程

 编码流程:

(1)预测:视频由按照时间序列的图像构成。每一幅图像相邻像素之间存在较强的空间相关性,而相邻图像(不同时间)之间存在时间上的相关性。充分利用这些信息,可以有效的帮助我们去除这些冗余信息。根据空间和时间相关性,存在帧内预测和帧间预测两种不同的方式。两者都需要根据已编码的像素去预测未编码像素。通常选取第一帧作为参考帧,而不进行处理。通过帧内/帧间预测的方式,我们可以将预测值和真实值的残差进行编码操作。下面逐一介绍帧内预测和帧间预测的方法:

(a) 帧内预测:该预测值来自于周围已编码结果的线性组合。由于图像中存在特定的纹理,因此该预测值的计算存在几种不同的模式,例如:垂直模式,水平模式,DC模式,Plane 模式等。在实际中我们需要扫描所有的模式从而通过拉格朗日率失真优化进行选择。具体为计算

J=D+\lambda\cdot R

其中变量 D 表示失真的大小,而变量 R 表示其他的影响因素。我们需要综合考虑代价函数,而不仅仅只是残差的大小。

(b)帧间预测:主要采用基于块的运动补偿技术。该技术通过相邻图像高度的时间相关性,可以为当前图像中的每一个像素寻找之前已经编码图像的一个最佳匹配块(运动估计),用参考像素块和当前像素块,可以定义一个运动矢量。类似于帧内预测,这里我们也只需要传输运动矢量的残差。在运动补偿过程中,我们也需要对块的划分进行遍历,利用最小均方误差或者最小平均绝对误差等对运动矢量残差进行估计,计算拉格朗日率失真优化,从而选择最优的运动矢量,进而将运动矢量残差传递到后续的编码过程中。

(2)变换编码:视频图像中存在较多变化比较缓慢的区域,因此我们可以通过适当的变换将图像数据集中在某一个区域,然后针对变换后的区域进行量化等编码操作。常用的变换方法包括:离散余弦/正弦变换。对于一个周期性函数,我们可以将其按照三角函数进行傅立叶展开。对于某些特殊情况,如函数具有明确的奇偶性,我们可以只使用正弦函数或余弦函数。对于周期性函数,结果可表示为一系列特定频谱的信号,当函数不具有周期性时,傅立叶展开表现为一个连续频谱的叠加。当输入为离散信号时,我们需采用离散的正弦/余弦变换。因此傅立叶变换本质上是将信号分解为特定波形的叠加,从而简化分析。

(3)量化:经过变换编码之后需要进行量化处理。基本思想为将连续或者大量离散的数值映射到有限几个离散数值的过程,即多对一的映射关系。量化过程将丢失信号,是有损压缩。这种映射关系不唯一,存在多种选择。具体采用哪种方案可根据均方误差,信噪比,峰值信噪比进行估计。

(4)滤波:在基于块的混合编码框架下,视频压缩过程中会存在方块效应,振玲效应,颜色偏差等失真行为。为了降低编码过程中这些失真对视频质量的影响,我们需要滤波技术,包括去方块滤波以及像素自适应补偿技术。

(a)去方块滤波:基于块的编码技术中,各个块的变换量化过程相对独立,从而导致量化过程中产生的误差以及分布也具有独立性质,因此导致编码块的边界不连续,产生方块效应。环路去方块滤波技术可以有效地降低、去除这种不连续行为。

(b)自适应补偿技术:

(5)熵编码:熵编码是一种无损编码方式。将视频序列信息转换为用来传输或存储的压缩码流。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158688.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 实时操作系统UCOS学习笔记1—-UCOSII简介

    实时操作系统UCOS学习笔记1—-UCOSII简介前面我们所有的实验都是跑的裸机程序(裸奔),从本章开始,我们开始介绍UCOSII(实时多任务操作系统内核)。UCOSII简介UCOSII的前身是UCOS,最早出自于1992年美国嵌入式系统专家JeanJ.Labrosse在《嵌入式系统编程》杂志的5月和6月刊上刊登的文章连载,并把UCOS的源码发布在该杂志的BBS上。目前最新的版本:UCOSIII已经出来,但是现在使用最为广泛的还是UCOSII,本章主要针对UCOSII进行介绍。UCOSII是一个可以基于ROM运行的、可裁剪的、抢占式、实时多任务内核

  • 运算放大电路在音频放大电路中的应用研究与实现「建议收藏」

    运算放大电路在音频放大电路中的应用研究与实现「建议收藏」1、导言放大电路是构成各种功能模拟电路的基础电路,也是对模拟信号最基本的处理。音频信号可以分解成若干频率的正玄波之和,其频率分为在20Hz~20KHz。不当的放大电路会造成音频信号的失真,亦会带来干扰和噪声。所有电子信息系统组成的原则都应包含:1、满足功能和性能要求,2、尽量简单,3、电磁兼容,4、调试应用简单。因此本文就来研究在不会增大电路复杂度的前提下,如何实现音频信号放大的同时对信号进…

  • LSTM(长短期记忆网络)及其tensorflow代码应用

    LSTM(长短期记忆网络)及其tensorflow代码应用

    2021年11月20日
  • PHP递归算法_后序遍历的非递归算法

    PHP递归算法_后序遍历的非递归算法我们在建设一个网站的时候,程序员们首选的当属PHP语言。我们对PHP还是比较熟悉的,接下来我们将会为大家介绍一下PHP递归算法。PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:HypertextPreprocessor)的缩写。PHP是一种HTML内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。PH…

  • Thinkphp5.0+Vue2.0前后端分离框架Vuethink

    Thinkphp5.0+Vue2.0前后端分离框架Vuethink

    2021年10月11日
  • leetcode 最长有效括号_字符指针赋值为什么不能加大括号

    leetcode 最长有效括号_字符指针赋值为什么不能加大括号给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = “(()”输出:2解释:最长有效括号子串是 “()”示例 2:输入:s = “)()())”输出:4解释:最长有效括号子串是 “()()”示例 3:输入:s = “”输出:0题解括号匹配:(看作+1,)看作-1,所有满足条件的括号应该是前缀和>=0,并且总和==0class Solution {public: const int INF =

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号