视频编解码 — DCT变换和量化

news2024/11/25 14:53:25

目录

视频编码流程

DCT变换

Hadamard变换

量化

H264中的DCT变换和量化

H264各模式的DCT变换和量化过程

1、亮度16x16帧内预测块

2,其它模式亮度块

3,色度块

小结


视频编码流程

DCT变换

        离散余弦变换

        它能将空域信号转换到频率上表示,并能够比较好的去除相关性。

        对于图像来说,空域是平时看到的图像,频率是图像做完DCT变换之后的数据。

        DCT变换是对残差块做的,通常情况下是在4X4的子块上进行变换的

       

二维DCT变换公式如下,f(i,j)是指第(i,j)位置点的信号值,N是采样点的总个数

        计算公式:

F(u,v) = c(u)c(v)\sum_{i=0}^{N-1} \sum_{j=0}^{N-1}F(i,j)cos\begin{bmatrix} \frac{i+0.5\Pi }{N}u \end{bmatrix} cos\begin{bmatrix} \frac{j+0.5\Pi }{N}v \end{bmatrix}

其中 c(u),c(v)=\left\{\begin{matrix} \sqrt{\frac{1}{N}},u,v = 0 \\ \sqrt{\frac{2}{N}},others \end{matrix}\right.

Y = AXA^T

        其中       X为4x4 残差块

                        A矩阵如下

\begin{bmatrix} \frac{1}{2}cos(0) & \frac{1}{2}cos(0) &\frac{1}{2}cos(0) & \frac{1}{2}cos(0) \\ \sqrt{\frac{1}{2}}cos(\frac{\Pi }{8}) & \sqrt{\frac{1}{2}}cos(\frac{3\Pi }{8}) &\sqrt{\frac{1}{2}}cos(\frac{5\Pi }{8}) & \sqrt{\frac{1}{2}}cos(\frac{7\Pi }{8})\\ \sqrt{\frac{1}{2}}cos(\frac{2\Pi }{8}) & \sqrt{\frac{1}{2}}cos(\frac{6\Pi }{8}) &\sqrt{\frac{1}{2}}cos(\frac{10\Pi }{8}) & \sqrt{\frac{1}{2}}cos(\frac{14\Pi }{8})\\ \sqrt{\frac{1}{2}}cos(\frac{3\Pi }{8}) & \sqrt{\frac{1}{2}}cos(\frac{9\Pi }{8}) &\sqrt{\frac{1}{2}}cos(\frac{15\Pi }{8}) & \sqrt{\frac{1}{2}}cos(\frac{21\Pi }{8}) \end{bmatrix}

        cos函数有小数,计算速度慢

Hadamard变换

        一定程度上粗略的代替 DCT 变换,从而用来简化运算。

        计算公式:

                                ​​​​​​​        ​​​​​​​        Y = AXA^T

         

        Y = \begin{bmatrix} 1 & 1 & 1 & 1\\ 1 & 1 & -1 & -1 \\ 1 & -1 & -1 & -1 \\ -1 & -1 & -1 & -1 \end{bmatrix}X\begin{bmatrix} 1 & 1 & 1 & 1\\ 1 & 1 & -1 & -1 \\ 1 & -1 & -1 & -1 \\ -1 & -1 & -1 & -1 \end{bmatrix}

        没有浮点运算,计算速度快

量化

        将图像块变换到频域后,AC系数比较多,一般幅值比较小,通过去除一些AC系数,达到压缩的目的。

        量化公式

        z=round(\frac{y}{QStep})

z是量化后的系数;y是变换系数;round函数是四舍五入

QP与QStep之间有转换关系

通常QStep值越大,DC系数和AC系数被量化成0的概率越大,压缩程度越大。

值太大会造成一个个块状效应,严重的时候出现马赛克。

值小的话,压缩程度比较小,图像失真比较小,码流比较大

H264中的DCT变换和量化

H264为了减少这种浮点运算带来的误差,将DCT变换成整数变化,DCT变换中的浮点运算和量化过程合并,这样就只有一次浮点运算过程。

H264的整数变化和量化,公式如下:

Y = AXA^T

Y=\begin{bmatrix} \frac{1}{2} & \frac{1}{2} & \frac{1}{2} & \frac{1}{2} \\ \sqrt{\frac{1}{2}}cos\frac{\Pi }{8} & \sqrt{\frac{1}{2}}cos\frac{3\Pi }{8} & \sqrt{\frac{1}{2}}cos\frac{3\Pi }{8} &\sqrt{\frac{1}{2}}cos\frac{\Pi }{8}\\ \frac{1}{2} & -\frac{1}{2} & -\frac{1}{2} & \frac{1}{2} \\ \sqrt{\frac{1}{2}}cos\frac{3\Pi }{8} & \sqrt{\frac{1}{2}}cos\frac{\Pi }{8} & \sqrt{\frac{1}{2}}cos\frac{\Pi }{8} &\sqrt{\frac{1}{2}}cos\frac{3\Pi }{8}\\ \end{bmatrix}X \begin{bmatrix} \frac{1}{2} & \sqrt{\frac{1}{2}}cos\frac{\Pi }{8} & \frac{1}{2} & \sqrt{\frac{1}{2}}cos\frac{3\Pi }{8}\\ \frac{1}{2} & \sqrt{\frac{1}{2}}cos\frac{3\Pi }{8} & -\frac{1}{2} & -\sqrt{\frac{1}{2}}cos\frac{\Pi }{8} \\ \frac{1}{2} & -\sqrt{\frac{1}{2}}cos\frac{3\Pi }{8} & -\frac{1}{2} & \sqrt{\frac{1}{2}}cos\frac{\Pi }{8} \\ \frac{1}{2} & -\sqrt{\frac{1}{2}}cos\frac{\Pi }{8} & \frac{1}{2} & -\sqrt{\frac{1}{2}}cos\frac{3\Pi }{8} \end{bmatrix}

 将DCT变换一步步修改为整数变换,最后H264的DCT变换变成了整数变换。

Y = \begin{bmatrix} 1 & 1 & 1 & 1\\ 1 & 1 & -1 & -2 \\ 1 & -1 & -1 & -1 \\ 1 & -2 & 2 & -1 \end{bmatrix}X \begin{bmatrix} 1 & 2 & 1 & 1\\ 1 & 1 & -1 & -2 \\ 1 & -1 & -1 & 2 \\ 1 & -2 & 1 & -1 \end{bmatrix}\bigotimes \begin{bmatrix} a^{2} & \frac{ab}{2} & a^{2} & \frac{ab}{2}\\ \frac{ab}{2} & \frac{b^{2}}{4} & \frac{ab}{2} & \frac{b^{2}}{4}\\ a^{2} & \frac{ab}{2}& a^{2}& \frac{ab}{2}\\ \frac{ab}{2} & \frac{b^{2}}{4} & \frac{ab}{2}& \frac{b^{2}}{4} \end{bmatrix}

a = \frac{1}{2},b = \frac{1}{2}cos\frac{\Pi }{8}​​​​​​​

量化

        z=round(\frac{y}{QStep}) 变成        z = round(\frac{\acute{y}}{QStep}PF)

 PF = \left\{\begin{matrix} {a}^2 , (0,0)(2,0)(0,2)(2,2) \\ \frac{​{b}^2}{4}, (1,1)(1,2)(3,1)(3,3) \\ \frac{ab}{2} , others \end{matrix}\right.

H264各模式的DCT变换和量化过程

1、亮度16x16帧内预测块

亮度16x16,首先被划分成16个4x4的小块做整数变化。变化之后将164x4小块的DC系数都拿出来,组成4x4DC再对这个4x4的DC进行Hadamard变换。然后,再总体进行量化操作。

2,其它模式亮度块

对于除亮度16x16帧内预测块之外的其它亮度块,都是直接划分成4x4的块进行整数变化,之后再进行量化操作。

3,色度块

对于YUV420图像,色度块大小是8x8,现将8x8色度块划分成4个4x4的小块做整数变换。变换之后将4个小块的DC系数拿出来,组成2x2的DC块,再对这个2x2的DC块进行hadamard变换。最后总体进行量化操作。

小结

        DCT变化主要是将图像从空域转换到频域,并将图像的高频和低频信息分离开来。高频信息数据多,但是幅值比较小,在高频信息量化过程中能够比较容易被量化成0,这样达到压缩的目的。

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

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

相关文章

建造者模式

文章目录定义优点使用场景代码实现定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 4个角色: Product产品类:通常是实现了模板方法模式,也就是有模板方法和基本方法Builder抽象建造者&#xf…

PyQt5可视化编程-事件、信号和对话框

一、概述: 所有的应用都是事件驱动的。事件大部分都是由用户的行为产生的,当然也有其他的事件产生方式,比如网络的连接,窗口管理器或者定时器等。调用应用的exec_()方法时,应用会进入主循环,主循环会监听和分发事件。…

算法题:整数除法

一.题目描述以及来源 给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 *、除号 / 以及求余符号 % 。 注意: 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345…

MP157-2-TF-A移植:

MP157-2-TF-A移植:1. TF-A移植:1.1 新建开发板的设备树1.2 修改设备树电源管理1.3修改TF卡和EMMC设备树1.4 修改USBOTG设备树2 编译测试2.1 Makefile.sdk 修改内容:2.2 编译命令:正点原子第九章内容:自己记的笔记&…

SpringBoot(One·上)

SpringBoot一、简介概述Spring Boot特性SpringBoot四大核心二、SpringBoot项目分析1、创建第一个案例结构目录和pom文件2、Springboot集成mvcSpringboot核心配置文件application.propertiesSpringboot核心配置文件application.yml或者application.yamlapplication.ymlapplicati…

Allegro削铜皮详细操作指导

Allegro削铜皮详细操作指导 Allegro可以编辑任意形状的铜皮,下面介绍几种削铜皮的方式 任意形状,shape-manual Void/cavity-Polygon 鼠标左键点击铜皮,铜皮会被亮起来 画出需要的形状 完成后如下图 方形shape-manual Void/cavity-Rectangular 同样的选择铜皮,画出需要…

通过 js 给元素添加动画样式animation属性 ,以及 perspective 属性探究

学习关键语句: js添加动画效果 js控制元素animation属性 写在前面 在制作组件的过程中呢 , 突然觉得这个动画啊应该由用户来决定到底是个啥样 , 但是怎么让用户操作这一步呢 ? 总不能让用户自己去写 css keyframe 吧 , 所以便有了这篇文章 , 同时 , 这篇文章的下半部分我们会…

Python+Selenium:Google patent数据爬取

准备工作,已搭建Python环境,安装Selenium pip install selenium -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 步骤1: 根据Chrome版本下载ChromeDriver 下载链接地址: ChromeDriver - WebDriver for Chrome - Downloads 如在帮助——>关于Ch…

车道线检测-lanedet

源码:https://github.com/Turoad/lanedet 这是一个常见的检测网络整合版本,目前包括的检测网络有: 模型论文介绍 SCNN,RESA论文介绍,UFLD介绍,laneNet|其它相关模型,LaneATT介绍 数据集介绍…

机器学习之归一化

机器学习之归一化1.目的1.1损失函数求解问题1.2 归一化目的2. 归一化2.1 最大值最小值归一化2.2 标准化1.目的 1.1损失函数求解问题 线性回归Loss函数梯度公式 参数含义θ\thetaθ函数参数α\alphaα学习率xjix^i_{j}xji​x:数据集,i:样本,j:特征 【数…

OPengl学习(二)——opengl环境搭建

文章目录0、 概念/准备1、VSOpengl快速添加手动编译2、QT中使用opengl1.pro配置文件2.引入头文件 继承QGLWidget3.实现三个主要函数3、引用0、 概念/准备 opengl官网地址 1、OpenGL 函数库相关的 API 有核心库(gl),实用库(glu&a…

自动化状态监测和工业4.0解决方案-Softing uaGate SI

某公司为其注塑和反应/挤出系统采用了uaGate SI网关技术并实行了开放且独立于平台的OPC UA标准,以用于设备状态自动化监控,这有助于提高产量并避免机器停机。 自动化状态监测提高了产量并且可避免机器停机。为了将其设备控制系统与IT系统相连接起来&…

最小生成树(Prim算法与Kruskal算法)

一、什么是最小生成树 一个连通图的生成树是一个极小的连通子图,它含有图中全部的n个顶点,但只有足以构成一棵树的n-1条边。我们把构造连通网的最小代价生成树称为最小生成树。 例如下图中①、②、③都是左侧图的生成树,但③是构…

k8s的亲和调度

k8s的亲和调度 出于高效通信等需求,偶尔需要把一些Pod对象组织在相近的位置(同一节点、机架、区域或地区等),例如应用程序的Pod及其后端提供数据服务的Pod等,我们可以认为这是一类具有亲和关系的Pod对象。 理想的实现方式是允许调度器把第一个…

[附源码]计算机毕业设计springboot高校流浪动物领养网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

2022.11.28总结

今天写了条件查询 虽然思路上还说是比较顺,但是还是写了一晚上,因为老是在细节上出现bug,改了好久,踩了好几个坑。 首先大概是因为组件不是确定的,我把ref属性绑定在router-view上,导致我获取不到条件选择…

c++类型转换

目录 1.隐式类型转换和强制类型转换 2.隐式类型转换带来的危险 3.c提供的标准类型转换关键字 4.总结 1.隐式类型转换和强制类型转换 c语言的类型转换可以分为隐式类型转换和强制类型转换。 #include<iostream>using namespace std;int main() {double a 3.14;int …

医疗保健行业的福音是对话式AI吗?

导读对话式AI可以对医疗保健行业产生重大影响&#xff0c;且在许多领域已经产生了影响。如果使用得当&#xff0c;对话式AI可以提高操作效率和临床结果&#xff0c;并减轻医护人员的工作量。 对话式AI技术开启了数字患者护理的新时代。 患者可以随时访问其需要的数据&#xff…

Ubuntu 18.04 + CUDA 11.3.0 + CUDNN 8.2.1 + Anaconda + Pytorch 1.10

Xshell远程连接进行Ubuntu的Pytorch配置写在最前面参考Xshell常用命令Ubantu检查系统的各项配置查看ubuntu系统的版本信息和gcc版本查看Linux的内核版本和系统是多少位的验证机器是否具有n卡各种配置&#xff08;建议不要省略&#xff09;安装vim增加pip镜像源禁用nouveau开启S…

[附源码]计算机毕业设计springboot高校学生摄影作品展示平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…