HEVC变换后残差系数编码原理

变换系数熵编码简介:

变换系数的扫描是基于4*4大小的子块进行的,子块和子块内部递归扫描。较大的TB首先被分割为多个4*4子块,扫描一般起始于最后一个系数,终止于DC系数,扫描包括子块的扫描和子块内部的扫描。每一个子块内的扫描方式都是一样的。

三种扫描方式:对角,水平,垂直

编码过程:

非零系数位置信息编码:

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

扫描最后一个非零系数在TB中的位置(x,y)对应last_sig_coeff_x_prefix,last_sig_coeff_y_prefix;  last_sig_coeff_x_suffix,last_sig_coeff_y_suffix

每一个TB会根据他的大小划分为N个区间(区间具体为多大??)

前两个变量表示所在区间的左上角索引,经TR之后进行常规编码

后两个变量表示在区间内的索引信息,讲过FL之后进行旁路编码

2 其余非零系数的位置

涉及CSBF(coded_sub_block_flag这个在H264也有)表示当前数组CG中是否含有非零系数

sig_coeff_flag 表示当前位置的系数值是否非零

先扫描一个CG的CSBF,若为0,检查下一个CG,若为1那么开始编码每一个位置上的sig_coeff_flag

3 非零系数的幅值信息编码

coeff_sign_flag 表示系数是正值还是负值

coeff_abs_level_greater1_flag 表示幅值绝对值是否大于1

coeff_abs_level_greater2_flag 表示幅值绝对值是否大于2

Coeff_abs_level_remaining = absCoeffLevel-baseLevel

baseLevel = sig_coeff_flag+coeff_abs_level_greater1_flag+coeff_abs_level_greater2_flag

一个CG内所有非零系数的复制信息编码过程:

(1)先扫描CG中前8个非零系数的coeff_abs_level_greater1_flag,之后的默认为0

(2)编码CG中第一个absCoeffLevel大于1的元素的coeff_abs_level_greater2_flag,后面的默认为0

(3)编码CG中所有非零元素的符号coeff_sign_flag,采用旁路编码

(4)计算CG当中所有非零元素的Coeff_abs_level_remaining 采用旁路编码

后面还有一种根据符号奇偶性进行符号数据隐藏的办法,SDH

比较简单,主要是最后一个非零系数的符号不需要编码

时间: 2024-11-05 20:32:09

HEVC变换后残差系数编码原理的相关文章

音视频处理之编码原理20170905

关于音视频处理的介绍参考雷神的文章:http://blog.csdn.net/leixiaohua1020/article/details/18893769 在介绍各种编码标准之前,先来看看音视频编码的基本原理: 1.视频编码基本原理 (1)  视频信号的冗余信息 以记录数字视频的YUV分量格式为例,YUV分别代表亮度与两个色差信号.例如对于现有的PAL制电视系统,其亮度信号采样频率为13.5MHz:色度信号的频带通常为亮度信号的一半或更少,为6.75MHz或3.375MHz.以4:2:2的采样

编码原理(七) --回顾

上一篇我们讲解了熵编码的另一种方式CABAC,熵编码结束之后,那么整个编码过程的核心过程也就结束了,后续的工作就是为了适配网络发送等做一些封装的工作.本篇对整体的编码过程作一个简单的回顾,整体上感知一下一个像素的矩阵快,是如何一步一步被减肥的,哈哈: 1 DCT变换 经过DCT变换,实现了频率的集中. 2量化 经过量化,我们对DCT变换后的系数进行以QP=28的量化,此时得到了一些左上角集中了非零值的系数矩阵. 3 ZigZag扫描 ZigZag扫描,将二维的系数矩阵转换成一维的序列. 4 熵编

HEVC残差系数解码代码详解

上一篇中主要介绍了编码中的原理,这里主要是结合HM中的代码介绍读残差系数的方法 HM变换系数熵解码简介: 初始一个TU对象 成员变量介绍: public: typedef enum TU_SPLIT_MODE { DONT_SPLIT=0, VERTICAL_SPLIT=1, QUAD_SPLIT=2, NUMBER_OF_SPLIT_MODES=3 } SPLIT_MODE;  //<TU在递归过程中的三种劈分方式 static const UInt NUMBER_OF_SECTIONS[NU

编码原理详解(三)---量化

本节开始介绍编码过程中的量化环节.还记得上一篇的变换吗?变换之后得到了一个新的矩阵,一个经过从空域变换到频域的一个矩阵.那么,量化呢,就是基于变换后得到的矩阵,再做进一步的处理,本质也就是进一步的压缩. 一.原理 量化的原理是把变换后的DCT系数除以一个常量,经过量化后的结果是量化步长的整数倍或者为更多的零值,从而达到了压缩的目的. 二.量化公式 q(x, y) = round(F(x, y) / Q + 0.5); 公式说明:F(x, y)为经过DCT变换后的DCT系数, Q为量化步长,在x2

编码原理详解(五)---熵编码(CAVAL)

上一篇我们讲到了ZigZag扫描,经过这一扫描之后,发现原本是4*4的像素矩阵,就变成了一连串的数字,可以说是二维到一维的一个转换吧,而且经过ZigZag扫描后,一连串的数字的最后大部分为0,以及一些+1,-1.针对这一系列的数字,从概率的角度,再进行一次编码,这个过程称之为熵编码,熵编码主要分为CAVLC,和CABAC,分别代表基于上下文的自适应可变长编码和基于上下文的自适应二进制算术编码,本节介绍CAVLC. 一.简介 CAVLC(Context-Adaptive Variable Leng

编码原理详解(四)---之字形扫描

上一篇我们讲到,经过量化后得到了诸多零值和整数值,本篇接下来讲讲编码过程中过对这些值如何组织和处理,那就是ZigZag扫描喽. 一.简介 ZigZag扫描也称作之字形扫描,何以得此称谓,是因为其扫描的路径特别像汉字中的之字.ZigZag扫描的工作就是按照一定的路径,将量化后的系数从二维变到了一维的过程,废话不多说,上图. 二.示意 三.说明: (1) 上图中左侧的图展示了ZigZag的扫描顺序,因为经过DCT变换和量化之后,实际上矩阵的右下角基本上都已经变为零值,非零值基本集中在矩阵的左上角,经

Atitit.Base64编码原理与实现设计

Atitit.Base64编码原理与实现设计 1. Base64编码1 1.1. 为什么要用自己的base64编码方案1 2. Base64编码由来1 3. Base64编码原理1 3.1. 具体来说,转换方式可以分为四步:2 3.2. 注意2 3.3. Padding3 4. URL安全的Base64编码3 1. Base64编码 1.1. 为什么要用自己的base64编码方案 防止apache codec  jdk的jar冲突. 2. Base64编码由来 Base64最早是用来解决电子邮件

4B/5B编码原理

4B/5B编码原理 什么是4B/5B编码? 4B/5B编码是百兆以太网(即快速以太网)中线路层编码类型之一,就是用5bit的二进制数来表示4bit二进制数,映射方式如下表所示: 为什么要进行4B/5B编码? 在通信网络中,接收端需要从接收数据中恢复时钟信息来保证同步,这就需要线路中所传输的二进制码流有足够多的跳变,即不能有过多连续的高电平或低电平,否则无法提取时钟信息. Manchester(曼切斯特)编码可以保证线路中码流有充分的跳变,因为它是用电平从“-1”到“+1”的跳变来表示“1”,用电

Base64 编码原理

1.编码表 2.原理[汉字不能base64编码] base64 编码就是将字符以3个为一组,因为一个字符由8个位组成,3*8=24位,然后以顺序以6个位拿出,前面补2位,凑成8位--一个字节 原字节不能被3整除的,在后面补 由8个0,构成的单字节,一般补1个或是2个(0000 0000),这些后面补的字节不能用base64编码对应,应该是异常字符,用“=”号替换, 所以,base64编码一般最后会有1~2个“=”号 示例: base64编码前:Lucy L u c yASCII: 76 117