H264与MPEG中I、P、B帧编码的不同

2023-11-04

(暂时没时间去研究I、P、B帧是否真的在H.264与MPEG中不一样,先转过来)
1、H264中I、P、B 帧编码的基本流程

I 帧编码的基本流程为:
(1) 进行帧内预测,决定所采用的帧内预测模式。
(2) 像素值减去预测值,得到残差。
(3) 对残差进行变换和量化。
(4) 变长编码和算术编码。
(5) 重构图像并滤波,得到的图像作为其它帧的参考帧。


P 帧和 B 帧编码的基本流程为:
(1) 进行运动估计,计算采用帧间编码流程编码模式的率失真函数(节)值。P 帧
只参考前面的帧,B 帧可参考后面的帧。
*(2) 进行帧内预测,选取率失真函数值最小的帧内模式与帧间模式比较,确定
采用哪种编码模式。
(3) 计算实际值和预测值的差值。
(4) 对残差进行变换和量化。
(5) 熵编码,如果是帧间编码模式,编码运动矢量

 

2、MPEG压缩中的 I、B、P帧

首先,MPEG-1压缩的基本思想:帧内压缩和帧间压缩。
其次,时间相关性的统计分析:统计的结果表明,在间隔1~2帧的图像中,各像素只有10%以下的点,其亮度差值变化超过2%,而色度差值的变化只有1%以下。

采用的压缩方法: 分组:把几帧图像分为一组(GOP),为防止运动变化,帧数不宜取多。
1.定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;
2.预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;
3.数据传输:最后将I帧数据与预测的差值信息进行存储和传输。

I帧:帧内编码帧
I帧特点:
1.它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;
2.解码时仅用I帧的数据就可重构完整图像;
3.I帧描述了图像背景和运动主体的详情;
4.I帧不需要参考其他画面而生成;
5.I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
6.I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
7.I帧不需要考虑运动矢量;
8.I帧所占数据的信息量比较大。

P帧:前向预测编码帧。
P帧的预测与重构:P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。
P帧特点:
1.P帧是I帧后面相隔1~2帧的编码帧;
2.P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);
3.解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;
4.P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧;
5.P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;
6.由于P帧是参考帧,它可能造成解码错误的扩散;
7.由于是差值传送,P帧的压缩比较高。

B帧:双向预测内插编码帧。
B帧的预测与重构
B帧以前面的I或P帧和后面的P帧为参考帧,“找出”B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中“找出(算出)”预测值并与差值求和,得到B帧“某点”样值,从而可得到完整的B帧。
B帧特点
1.B帧是由前面的I或P帧和后面的P帧来进行预测的;
2.B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;
3.B帧是双向预测编码帧;
4.B帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;
5.B帧不是参考帧,不会造成解码错误的扩散。

注:I、B、P各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧,至于图像中的哪一帧是I帧,是随机的,一但确定了I帧,以后的各帧就严格按规定顺序排列。


http://blog.csdn.net/sunnymov/article/details/4620199


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

H264与MPEG中I、P、B帧编码的不同 的相关文章

  • 0、Spring工程构建&Spring快速入门&Spring配置文件详解&注入&Sprint相关API

    1 Spring工程构建 创建工程项目目录文件夹 IDEA选择项目new一个module 配置案例 aop创建 创建并下载完毕后 点击file选择projert 选择按照的jdk版本 output选择当前目录 点击右下方apply 选择fa
  • Android BottomNavigationView的属性设置

    底部导航栏通常是每个item由一个icon和title组成的 然后再控制下是否点击的状态即可 当然也可以使用官方在support包内提供的BottomNavigationView来实现 于简单的需求来说 使用BottomNavigation
  • FPGA数字IC刷题58道Verilog题解代码及视频讲解【FPGA探索者】【同步/异步FIFO】【跨时钟】

    牛客 Verilog 刷题入门篇1 24 进阶篇1 34 题解代码 所有代码均能通过测试 配合视频讲解效果更佳 为避免内容冗余 本文只给出代码 部分题目给出必要说明 很多题目本身出题有些问题 着重理解题目 没必要钻牛角尖 本文作者 FPGA
  • 贪心算法之活动安排问题(填表详解+思路解析)

    贪心算法 总是选择当前看起来最优的选择 局部最优解 得到的结果是一个整体最优解 但是总是选择局部最优解并不总是能得到整体最优解 需要在问题具有 贪心选择性和优化子结构时才成立 贪心选择性 第一次做出贪心选择是正确的 优化子结构 第一次做完贪
  • Tarjan 强连通分量算法的 Java 实现

    强连通分量算法是图论中的一个重要算法 用于将有向图分解为若干个强连通分量 Tarjan 算法是其中一种常用的实现方式 它可以高效地找到图中的所有强连通分量 本文将介绍 Tarjan 强连通分量算法的 Java 实现 并提供相应的源代码 首先
  • 万用表的使用

    deprecate 反对 轻视 declaration 宣告 声明书 宣布 宣告 申报 arg argue 争论 论证 争辩 主张 认为 提供证据 证明 表明 原因等 type 类型 种类 打字 成为 的典型 function 功能 作用
  • [721]linux安装kafka及命令行使用

    文章目录 一 安装kafka 二 解压kafka 三 修改server properties文件 四 修改zookeeper properties文件 五 添加kafka启动脚本 六 启动kafka 七 命令行使用kafka 创建topic
  • Vue知识系列(4)每天10个小知识点

    目录 系列文章目录 Vue知识系列 1 每天10个小知识点 Vue知识系列 2 每天10个小知识点 Vue知识系列 3 每天10个小知识点 知识点 31 Vuex 四种属性的概念 作用 使用示例 32 Vuex 和单纯的全局对象 的概念 作
  • Linux磁盘分区和文件系统的关系

    一 Linux磁盘相关命令及作用 1 df命令 用于显示文件系统的磁盘空间使用情况 2 du命令 用于查看文件或目录的磁盘使用情况 3 fdisk命令 用于磁盘分区表的创建和管理 4 mkfs命令 用于创建文件系统 5 mount命令 用于
  • 华北电力计算机专业排名,华电考研计算机专业排名

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1354计算机软件与理论359 1355计算机软件与理论340 1356计算机软件与理论334 1357计算机软件与理论329 1358计算机软件与理论326 1359计算机软件与理论324 1
  • C++/C++11中引用的使用

    引用 reference 是一种复合类型 compound type 引用为对象起了另外一个名字 引用类型引用 refer to 另外一种类型 通过将声明符写成 d的形式来定义引用类型 其中d是声明的变量名 一 一般引用 一般在初始化变量时
  • Cocos2dx on Qt

    讨论贴在这里 http www cocos2d x org boards 6 topics 8043 page 1 准备 glew 库 bin glew32 dll gt windows system32 include GL gt VC
  • STM32F103时钟配置流程

    知识点 系统复位后 HSI振荡器被选为系统时钟 当时钟源被直接或通过PLL间接作为系统时钟时 它将不能被停止 STM32F103的三个可以作为系统时钟的时钟源 分别是HSI HSE PLL 而PLL的时钟源是HSI 2 内部RC振荡器二分频
  • 华硕计算机cpu怎么超频怎么设置,内存和CPU超频操作_华硕 ROG Rampage VI Apex_主板评测-中关村在线...

    进阶操作 进BIOS可能很多人都是为了去给CPU和内存进行超频 首先按F7进入到高级模式 华硕的主板选择Extreme Tweaker选项卡 有的主板是AI Tweaker或者超频设置等名字 Extreme Tweaker选项卡 内存超频

随机推荐

  • 如何使用postman做接口测试

    常用的接口测试工具主要有以下几种 Postman 简单方便的接口调试工具 便于分享和协作 具有接口调试 接口集管理 环境配置 参数化 断言 批量执行 录制接口 Mock Server 接口文档 接口监控等功能 JMeter 开源接口测试及压
  • Python中is和==(is not和!=)的区别

    Python中有很多种运算符 本文主要记录一下is和 这两种运算符的区别 id 函数是查看该对象所在内存地址 每个对象都有对应的内存地址 如 is 用于判断两个变量引用对象是否为同一个 用于判断引用变量的值是否相等 类似于Java中的equ
  • 华为OD机试 - 按单词下标区间翻转文章内容(Java)

    题目描述 给定一段英文文章片段 由若干单词组成 单词间以空格间隔 单词下标从0开始 请翻转片段中指定区间的单词顺序并返回翻转后的内容 例如给定的英文文章片段为 I am a developer 翻转区间为 0 3 则输出 developer
  • HJ26 字符串排序

    Powered by NEFU AB IN Link 文章目录 HJ26 字符串排序 题意 思路 代码 HJ26 字符串排序 题意 编写一个程序 将输入字符串中的字符按如下规则排序 规则 1 英文字母从 A 到 Z 排列 不区分大小写 如
  • PCL 计算点云法向量并显示

    目录 一 算法原理 1 法向量估计 2 法向量定向 3 表面曲率 4 参考文献 5 法向量定向的理解 6 CloudCompare 二 pcl Normal的定义 三 pcl Normal的几种输出方式 四 计算法线并显示 1 计算输入点云
  • 单点登录(简单的实现)

    假设现在有两个域名 分别为 分别记为client1 client2 client1 com client2 com 一个认证服务器 域名 ssoserver com client1 client2都需要登陆后才能访问到数据 现在想要实现cl
  • 76-C语言-输入班级学生的姓名和三科成绩,按总分排名

    问题 输入50分学生的姓名和三科成绩 按降序输出名字和总分 成绩相同的并列排名 思路 因为要学生排名 且一个学生有姓名 成绩 以及总分 所以弄一个学生的结构体 有多少学生 就输入该结构体的数组 一个for循环 给每个学生赋值 排序 降序 用
  • 【c++中的细节问题】关于typedef的详细用法

    请见 C C typedef用法详解 真的很详细 superhoy的专栏 CSDN博客 c typedef
  • 3.Linux文件管理和 I/O 重定向

    Linux文件管理和 I O 重定向 Linux文件系统目录结构 常见目录说明 根目录 一般根目录下只存放目录 在Linux下有且只有一个根目录 所有的东西都是从这里开始 当你在终端里输入 home 你其实是在告诉电脑 先从 根目录 开始
  • 利用多线程批Put方式压测HBase

    利用多线程批Put方式压测HBase 背景 在正式上生产之前 一定要对集群的组件做稳定性和性能压测 这是常识 这种压测当然不能指望那些只会鼠标点几下网页并经常指责前端页面样式有bug的测试去做 这种稍微有点技术含量的事情 她们其实有心无力
  • Mybatis中的#号与$符号的区别

    1 变量名 可以进行预编译 类型匹配等操作 2 变量名 会转化为jdbc的类型 3 变量名 不进行数据类型匹配 直接替换 4 方式能够很大程度防止sql注入 5 方式无法方式sql注入 6 方式一般用于传入数据库对象 例如传入表名 7 尽量
  • List取交集、并集、差集

    突然被面试官问到这样一个问题 List怎么取交集 我想了一会后说道双重循环 自己都觉得面试官想要的答案应该不是这个 效率太低了 后面问面试官答案 面试官告诉我可以将其中一个llist转成一个map或set 再遍历第二个list的时候判断 m
  • Vision Transformer

    A N I MAGE IS W ORTH 16 X 16 W ORDS TRANSFORMERS FOR I MAGE R ECOGNITION AT S CALE 原文链接地址 https arxiv org abs 2010 11929
  • shell学习:从ini文件中读取参数

    打算编写一个shell脚本来自动备份网站 需要从配置文件中读取一些参数 比如数据库名称 用户名和密码等 我分析了一下wdcp自带的数据库备份脚本mysqlbackup sh 里面仅仅从文件mrpw conf中读取了数据库密码 只用到了cat
  • 面试前需考虑的25个问题

    我曾经在The Simple Dollar上提到自己过去曾组织了大量面试工作 虽然我招聘的通常是技术类职位 但实际问到的问题 因此是有实际价值的 都是无关技术的 一个好的面试问题能使应聘者的本性显露出来 诚实 可信 反应敏锐等等 长期以来
  • vue项目嵌入iframe后访问后端报错

    项目场景 最近的项目中 开发的项目中需要使用到另外的一个即时通讯im项目 当时使用ifram标签进行嵌入 跳转失败 问题描述 在使用ifram进行嵌入后 刷新页面 ifram的地址会直接覆盖掉父类地址进行网页跳转 原因分析 在嵌入的src地
  • 车牌识别系统Matlab算法实现

    车牌识别系统Matlab算法实现 标签 车牌识别 2014 10 29 10 51 1408人阅读 评论 0 收藏 举报 本文章已收录于 分类 机器学习 21 作者同类文章 X plain view plain copy print
  • MindSpore报错“TypeError: parse() missing 1 required positional.“

    1 报错描述 1 1 系统环境 ardware Environment Ascend GPU CPU CPU Software Environment MindSpore version source or binary 1 6 0 Pyt
  • C++知识整理系列(三)—— constexpr常量表达式

    const修饰常量 但是const并未区分编译时常量和运行时常量 而constexpr则只能是编译时常量 在C 11中提出 这篇文章 将详细讲解constexpr 目录 一 常量表达式 二 constexpr变量 三 constexpr函数
  • H264与MPEG中I、P、B帧编码的不同

    暂时没时间去研究I P B帧是否真的在H 264与MPEG中不一样 先转过来 1 H264中I P B 帧编码的基本流程 I 帧编码的基本流程为 1 进行帧内预测 决定所采用的帧内预测模式 2 像素值减去预测值 得到残差 3 对残差进行变换