H.264 视频编码器 变换编码分析

2024-03-24 23:38

本文主要是介绍H.264 视频编码器 变换编码分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

H.264 视频编码器 变换编码分析

一. 变换编码分为两部分:变换,量化,以及在之后的重建环路中对应的反量化和反变换。
接下来对各部分进行分析
二. 变换

根据残差数据的类型不同,H264 High Profile中会使用到4种不同的变换:

  1. 采用 Intra4x4 预测模式和 Intra16x16 预测模式得到的亮度分量预测残差,使用4x4离散余弦变换(DCT);
  2. 采用 Intra8x8 预测模式得到的亮度分量预测残差使用8x8离散余弦变换(DCT);
  3. 采用 Inter 预测模式得到的亮度分量预测残差,如果预测模式块大小,小于等于8x8,则使用4x4离散余弦变换,否则编码器要在4x4和8x8离散余弦变换之间进行选择。
  4. 色度分量的预测残差全部使用4x4离散余弦变换。
  5. 其中,4x4哈达玛变换用于 Intra16x16 预测残差直流分量的二次变换;2x2哈达玛变换用于色度分量直流系数的二次变换
三. 原始数学原理:DCT变换原理

DCT变换是一种正交变换,因为具有良好的去相关性和压缩效果,并且有快速算法可以实现,因此在图像编码中被广泛使用。

但是由于变换矩阵C的变换系数中存在无理数,在编解码的计算过程中计算结果会带来误差,反变换和变换之前的结果会不一样带来误差。

在H. 264编码标准中,进行了整数变换的操作,并且可以不使用乘法操作,其中的一部分变换计算合并到量化过程中去。

四. H.264中的整数余弦变换

整数余弦变换的对象:

  1. 4x4子宏块的亮度分量
  2. 4x4子宏块的色度分量
1.变换

也就是说,4x4的残差亮度书看剧和2x2的残差色度数据需要进行二维变换,使得高频分量大多数为零,从而达到和DCT变换相似的数据压缩效果。
在这里插入图片描述
其中,Ef 矩阵中a=1/2,b=√(2/5).
这里的 圈乘 运算符表示对同一位置的两个矩阵元素做一次的乘法操作。这一部分运算被合并到量化和反量化中,确保了整数余弦变换和DCT变换有相似的压缩效果。因此在编码器的标准中,变换过程只包括括号内的操作:
在这里插入图片描述

2.反变换

在H.264标准中,反变换矩阵Cinv 并不是变换矩阵Cf的逆矩阵,而是进一步做了整数化处理。因此需要其他运算来保证反变换的正确性。在H264标准中这部分也同样被合并到量化,反量化的过程中完成,这样保证在反变换的过程中同样只使用加法和移位操作。

反变换矩阵Cinv如下:
在这里插入图片描述

3. 分层的二维整数余弦变换:直流分量增加hardmard变换

首先,对于4x4子宏块的残差做二维整数余弦变换
其次,对8x8色度块的直流分量和帧内预测的16x16宏块中的16个子宏块的直流分量进行hardmard变换。如下图所示:
在这里插入图片描述
这时由于在8x8的色度块和帧内预测模式的16x16亮度快中,每个子宏块的直流分量之间还有很强的相关性。对于这些子宏块的支流分量还要进行Hardmard变换来提高数据的压缩效率。

8x8色度块和帧内预测16x16亮度快的直流分量的hradmard变换矩阵分别为:
在这里插入图片描述
Hardmard逆变换矩阵和变换矩阵相同。

4. 针对高清晰视频领域的应用,提出对亮度快使用更大尺寸的整数余弦变换:8x8变换块

相对于4x4数据块的整数比那还,新的建议增加了8x8数据块使用整数余弦变换。与此对应,新的建议中,预测模式和量化部分也做了部分修改。

8x8数据块的整数余弦变换:
首先可以提高数据压缩的性能,因为在实际中8x8数据块的数据相关性比4x4的数据块相关性要高,因此压缩性能要更好,可以减少大约10%的比特率。
其次,8x8数据块的整数余弦变换有利于图像中的频率分量,可以提高图像显示细节。

这篇关于H.264 视频编码器 变换编码分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843164

相关文章

hevc和H.264格式的区别

HEVC(High Efficiency Video Coding)和H.264(也称为Advanced Video Coding,AVC)都是视频压缩标准,但它们之间存在一些显著的区别,主要集中在压缩效率、资源需求和兼容性方面。 压缩效率 HEVC,也被称为H.265,提供了比H.264更高的压缩效率。这意味着在相同的视频质量下,HEVC能够以大约一半的比特率进行编码,从而减少存储空间需求和

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

高度内卷下,企业如何通过VOC(客户之声)做好竞争分析?

VOC,即客户之声,是一种通过收集和分析客户反馈、需求和期望,来洞察市场趋势和竞争对手动态的方法。在高度内卷的市场环境下,VOC不仅能够帮助企业了解客户的真实需求,还能为企业提供宝贵的竞争情报,助力企业在竞争中占据有利地位。 那么,企业该如何通过VOC(客户之声)做好竞争分析呢?深圳天行健企业管理咨询公司解析如下: 首先,要建立完善的VOC收集机制。这包括通过线上渠道(如社交媒体、官网留言

百度OCR识别结构结构化处理视频

https://edu.csdn.net/course/detail/10506

打包体积分析和优化

webpack分析工具:webpack-bundle-analyzer 1. 通过<script src="./vue.js"></script>方式引入vue、vuex、vue-router等包(CDN) // webpack.config.jsif(process.env.NODE_ENV==='production') {module.exports = {devtool: 'none

Java中的大数据处理与分析架构

Java中的大数据处理与分析架构 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来讨论Java中的大数据处理与分析架构。随着大数据时代的到来,海量数据的存储、处理和分析变得至关重要。Java作为一门广泛使用的编程语言,在大数据领域有着广泛的应用。本文将介绍Java在大数据处理和分析中的关键技术和架构设计。 大数据处理与

段,页,段页,三种内存(RAM)管理机制分析

段,页,段页         是为实现虚拟内存而产生的技术。直接使用物理内存弊端:地址空间不隔离,内存使用效率低。 段 段:就是按照二进制文件的格式,在内存给进程分段(包括堆栈、数据段、代码段)。通过段寄存器中的段表来进行虚拟地址和物理地址的转换。 段实现的虚拟地址 = 段号+offset 物理地址:被分为很多个有编号的段,每个进程的虚拟地址都有段号,这样可以实现虚实地址之间的转换。其实所谓的地

mediasoup 源码分析 (八)分析PlainTransport

mediasoup 源码分析 (六)分析PlainTransport 一、接收裸RTP流二、mediasoup 中udp建立过程 tips 一、接收裸RTP流 PlainTransport 可以接收裸RTP流,也可以接收AES加密的RTP流。源码中提供了一个通过ffmpeg发送裸RTP流到mediasoup的脚本,具体地址为:mediasoup-demo/broadcaste

Java并发编程—阻塞队列源码分析

在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。   在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了D

线程池ThreadPoolExecutor类源码分析

Java并发编程:线程池的使用   在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:   如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。   那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?