【H.264/AVC视频编解码技术详解】十五、H.264的变换编码(二):H.264整数变换和量化的实现

简介: 《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.

《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看!

“纸上得来终觉浅,绝知此事要躬行”,只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会!

链接地址:H.264/AVC视频编解码技术详解

GitHub代码地址:点击这里


一、H.264的整数变换

变换和量化编码在图像和视频的压缩编码中具有重要作用。通过变换编码,空间域信息可以被转换到频率域,使其能量集中于低频区域,并使其码率相对于空间信号有大幅下降。H.264定义了4×4的整数离散余弦变换(简称整数变换),相对浮点数的离散余弦变换,整数变换具有更低的运算复杂度,更适用于移动设备等适用于低功耗的设备运行。

H.264的整数变换的主要流程如下图所示:

标准的离散余弦变换经过多重运算和修正后,可以用下式表示:

在上式中,右侧的矩阵通常可以表示为常量矩阵,且并入量化中实现,左侧的变换只剩下加减和位移操作。通过这种方式构成了实际的整数变换操作。很明显,相对于原始的DCT变换,该变换的运算量明显要小得多。


二、量化

量化运算实际上并非视频压缩领域首先使用的。在通信信号处理等领域,量化技术早就获得广泛的应用。在模拟-数字信号转化过程中,首先需要对模拟信号按照某个频率进行采样,获得离散时间信号,其取值范围为一个连续区间。此时的离散时间信号尚不能称之为数字信号。

为了对信号进行数字化,必须对离散时间信号进行量化,将连续的取值范围区间也进行离散化。这样的取值位置离散,采样值也是离散的信号称之为数字信号。

在一维信号的量化过程中,我们就已经知道,对于同一模拟信号,使用不同的参数进行量化的结果可能差别非常大,如下图:

上图的量化步长更小,因此失真明显比量化步长更大的下图更小。

在H.264中,量化方法选择了运算较为简单的标量量化。通常标量量化的原理为:

FQ = round(y/QStep)

在上式中,y表示待量化的原始数值,FQ为量化后的值,QP为量化参数。量化的相反过程称之为反量化,其原理为:

y' = QStep × FQ

量化与反量化关键的因素在于量化参数QP。量化参数决定了量化步长,而量化步长决定了量化过程的精细度:QP越小,量化步长越小,量化过程中的真实数据损失越小。QP每增加6,量化步长增大一倍。在H.264中,通常亮度分量的QP取值范围为[0,51],色度分量QP的取值范围为[0,39]。

在H.264的量化过程中,还需要实现变换中的Ef矩阵按元素相乘的操作。量化和矩阵Ef的运算可通过与量化参数QP相关的预定义矩阵实现。

16×16模式与色度分量的变换量化

对于4×4模式的色度分量与16×16模式,其变换量化方法与4×4模式的亮度分量有些不同。

对于16×16的亮度块,变换量化的块包括两个部分:直流部分DC和交流部分AC。16×16亮度块的变换和量化依然要分为16个4×4个子块实现,而与4×4模式不同的是,16×16模式首先抽取出16个4×4系数矩阵的直流分量,组成一个新的4×4矩阵,再对这个直流矩阵进行Hadamard变换后再进行量化。Hadamard变换的原理如下式:

对于4×4模式的色度分量,同样需要抽取直流分量进行Hadamard变换然后再进行量化。然而色度分量的大小为8×8,每个分量分为4个4×4个子块,因此Hadamard变换的直流分量矩阵为2×2大小:

目录
相关文章
|
移动开发 缓存 网络协议
Websocket协议原理及Ws服务器代码实现
Websocket协议原理及Ws服务器代码实现
|
前端开发 JavaScript Java
校园二手交易系统 毕业设计 JAVA+Vue+SpringBoot+MySQL(一)
校园二手交易系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
1439 1
|
人工智能 API
别问谁更强,GPT-5.5和Opus4.7综合对比
本文不比模型“谁更强”,而是聚焦真实开发场景:GPT-5.5擅长短循环任务——查文档、跑命令、修小bug,省去频繁切换;Opus 4.7强在长交付任务——重构、审查、Agent执行,减少中断催促。选型关键不在跑分,而在任务形状。(239字)
|
12月前
|
人工智能 自然语言处理 搜索推荐
文章“找茬”神器——媒体行业AI智能校对方案
年初DeepSeek大模型火爆以后,各行各业都在加速建设AI相关的场景,媒体行业无疑是大模型场景适配较好的一个行业。大模型凭借强大的内容生成能力,可以深度渗透内容生产的全链路环节,从热点事件的智能抓取、新闻稿件的快速生成,文章智能校对、个性化润色,大模型几乎可以重构传统内容生产流程。
1065 15
|
机器学习/深度学习 人工智能 算法
基于YOLOv8的FPS射击类游戏人物识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
本项目基于YOLOv8与PyQt5开发,专为FPS射击类游戏人物识别设计,具备高精度、实时检测能力。包含完整训练代码、数据集及图形界面,支持图片、视频、摄像头多模式输入,提供从模型训练到部署的全流程解决方案,开箱即用,适合学术研究与AI工程实践。
基于YOLOv8的FPS射击类游戏人物识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
|
JavaScript 开发工具 iOS开发
如何使用DevEco Studio搭建鸿蒙开发环境?
如何使用DevEco Studio搭建鸿蒙开发环境?
|
JavaScript 前端开发 数据格式
Ant Design Vue 日期选择器,绑定的日期和框内不一致,日期格式化,纠正时差
Ant Design Vue 日期选择器,绑定的日期和框内不一致,日期格式化,纠正时差
1582 0
Ant Design Vue 日期选择器,绑定的日期和框内不一致,日期格式化,纠正时差
|
JavaScript 物联网 开发者
WebGL的3D框架比较 ThingJS 和 Three.js
随着flash的没落,浏览器的原生能力的兴起。在3D方面WebGL不管从功能还是性能方面都在逐渐加强。2D应用变为3D应用的需求也越来越强烈。 win10的画图板支持3D图片,2d工具photoshop也开始逐步集成了3D工具。
5851 0
在Linux中,如何查看磁盘分区?
在Linux中,如何查看磁盘分区?
|
存储 缓存 监控
快速掌握Redis优化要点,告别性能瓶颈!
# Redis优化指南 了解如何提升Redis性能,从读写方式(整体与部分)、KV size、Key数量、读写峰值、命中率、过期策略、平均穿透加载时间、可运维性、安全性等方面着手。选择合适的读写策略,如只整体读写或部分读写变更,优化KV size避免过大或差异过大,合理管理Key数量,应对不同读写峰值,监控命中率并持续优化,设置智能过期策略,减少平均穿透加载时间,确保高可运维性并强化安全性。一起探索Redis的性能潜力!
3427 5