运动补偿 & 运动估计

2023-10-29

运动补偿是一种描述相邻帧(相邻在这里表示在编码关系上相邻,在播放顺序上两帧未必相邻)差别的方法,具体来说是描述前面一帧(相邻在这里表示在编码关系上的前面,在播放顺序上未必在当前帧前面)的每个小块怎样移动到当前帧中的某个位置去。这种方法经常被视频压缩/视频编解码器用来减少视频序列中的空域冗余。它也可以用来进行去交织(deinterlacing)的操作。

编辑本段定义

运动补偿是图像/视频编解码,以及视频处理中的一个专业术语, 其英文名称是Motion Compensation.
运动补偿 是通过先前的局部图像来预测、补偿当前的局部图像,它是减少帧序列冗余信息的有效方法。
运动估计是从视频序列中抽取运动信息的一整套技术。

编辑本段分类

包括  全局运动补偿 和  分块运动补偿 两类。
运动补偿是一种描述相邻帧(相邻在这里表示在编码关系上相邻,在播放顺序上两帧未必相邻) 差别的方法,具体来说是描述前面一帧(相邻在这里表示在编码关系上的前面,在播放顺序上未必在当前帧前面)的每个小块怎样移动到当前帧中的某个位置去。这种方法经常被视频压缩/ 视频编解码器用来减少视频序列中的空域冗余。它也可以用来进行去交织(deinterlacing)的操作。
一个视频序列包含一定数量的图片--通常称为帧。相邻的图片通常很相似,也就是说,包含了很多冗余。使用运动补偿的目的是通过消除这种冗余,来提高压缩比。

编辑本段最早的运动补偿

早期解析

最早的运动补偿的设计只是简单的从当前帧中减去参考帧,从而得到通常含有较少能量(或者成为信息)的"残差",从而可以用较低的码率进行编码。解码器可以通过简单的加法完全恢复编码帧。
一个稍微复杂一点的设计是估计一下整帧场景的移动和场景中物体的移动,并将这些运动通过一定的参数编码到码流中去。这样预测帧上的像素值就是由参考帧上具有一定位移的相应像素值而生成的。这样的方法比简单的相减可以获得能量更小的残差,从而获得更好的压缩比--当然,用来描述运动的参数不能在码流中占据太大的部分,否则就会抵消复杂的 运动估计带来的好处。
通常,图像帧是一组一组进行处理的。每组的第一帧(通常是第一帧)在编码的时候不使用运动估计的办法,这种帧称为帧内编码帧(Intra frame)或者I帧。该组中的其它帧使用帧间编码帧(Inter frame),通常是P帧。这种编码方式通常被称为IPPPP,表示编码的时候第一帧是I帧,其它帧是P帧。
在进行预测的时候,不仅仅可以从过去的帧来预测当前帧,还可以使用未来的帧来预测当前帧。当然在编码的时候,未来的帧必须比当前帧更早的编码,也就是说,编码的顺序和播放的顺序是不同的。通常这样的当前帧是使用过去和未来的I帧或者P帧同时进行预测,被称为双向预测帧,即B帧。这种编码方式的编码顺序的一个例子为 IBBPBBPBBPBB。

全局运动补偿

运动模型基本上就是反映摄像机的各种运动,包括平移,旋转,变焦等等。这种模型特别适合对没有运动物体的静止场景的编码。全局运动补偿有下面的一些优点:
该模型仅仅使用少数的参数对全局的运行进行描述,参数所占用的码率基本上可以忽略不计。
该方法不对帧进行分区编码,这避免了分区造成的块效应。
在时间方向的一条直线的点如果在空间方向具有相等的间隔,就对应了在实际空间中连续移动的点。其它的运动估计算法通常会在时间方向引入非连续性。
但是,缺点是,如果场景中有运动物体的话,全局运动补偿就不足以表示了。这时候应该选用其它的方法。

分块运动补偿

每帧被分为若干像素块 (在大多数视频编码标准,如MPEG中,是分为16x16的像素块)。从参考帧的某个位置的等大小的块对当前块进行预测,预测的过程中只有平移,平移的大小被称为运动矢量。
对分块运动补偿来说,运动矢量是模型的必要参数,必须一起编码加入码流中。由于运动矢量之间并不是独立的(例如属于同一个运动物体的相邻两块通常运动的相关性很大),通常使用差分编码来降低码率。这意味着在相邻的运动矢量编码之前对它们作差,只对差分的部分进行编码。使用 熵编码对运动矢量的成分进行编码可以进一步消除运动矢量的统计冗余(通常运动矢量的差分集中于0矢量附近)。
运动矢量的值可以是非整数的,此时的运动补偿被称为亚像素精度的运动补偿。这是通过对参考帧像素值进行亚像素级插值,而后进行运动补偿做到的。最简单的亚像素精度运动补偿使用半像素精度,也有使用1/4像素和1/8像素精度的运动补偿算法。更高的亚像素精度可以提高运动补偿的精确度,但是大量的插值操作大大增加了计算复杂度。

编辑本段缺点

分块运动补偿的一个大缺点在于在块之间引入的非连续性,通常称为块效应。当块效应严重时,解码图像看起来会有像马赛克一样的效果,严重影响视觉质量。另外一个缺点是,当高频分量较大时,会引起振铃效应。关于高频分量,请参见对运动补偿后的残差进行变换的方法: 变换编码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运动补偿 & 运动估计 的相关文章

  • conda进行transformers安装

    首先建立新环境 conda create n myenv python 3 8 安装numpy和pytorch conda install numpy conda install pytorch torchvision torchaudio
  • 人脸检测 + 数据训练 + 人脸识别

    准备工作 安装opencv pip install opencv 安装opencv contrib pip install opencv contrib 创建文件夹 文件结构为 一 编写一个基础的人脸识别 import cv2 as cv
  • 服务器存档里怎么修改器,云服务器存档修改器

    云服务器存档修改器 内容精选 换一换 修改云服务器信息 目前支持修改云服务器名称及描述和hostname 该接口支持企业项目细粒度权限的校验 具体细粒度请参见 ecs cloudServers put云服务器hostname修改后 需要重启
  • 面试官常问到的问题

    dom是什么 虚拟DOM又是什么 有何作用 谈谈你对vue的理解以及2和3的区别 双向数据绑定 数据类型有哪些 深拷贝和浅拷贝是什么 它们的区别是什么 组建通信了解吗 重绘和回流是什么 一般开发用什么布局 VUEX了解吗 说说它的五大属性及
  • react-native 屏幕尺寸和文字大小适配

    转载存档 现在的手机品牌和型号越来越多 导致我们平时写布局的时候会在个不同的移动设备上显示的效果不同 比如我们的设计稿一个View的大小是300px 如果直接写300px 可能在当前设备显示正常 但到了其他设备可能就会偏小或者偏大 这就需要
  • yum私有仓库的实现

    目录 一 yum私有仓库的实现 二 画图 TCP协议和三次握手及四次挥手 三 centos ubuntu 静态网卡IP配置 四 实现免密登录脚本 expect登录远程主机 将生成的密钥写入到目标主机 expect测试远程登录 一 yum私有
  • GB2312编码理解

    计算机信息交换使用汉字编码字符集是国家1980年发布 标准号为 GB2312 1980 GB2312编码主要适用于汉字处理 汉字通讯等系统之间的信息交换 基本集主要收集了6763个汉字和682个图形字符 整个字符集分成94个区 每个区有94
  • 坐标变换(1)—向量和坐标系

    1 标量 在介绍向量之前 有必要介绍一下标量 scalar 标量是一个数字 只有大小 没有方向 不过有正负 例如温度 重量等 2 向量 向量 vector 是多个数字组成的列表 n n n个有次序的数 x 1
  • [授权发表]Shell编程范例之文件操作

    by falcon 最初发表 泰晓科技 聚焦嵌入式 Linux 追本溯源 见微知著 原文链接 Shell编程范例之文件操作 评论说明 为更好地聚合大家的讨论 请到上面原文的评论区回复 前言 这一周我们来探讨文件操作 在日常学习和工作中 我们
  • 计算机网络笔记四(应用层:DNS协议、FTP协议)

    1 DNS协议 1 1DNS协议基本概念 1 1 1什么是域名 域名 英语 Domain Name 又称网域 是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称 用于在数据传输时对计算机的定位标识 有时也指地理位置
  • 逻辑器件1

    1 COMS器件 常用的74LV 74AC 74AHC 74HC等系列都属于CMOS器件 输入端是上P下N MOS组成的电路 2 缺点是高低电平之间有一段非稳态区间 这个区间PMOS和NMOS部分导通 输出会有振荡 3 逻辑器件 TTL C
  • Windows环境下pcl点云库 安装配置全流程(精简、有效)

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net zaibeijixing article details 130770476 本文为W
  • brk(), sbrk() 用法详解

    http blog csdn net ssjhust123 article details 7772153 brk sbrk 的声明如下 cpp view plain copy include
  • H无穷控制器在Matlab中的实现

    H无穷控制器在Matlab中的实现 H无穷控制器是一种广泛应用于控制系统设计中的方法 它可以用来设计具有鲁棒性和性能要求的控制器 在本文中 我们将介绍如何在Matlab中实现H无穷控制器 并提供相应的源代码 H无穷控制器的设计主要涉及到两个
  • python 用OpenCV统计图片中黄色部分的个数。

    原图片 我的想法是 先将图片中除了黄色的部分全部变为白色 然后再利用 cv2 findContours 函数来识别轮廓 直接统计轮廓的个数就是黄色部分的个数 程序代码 coding utf 8 import os import cv2 im
  • 2023mathorcupA题量子计算机在信用评分卡组合优化中的应用思路

    2023mathorcup A题 量子计算机在信用评分卡组合优化中的应用思路 gzh数模孵化园 出品 先说说这题难在哪 主要在于计算 计算 还是计算 优化算法的计算 三道题都是考察这个 而且是转变为QUBO 形式并求解 问题1要求在100个
  • angular蚂蚁_angular api文档

    AngularJS 中的友好 URL 移除URL 中的 已翻译100 AngularJS 默认将会使用一个 号来对URL进行路由 例如 http example com http example com about http example
  • vue+element ui中的tableData中的数据格式

    tableData接收的是一个数组 数组中的元素是一个个的键值对 如图 tableData接收从后端返回的值 遍历一维数组 就是说 tabelData member 那么从纵向而言 就是遍历数组的个数 tableData从member中 取
  • android内存优化面试题,如何成为一个更好的Android开发者

    前言 事情是这样的 今年年初 在某个大博主那里拿到一份Android面试宝典合集 然后就一直躺在盘里吃灰 直到5月份的时候 有了要跳槽的计划和打算 就想着要刷刷面试题 所以就把这套 积灰 的面试宝典拿出看了看 因为这份文档是一位Alibab
  • Android Handler机制

    Android开发中经常用到handler来发送消息 比如将消息抛到主线程去更新UI handler机制涉及到四个核心的类 Looper 消息循环 有一个Messagequenue 不断从消息队列中取出消息 MessageQuenue 消息

随机推荐