Hevc变换系数扫描

news2024/9/20 1:09:27

量化后变换系数的熵编码在整个熵编码中占有举足轻重的地位,由于量化后变换系数大多为零值或者幅度较小的值,如何有效利用这一特性是熵编码的关键环节,H265/HEVC标准中,亮度数据和色度数据均以变换块TB为单位,通过编码非零系数的位置信息和非零系数的幅值信息来表示变换系数,本节将详细介绍一个NxN变换块的变换系数是如何进行熵编码的。

8.4.1 变换系数扫描

在对量化后的变换系数进行熵编码之前,必须先通过扫描技术将二维的变换系数排列成一维变换序列,扫描的顺序需要考虑变换系数幅值的分布,一般将幅度想尽的尽量相近排列,以便于在CABAC中建立更有效的上下文模型。提高编码效率。

在H265/HEVC中,变换系数的扫描是基于4x4大小的子块进行的。较大TB需要首先分割成多个4x4的子块,子块和子块内部系数按照相同的方式进行扫描,图8.7给出了8x8的TB采用对焦扫描时变换系数的扫描顺序,8x8的TB被划分成4个4x4的TB,扫描起始于最后一个系数,终止于DC系数,扫描过程包括了子块的扫描和子块内变换系数的扫描,子块扫描中4x4子块从右上角到左下角逐一扫描,子块内变换系数扫描中4x4系数从右上角到左下角逐一扫描,这种基于4x4子块的扫描技术可以一致性的处理所有大小的TB,有助于编码器模块化,一个4x4子块内扫描后的16个连续系数成为系数组Coefficient Group, CG。

上述的对角扫描与H264/AVC中的aigzag 扫描方式相似,此外,H265/HEVC还采用了另外两种扫描方式,水平扫描和垂直扫描,具体扫描顺序分别如图

所有的扫描都起始于TB内最后一个系数,终止于DC系数,以反向的水平或者垂直扫描方式进行。

采用不同的预测模式的TB,其系数分布往往具有一定的规律,如一个采用水平预测模式的帧内块,变换后的能量很大程序上集中在前几列,垂直扫描方式的对变换系数的熵编码非常有利,垂直预测模式更适合于水平扫描方式,H265/HEVC详细规定了预测模式于扫描方式的对应关系,这种方法叫模式依赖的系数扫描,因此扫描方式不需要语法元素显示表示,如对于帧内预测的4x4TB和8x8 TB,垂直预测模式对应水平扫描方式。对于16x16 TB和32x32TB的帧内模式以及帧间预测模式都采用了对角扫描。

8.4.2 非零系数的位置信息编码

一个TB的变换系数经过扫描后就可以得到一组一维的变换系数,该组系数可以根据非零系数位置信息和幅值信息完全表示,H265/HEVC标准就是对该组系数中非零位置信息和幅值信息进行CABAC编码

表示非零系数位置信息涉及的语法元素有last_sig_coeff_x_prefix. last_sig_coeff_y_prefix, last_sig_coeff_x_suffix, last_sig_coeff_y_sufix, CSBF 和sig_coeff_flag, 前4个语法元素用于标定TB中的最后一个非零系数的位置,即经过扫描后第一个非零系数在TB中的位置,后面两个语法用于标定经过扫描后除第一个非零系数外的所有非零系数的位置。

1 最后一个非零系数的位置

对一个TB的变换系数进行熵编码,首先是熵编码TB中的足后一个非零系数的位置,设经过扫描后的最后一个非零系数在TB中的位置坐标为(x,y) ,x和y分别表示该系数所在的列号和行号。x使用语法元素last_sig_coeff_x_prefix和last_sig_coeff_x_suffix表示,y使用语法元素last_sig_coeff_y_prefix和last_sig_coeff_y_suffix表示。这4个语法元素值的获取过程为,将TB的行和列划分为B个区间,不同尺寸的变换块对应的N不同,变换尺寸为4x4,8x8,16x16,32x32时,对应的N分别为4,6,8,10。每个区间对应一个区间索引,表示该区间内的最小位置坐标,last_significant_coeff_x_prefix和last_significant_coeff_y_prefix就等于x和y各自所在区间的索引值,last_significant_coeff_x_suffix和last_significant_coeff_y_suffix就等于x和y各自区间内部的偏移量,区间索引值对应的最小位置坐标加上偏移量,即可分别得到x和y最终的位置坐标,8.46给出了TB为32x32,x或y所对应的区间索引和区间内偏移量,以及各自的二元码。

坐标位置

前缀

后缀

偏移范围

0

0

-

1

10

-

2

110

-

3

1110

-

4-5

11110

X

6-7

111110

X

8-11

1111110

XX

12-15

11111110

XX

16-23

111111110

XXX

24-31

111111111

XXX

X为0或者1

最后一个非零系数位置的熵编码即为对着4个语法元素进行CABAC编码,具体顺序为,首先,编码语法元素last_sig_coeff_x_prefix和last_sig_coeff_y_prefix,然后,编码last_sig_coeff_x_suffix和last_sig_coeff_y_suffix ,last_significant_coeff_x_prefix和last_significant_coeff_y_prefix。经过TR二元化后进行熵编码,采用的上下文索引模型见表8.47

last_significant_coeff_x_suffix和last_significant_coeff_y_suffix 经过FL二元化后进行旁路编码。

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

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

相关文章

Compose 动画 (四) : AnimatedVisibility 各种入场和出场动画效果

AnimatedVisibility中的EnterTransition 和 ExitTransition ,用来配置入场/出场时候的动画效果。 默认的入场效果是 fadeIn() expandVertically() 默认的出场效果是 fadeOut() shrinkVertically() 1. EnterTransition和ExitTransition支持的动画 enter的参数类…

【VUE】vue3.0后台常用模板

vue3.0后台常用模板: 1、vue-admin-perfect 在线预览 gitee国内访问地址:https://yuanzbz.gitee.io/vue-admin-perfect/#/home github site : https://zouzhibin.github.io/vue-admin-perfect/ 基础功能版本预览:https://yuanzbz.gitee.io/…

上海亚商投顾:沪指失守3300点 两市上涨股不足500只

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪沪指今日冲高回落,午后跌幅扩大至1%,失守3300点关口,深成指、创业板指跌近2%。通…

Springboot 定时任务注入FeignClient

问题引入: 在springboot 项目写了个定时任务,里面有段代码通过Feign 调用远程服务,发现通过接口调用可以程序正常执行, 通过配置定时任务发现定时任务没执行,看日志是报了NP.问题跟踪: 写了个demo 重现以上错误:Api(tags "XXX控制器") RestController RequestMapp…

认识代码之前,请先认识你自己 |《编程人生》

这是我的湛庐课程《给技术人的职场突围课》 (链接) 的一部分。 这篇文章也是 IT 女神征文活动 的一部分。 《编程人生》是一本优秀程序员的采访集,里面记录了15位世界级编程大师的故事。 我在 发刊词 里面说过,在这个书单课里&am…

如何有效地降低软件开发风险?

1、科学分析风险 高风险自动预警 一般对风险进行科学分析,主要从3个维度进行划分:影响的严重性、发生的可能性、产生的影响性。 根据风险对项目的影响程度,从3个维度将其划分5个等级:很低、比较低、中等、比较高、很高。这样我们能…

react router零基础使用教程

安装既然学习 react router 就免不了运行 react安装 reactnpx create-react-app my-appcd my-appnpm start安装 react routernpm install react-router-dom如果一切正常,就让我们打开 index.js 文件。配置路由引入 react-router-dom 的 RouterProviderimport {Route…

JavaWeb--Filter

Filter1 Filter概述2 Filter快速入门2.1 开发步骤2.2 代码演示3 Filter执行流程4 Filter拦截路径配置5 过滤器链5.1 概述5.2 代码演示5.3 问题6 案例6.1 需求6.2 分析6.3 代码实现6.3.1 创建Filter6.3.2 编写逻辑代码6.3.3 测试并抛出问题6.3.4 问题分析及解决6.3.5 过滤器完整…

智慧供热|供热末端(住户)管网远程监测方案

智慧供热通过对供热相关数据的采集、分析和对热源、热网、末端(住户)的各个供热环节进行智能调控,从而进一步实现热网资源的配置优化,提高热网输送的能力。供热行业存在问题:供热企业目前面临的主要问题还是资金周转困…

MYSQL1

MySQL基本11、MySQL 中有哪几种锁?2、MySQL 中有哪些不同的表格?2、什么是存储引擎3、MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别4、CHAR 和 VARCHAR 的区别1、固定长度 & 可变长度2、存储方式3、存储容量4、CHAR会…

cookie session Token终极理解

左边 浏览器 右边 服务器 浏览器发送请求 服务器接收请求 并生成cookie 浏览器查看保存了哪些cookie 用户名密码放在cookie是很不安全的 因为浏览器一旦被攻击泄露 是很危险的 接着诞生了session 会话 sessionID (一段杂乱的字母标识) 会话结束时间 …

【云原生】Istio请求路由、流量转发、超时配置等

代码继续接着前面的文章【云原生】整合K8s SpringCloudK8s gRpc RocketMQ Istio Envoy,本篇文章我们测试下请求路由功能。生产中我们上了个新接口或者新功能,一般会经过 内灰 -> 外灰5% -> 外灰10% ...... 外灰100%的过程,这篇文章…

计算机图形学08:中点BH算法绘制抛物线(100x = y^2)

作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、算法原理二、…

springboot整合mybatis框架,简单实现CRUD

如果大家实在不知道怎么搞可以去看看官网:mybatis-plus官网MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。其实也就是在…

5. 驱动开发

文章目录一、驱动开发1.1 前言1.2 何谓驱动框架1.3 内核驱动框架中LED的基本情况1.3.1 相关文件1.3.2 九鼎移植的内核中led驱动1.3.3 案例分析驱动框架的使用1.3.4 典型的驱动开发行业现状1.4 初步分析led驱动框架源码1.4.1 涉及到的文件1.4.2 subsys_initcall1.4.3 led_class_…

windows应用(vc++2022)MFC基础到实战(1)

目录vc概述MFC 框架概述MFC 框架SDI 和 MDI文档、视图和框架窗口对象文档/视图体系结构第一个应用自动生成的主框架类源码vc概述 Microsoft Visual C(简称Visual C、MSVC、VS或VC)是微软公司的免费C开发工具,具有集成开发环境,可…

Spring Security OAuth2实现多用户类型认证、刷新Token

原本的OAuth2登录支持用户名密码登录,现在还想支持另外用id号码和密码登录。但是OAuth2默认提供的UserDetailsService只允许传入一个参数:想要实现多种用户登录,是不是可以考虑loadUserByUsername方法携带多个参数呢?接下来记录一…

Docker安装和Docker安装Nginx及其他常用操作

一、Docker简介 Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全…

机器学习与目标检测作业:连通块算法

机器学习与目标检测作业:连通块算法一、连通块算法题目描述二、连通块算法文件结构三、连通块算法程序编写3.1、连通块算法conBlock.h头文件内容3.2、conBlock.cpp源文件内容3.3.3、mian.h头文件内容3.3.4、main.cpp源文件内容如下四、连通块算法程序运行结果一、连…

【JS知识点】——原型和原型链

文章目录原型和原型链构造函数原型显式原型(prototype)隐式原型(\_\_proto\_\_)原型链总结原型和原型链 在js中,原型和原型链是一个非常重要的知识点,只有理解原型和原型链,才能深刻理解JS。在…