H264编码原理(二)帧内预测

news2024/9/26 3:25:31

假设你去了一家餐厅吃饭,这家餐厅提供了一个有趣的点餐方式。服务员会根据餐厅最近最受欢迎的菜品组合,推荐九个套餐给你。你的任务是从这九个套餐中找到一个最接近你心中想要的菜品组合的套餐,然后告诉服务员你想替换哪些菜,以得到你理想中的一餐。

通过这种点餐方式,你可以迅速找到与你所想菜品最接近的套餐,只需做少量的调整就能得到满意的组合。

类似地,在H.264编码中,编码器选择一个最合适的预测模式,通过少量的调整(即编码误差)得到最终的编码块,从而实现高效的压缩。

宏块(MacroBlock)

宏块,英文Macroblock,是视频编码技术中的一个基本概念。通过将画面分成一个个大小不同的块来来不同位置实行不同的压缩策略。
在视频编码中,一个编码图像通常划分成若干宏块组成,一个宏块由一个亮度像素块和附加的两个色度像素块组成。一般来说,亮度块为16x16大小的像素块,而两个色度图像像素块的大小依据其图像的采样格式而定,如:对于YUV420采样图像,色度块为8x8大小的像素块。

根据画面的复杂情况,宏块还可以被划分为若干子宏块。比如16X16还可以划分为16个4X4的宏块
每个图像中,若干宏块被排列成片(slice)的形式,视频编码算法以宏块为单位,逐个宏块进行编码,组织成连续的视频码流。

帧内预测

如果一个块或宏块在帧内模式下编码,那么预测块P是基于之前编码并重建(但未滤波)的块形成的。

最终编码的内容是 预测块P和当前块的残差值。

所以本文主要内容是如何产生预测块P。

对于亮度(luma)样本,P 可以为每个4x4子块或16x16宏块形成。对于每个4x4亮度块,总共有9种可选预测模式;对于16x16亮度块,有4种可选模式;色度块也有4 种预测模式,类似于16×16 亮度块预测模式。

4x4亮度预测模式

对于4*4的亮度预测模式
请添加图片描述
左图中A~Q是预测时可能依赖的数据,a~p是需要预测的数据区域。
右图形象的表示了8种预测模式(0~8)不包括2,2是DC模式,参考了所有方向的像素。

下图是对9种预测模式的细化
请添加图片描述

模式编号模式名称基本计算说明
0垂直预测 (Vertical)来自上方相邻块的像素值。
1水平预测 (Horizontal)来自左方相邻块的像素值。
2DC预测 (DC)上方和左方相邻像素值的平均值。
3斜下预测 (Diagonal Down-Left)根据斜下方向相邻块的像素值。
4斜上预测 (Diagonal Down-Right)根据斜上方向相邻块的像素值。
5垂直左预测 (Vertical-Left)根据略微偏左的垂直相邻块的像素值。
6垂直右预测 (Vertical-Right)根据略微偏右的垂直相邻块的像素值。
7水平上预测 (Horizontal-Up)根据略微偏上的水平相邻块的像素值。
8水平下预测 (Horizontal-Down)根据略微偏下的水平相邻块的像素值。

如果需要参考的数据没有怎么办?比如本身在最左边的数据还如何参考左边的?对于这些情况H264协议中都有解决方案,感兴趣可以参考协议文档中的参考实现或者X264的源码。

下面是一个例子,直观展示了9种预测方式产生的预测块是怎样的,同时还给出了The Sum of Absolute Errors (SAE),SAE表示和原图的差异,SAE越大,和原图的差异越大,我们选择SAE最小的一种模式,作为预测模式。
请添加图片描述

16X16亮度预测模式

和4X4的预测模式类似,16X16只有4种预测模式,
请添加图片描述

模式编号模式名称计算说明
0垂直预测 (Vertical)从块上方的样本进行外推预测。
1水平预测 (Horizontal)从块左方的样本进行外推预测。
2DC预测 (DC)使用左方和上方块的像素值均值进行预测。
3平面预测 (Plane)通过对左方和上方块的样本进行线性拟合,生成一个平滑的平面函数用于预测,适用于亮度平滑变化的区域。

也举个例子,
请添加图片描述

8X8色图预测模式

每个宏块的8x8色度分量也有四种预测模式,

和16x16亮度预测模式非常相似,唯一的不同在于模式编号的顺序不同:DC(模式0),水平(模式1),垂直(模式2)和平面(模式3)。

同样的预测模式总是应用于两个色度块。

注意:如果亮度分量中的任何8x8块是以帧内模式编码的,则两个色度块也都是以帧内模式编码的。

帧内预测如何编码

如果我们为每个4x4的宏块都分配一个帧内预测模式,那就需要大量的比特来存储这些模式信息。为了更高效地进行编码,我们可以利用图像的数据特点,即相邻宏块的预测模式通常很相似。

如下图所示,假设A和B的预测模式都是模式2,那么C的预测模式很有可能也是模式2。

请添加图片描述

那么我们如何利用这种特性呢?

我们定义一个计算值,称为most_probable_mode,表示最可能的预测模式。注意,这个值是计算出来的,不需要额外的比特来存储。

具体来说,如果A和B都是4x4的块,并且A、B、C位于同一个slice中(因为slice之间是相互独立的,不会互相参考),most_probable_mode的计算方式如下:

  • most_probable_mode = min(ModeA, ModeB) 否则,most_probable_mode = 2.

每个4x4的块会有一个flag,称为use_most_probable_mode。

  • 如果use_most_probable_mode = 1,预测模式就是most_probable_mode。

  • 如果use_most_probable_mode = 0,就需要分配一个remaining_mode_selector。

然后根据以下规则确定最终的预测模式:

  • 如果remaining_mode_selector < most_probable_mode,预测模式 = remaining_mode_selector。

  • 否则,预测模式 = remaining_mode_selector + 1。

这样设计的原因是为了减少表示预测模式所需的比特数。因为预测模式有9种,如果直接编码需要用4个bit(2^4 = 16),而上面的方法可以用3个bit表示9种预测模式。

通过利用most_probable_mode,我们可以更有效地压缩预测模式,从而提高编码效率,同时减少所需的比特数。

引用

H.264 / MPEG-4 Part 10 White Paper

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2089550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PS快速如何抠图章?

1、选择--色彩范围--颜色选择(反相)--确定 2、选中范围后--按delete删除非选中内容--就能得到图章 3、图层叠加来加深颜色和补全缺失点

合宙低功耗4G模组Air780EQ——开发板使用说明

CORE-AIR780E 开发板是合宙通信推出的基于 Air780E 模组所开发的&#xff0c; 包含电源&#xff0c;SIM 卡&#xff0c;USB&#xff0c;天线&#xff0c;音频等必要功能的最小硬件系统。 以方便用户在设计前期对Air780E模块 进行性能评估&#xff0c;功能调试&#xff0c;软件…

Python__面向对象__多态学习

目录 一、多态 1.多态定义理解 2.实例属性和类属性 3.类相关的函数 (1) 实例方法 (2)类方法 (3)静态方法 一、多态 1.多态定义理解 在Python中&#xff0c;多态是一种特性&#xff0c;类似于一个接口&#xff0c;允许在一个对象中的一个操作可作用在不同类型的对象上…

OpenGL3.3_C++_Windows(36)

PBR_IBL镜面部分 镜面部分并不能像漫反射部分一样将BRDF部分像常量一样提取出来&#xff0c;因为它整个积分上不是常数&#xff0c;因为它受到wi和w0的影响&#xff0c;就比如一个x的等式&#xff0c;不能把x部分提取出来一样&#xff0c;他是随着等式变化的如果试图解算所有入…

uni-app开发日志:将schema2code生成的新增页和修改页整合成一页

有没有想过&#xff0c;add和edit页面其实没多大差别&#xff1f; 我之前自研的系统add和edit都是一个页面&#xff0c;只要判断一下当前有没有id传递来&#xff0c;为空来就是新增。 这样如果页面修改时&#xff0c;才能尽量少改动代码&#xff0c;少出错。 对比add.vue和edit…

企业海外新闻稿发布的转型之路:从纸媒到数字化

在全球化进程加速的今天&#xff0c;企业的传播渠道和方式也在经历着深刻的变革。曾经占据主导地位的纸质媒体&#xff0c;逐渐被灵活高效的海外媒体网站所取代。企业新闻稿发布形式的转变&#xff0c;不仅体现了技术进步和媒体环境的变化&#xff0c;也标志着企业全球传播战略…

日结兼职零工平台小程序系统开发制作方案

目前在大学生和自由职业者群体中&#xff0c;对短期兼职零工的需求日益增长。同时&#xff0c;企业与个人雇主也面临着季节性和临时性用工的需求。 日结兼职零工小程序系统为寻求日结工作的求职者和需要短期劳动力的企业提供一个快速匹配的平台。实现快速发布日结兼职工作信息…

5年经验社招后端面试经历分享

这是一位读者去年的面经&#xff0c;他在 2023 年在百度毕业&#xff0c;后面拿到了快手、滴滴和京东的 offer&#xff0c;最终选择了京东&#xff0c;薪资总包是 51w。 下面是正文。 背景介绍 大家好&#xff0c;本人 2018 年毕业于一所普通 211 学校&#xff0c;专业是软件…

【Redis】Redis 的消息队列 List、Streams—(六)

目录 一、消息队列二、List 方案三、Streams 方案 一、消息队列 我们一般把消息队列中发送消息的组件称为生产者&#xff0c;把接收消息的组件称为消费者&#xff0c;下图是一个通用的消息队列的架构模型&#xff1a; 消息队列在存取消息时&#xff0c;必须要满足三个需求&…

基于yolov10的PCB检测算法研究

内容&#xff1a;项目将YOLOV10创新后的PCB检测算法成功部署到GD32H757上&#xff0c;实现PCB缺陷的工业产线实时检测。 项目主要支持开源代码&#xff1a;HomiKetalys/gd32ai-modelzoo: Provide deployable deep learning models on gd32 (github.com) &#xff08;想了解将…

群晖7.2.1 半洗白后安装AME

1. 群晖打开SSH 2. Xshell登录群晖 用管理员账户登录&#xff0c;然后使用sudo -i 获取root权限&#xff0c;sudo -i是要再次验证管理员密码 sudo -iSA6400还需要运行这个命令 /usr/syno/etc/rc.sysv/apparmor.sh stop #DSM7.2 AME版本3.1.0-3005强制解锁激活命令 curl -sk…

最常用集合 - ArrayList详解

ArrayList介绍 ArrayList实现了List接口&#xff0c;是顺序容器&#xff0c;即元素存放的数据与放进去的顺序相同&#xff0c;允许放入null元素&#xff0c;底层通过数组实现。除该类未实现同步外&#xff0c;其余跟Vector大致相同。每个ArrayList都有一个容量(capacity)&…

MeshAnything V2来了!30秒生成建模师级Mesh!最大可生成面数提升至1600.

GitHub已揽星1.9k的MeshAnything项目上新了V2版本&#xff0c;由来自南洋理工大学、清华大学、帝国理工学院、西湖大学等研究人员完成。 MeshAnything V2相比V1&#xff0c;使用了最新提出的Adjacent Mesh Tokenization&#xff08;AMT&#xff09;算法&#xff0c;将最大可生…

mysql学习教程,从入门到精通,MySQL介绍(1)

1、MySQL 教程 本教程是为初学者准备的&#xff0c;以帮助他们理解与MySQL语言相关的基础知识和高级概念。 mysql MySQL 是最流行的关系型数据库管理系统&#xff0c;在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System&#xff1a;关系数据库管理系…

浏览器的高级搜索

一、背景 通常我们在浏览器搜索内容都是直接在输入框输入我们想要查询的内容&#xff0c;但是这样搜索出来的内容关联性不是很高&#xff0c;很多内容都是与我们搜索内容无关&#xff0c;会浪费我们大量的时间去查找内容。比如&#xff1a;我想要搜索网页中包含《游戏科学》这4…

kafak集群搭建-基于kRaft方式

kafak集群搭建-基于kRaft方式 1、服务器规划2、kafka集群部署配置2.1、解压三个kafka2.2、配置/config/kraft/server.properties 3、启动kafka集群4、SpringBoot集成kafka的kRaft集群4.1、消费者4.2、生产者4.3、配置类4.4、实体类4.5、JSON工具类4.6、项目配置文件4.7、测试类…

【web开发】Spring Boot 快速搭建Web项目

Date: 2024.08.30 13:52:20 author: lijianzhan 简述&#xff1a;【Spring Boot 快速搭建Web项目应用】是一篇关于Java Web项目构建的文章&#xff0c;主要讲解了如何借助Maven工具来管理和构建Web应用程序。Maven是Java开发中广泛使用的自动化构建工具&#xff0c;能够帮助开…

顺序循环队列

顺序循环队列 队头插入元素&#xff0c;队尾删除元素 本来应该判空和判断是否存满的条件都是&#xff1a;队头 队尾&#xff0c;但这样就没办法区分了&#xff0c;所以&#xff0c;就牺牲一个空间&#xff08;比如长度为10&#xff0c;但只能存9个&#xff09;&#xff0c;这…

基层医疗云HIS系统源码:云计算、大数据等现代信息技术研发

云HIS源码&#xff0c;基层云HIS系统源码&#xff0c;基层医疗云HIS系统 利用云计算、大数据等现代信息技术研发的基层医疗云HIS系统实现了医院信息化从局域网向互联网转型&#xff0c;重新定义医疗卫生信息化建设的理念、构架、功能和运维体系。实现了医院信息化由局域网向互…

CAN协议通信 学习笔记

文章目录 1.CAN通信简介2.物理层2.1 CAN总线的电气特性2.2 CAN的位同步机制&#xff08;了解&#xff0c;用于理解CAN的初始化参数的配置原理&#xff09;硬同步方式重新同步方式 2.3 CAN对比其他常用协议的优势 3. 数据链路层3.1 CAN协议的数据帧3.2 仲裁机制3.3 访问控制3.4 …