【H.264/AVC视频编解码技术详解】十四、H.264的变换编码(一)——矩阵运算与正交变换基本概念

本文主要是介绍【H.264/AVC视频编解码技术详解】十四、H.264的变换编码(一)——矩阵运算与正交变换基本概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

GitHub代码地址:点击这里


1. 矩阵的定义

矩阵,英文称为"Matrix",是数学中一个非常重要的概念。从形式上看,矩阵可以用一个m行n列的数组成的表格表示。如下图可表示一个4行4列的方形矩阵:

在实际应用中,矩阵可以在多个技术领域发挥重要作用,如音视频压缩编码、机器学习、人工智能等领域。
在这里插入图片描述

2. 矩阵的运算

矩阵必须在计算中才能与其他数据进行交互。在《线性代数》中我们已经清楚地知道,矩阵可以进行求和、数乘和与矩阵相乘等运算。其中矩阵的求和与数乘运算十分简单:

  • 矩阵求和:同型矩阵可以求和,即将对应元素求和组成新的矩阵;
  • 矩阵数乘:任何矩阵都可与实数相乘,即将每个元素与该数字相乘组成新的矩阵;

而相比之下,矩阵与矩阵相乘会略显复杂,需要满足必要条件,即矩阵1的宽必须等于矩阵2的高方可相乘。乘积矩阵的高和宽分别为矩阵1的高和矩阵2的宽,如下图表示:
这里写图片描述

其中,乘积矩阵的元素的计算方法为:
这里写图片描述

通常,我们将只有一行或一列的矩阵称之为向量。根据排列的不同,按行或列排列的向量分别称之为行向量和列向量。

3. 向量和矩阵的线性变换

向量的线性变换定义为:向量y的每一个元素都是向量x中元素的线性组合,则y是x的线性变换。假设有向量[x1, x2, x3]和向量[y1, y2, y3],两个向量满足以下关系:

  • y1 = a11 * x1 + a12 * x2 + a13 * x3
  • y2 = a21 * x1 + a22 * x2 + a23 * x3
  • y3 = a31 * x1 + a32 * x2 + a33 * x3

那么我们称向量[y1, y2, y3]可以被向量[x1, x2, x3]线性表示,以公式形式则表示为y=A·x。其含义可表示为矩阵与向量相乘:

这里写图片描述

矩阵A即为该线性变换的矩阵。

将向量的变换推广,矩阵可以视为由向量构成,因此线性线性变换同样适用于矩阵的变换:

这里写图片描述

4. 向量的正交性、正交矩阵和正交变换

要了解向量的正交性,首先应了解向量的内积的概念。在“不严格”的条件下,我们暂且可以将向量的内积理解为数量积,即两个相同长度向量对应元素乘积的总和。用公式表示为:

这里写图片描述

而向量的正交,等价于两个向量的内积为0。即:

这里写图片描述

在二维和三维空间内直观地表示,两个正交向量相互垂直:
这里写图片描述

由于矩阵可视为由多个列向量构成,那么多个两两正交的向量可以构成正交矩阵。一个矩阵是正交矩阵需要满足的条件有:

  • 行数和列数相等,即正交矩阵都为方阵;
  • 每一个列向量均为单位向量,即长度均为1;
  • 各列向量两两正交;

前面提到,每一个矩阵都可以与一个线性变换对应。那么如果一个线性变换对应的变换矩阵是正交矩阵,那么该变换就是一个正交变换。正交变换的显著特点之一是,向量经过正交变换后长度不会发生变化。


5. 离散余弦变换

离散余弦变换 (Discrete Cosine Transform, DCT)类似于一种实数类型的离散傅里叶变换(DFT),其定义有多种形式(可参考维基百科:离散余弦变换)。常用场合中使用的离散余弦变换是一个正交变换,其正变换和逆变换的计算方法如:

这里写图片描述

这里写图片描述

由于DCT具有类似于DFT的特性,DCT也可以实现如信息能量集中的功能。对于图像数据,DCT可以有效将大部分的能量集中与直流和低频部分,这也成为视频压缩中变换编码的理论基础之一。实际上,DCT长期应用与多种图像和视频的压缩编码标准中:

  • 视频:MPEG-1/MPEG-2;
  • 图像:JPEG

在H.264及更新的视频压缩标准中,采用的是DCT的优化改进版——整数变换。相对于浮点类型的离散余弦变换,整数变换有效降低了变换操作的运算复杂度,提升了编解码器的运行效率。

这篇关于【H.264/AVC视频编解码技术详解】十四、H.264的变换编码(一)——矩阵运算与正交变换基本概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)