目录
1.前言
在过去的几十年中,一系列视频编码标准被推出并广泛应用。现有的视频压缩标准就有很多种,包括国际标准化组织(International Organization for Standardization, ISO)国际电工技术委员会(International ElectrotechnicalCommission, IEC)制定的MPEG-1、MPEG-2、MPEG-4标准;国际电信联盟电信标准化部门(InternationalTelecommunication Union-Telecom, ITU-T)制定的H.261、H.263等。
2003年3月,ITU-T和ISO/IEC 正式公布了H.264/MPEG-4 AVC视频压缩标准。H.264作为目前应用最为广泛的视频编码标准,在提高编码效率和灵活性方面取得了巨大成功,使得数字视频有效地应用在各种各样的网络类型和工程领域。为了在关键技术上不受国外牵制、节约专利费用支出,中国制定了AVS系列标准,可以提供与H.264/AVC相当的编码效率。
近年来随着用户要求的不断提升,高清(1920x1080)和超高清(3840x2160)视频的应用越来越广泛。相比于标清视频,高清视频分辨率更大更清晰,但是相应的数据量也随之增加。在存储空间和网络带宽有限的情况下,现有的视频压缩技术已经不能满足现实的应用需求。为了解决高清及超高清视频急剧增长的数据率给网络传输和数据存储带来的冲击,ITU-T和ISO/IEC联合制定了具有更高压缩效率的新一代视频压缩标准HEVC(High Efficiency Video Coding)。
视频编码是指将信息(例如文本,音频或图像)转换为能够在计算机系统中存储和传输的格式。编码使得信息能够以更有效和可靠的方式存储和传输,并且在恢复时不会丢失任何信息。编码能够让信息能够在计算机系统中有效地存储和传输。它使得信息能够以更有效和可靠的方式进行处理,并且在恢复时不会丢失任何信息。本篇报告主要介绍四种视频编码里用到的方式,Huffman编码,算术编码,哥伦布编码以及系数编码。
2.Huffman编码
2.1 Huffman编码简介
Huffman算法是基于分布概率已知的无失真信源编码,由DA Huffman在1952年提出。在资源较少的嵌入式系统,lufian算法多应用于有限多符号之中,受计算机二进制、数字通信过程平均功率为零和节省缓冲器的影响,工程师往往期望发送的信源编码码元为(0.1且具有伪随机特性。树生成的确编码0、1的个数相等,具有很好的伪随机形式,从形式保证了信息搞不会在编码传锋过程而减少。
Huffman树的构建过程从形式上保证了其无相同前缀编码,并进而可以构建出前缀编码。若信源符号分布概率的每次加和不超过特排符号的分布概率即存在规范总是能保证其编码结果为唯一最优编码。但是当已排符号概率累加和等于或大于待排符号的概率时,算法未给出明确的解决方法,在实际使用和教学过程中会出现编码结果不唯一和编码率低的情况。为了解决这个问题,许多学者进行了大量研究,并给出了如下3个约定:尽量减小树的层次数;若一个节点所关联的左右两个分支不同时,把层次多的放在右分支;分支节点的左分支为0,右分支为1,而且要求左节点的首小于等于右节点的值。
2.2 Huffman编码性能指标评价
2.3 Huffman编码的缺陷
尽管霍夫曼编码已经非常高效,但它并不是完美的,考虑到二分的局限性,实际霍夫曼编码在建树的时候,并没有完美的划分符号与概率,由此引发下列三个缺点。
一.对起点敏感。需要从文本的开头处解码,才能得到正确的结果。不能从半路开始解码,如果文本很长,也要从开始处解码。
二.暴露语言的“指纹”。这个指纹指的是密码学中的概念,例如英语中字母e出现的频率高,那么,在加密解密过程中,这就是个漏洞。很有可能从字符的频率出发,破解密码。
三.字符顺序乱了。用正则表达式处理0-9,a-z,仅需做数字加减法就行了。但是,经过霍夫曼编码之后,顺序乱了,不能再简单的处理文本了。
在实际生产中,这些缺陷导致霍夫曼编码仅仅用于压缩,不能用于字符编码。
3.算术编码
3.1算术编码的基本原理
基本原理:
算术编码将编码的消息表示成实数 0~1 之间的一个间隔,用间隔长度来指代信息量,信息量越小,编码表示他的间隔就越小,表示这一个间隔的二进制位就越多,反之则越少。
相较于Huffman编码,算术编码更能逼近香农给出的理论熵值。
举例说明:
一.假设有一段数据需要编码,统计里面所有的字符和出现的次数。
二.将区间 [0,1) 连续划分成多个子区间,每个子区间代表一个上述字符, 区间的大小正比于这个字符在文中出现的概率 p。概率越大,则区间越大。所有的子区间加起来正好是 [0,1)。
三.编码从一个初始区间 [0,1) 开始,设置:low=0,high=1。
四.不断读入原始数据的字符,找到这个字符所在的区间,比如 [ L, H ),更新:
low=low+(high−low)∗L
high=low+(high−low)∗H
五.最后将得到的区间 [low, high)中任意一个小数以二进制形式输出即得到编码的数据。
Symbol | Times(出现的次数) | P(出现的概率) | |
A | 1 | 0.2 | |
B | 1 | 0.2 | |
E | 1 | 0.2 | |
R | 2 | 0.4 | |
刚开始编码区间是 [0,1),即 low=0,high=1 第一个字符A的概率区间是 [0,0.2),则 L = 0,H = 0.2,更新 low=low+(high−low)∗L=0,high=low+(high−low)∗H=0.2 第二个字符R的概率区间是 [0.6,1),则 L = 0.6,H = 1,更新 low=low+(high−low)∗L=0.12,high=low+(high−low)∗H=0.2 第三个字符B的概率区间是 [0.2,0.4),则 L = 0.2,H = 0.4,更新 low=low+(high−low)∗L=0.136 , high=low+(high−low)∗H=0.152 |
说明
每次编码一个字符,就在现有的编码区间上,按照概率比例取出这个字符对应的子区间。例如一开始A落在0到0.2上,因此编码区间缩小为 [0,0.2),第二个字符是R,则在 [0,0.2)上按比例取出R对应的子区间 [0.12,0.2),以此类推。每次得到的新的区间都能精确无误地确定当前字符,并且保留了之前所有字符的信息,因为新的编码区间永远是在之前的子区间。
解码
解码过程:从编码得到的小数开始,不断地寻找小数落在了哪个概率区间,就能将原来的字符一个个地找出来。例如得到的小数是0.14432,则第一个字符显然是A,因为它落在了 [0,0.2)上,接下来再看0.14432落在了 [0,0.2)区间的哪一个相对子区间,发现是 [0.6,1), 就能找到第二个字符是R,依此类推。
3.2算术编码与熵编码
CABAC (Context-based Adaptive BinaryArithmetic Coding .上下文自适应二进制算术编码),为HEVC所采用的嫡编码器,是一种基于概率模型的算术编码算法.相对于 H.264/AVC标准。HEVC的CABAC编码对自适应速度等方面做出了改进,具有较高的箱码效率。同CAVLC相比.CABAC可节省9~14%的码流数据,同时要求运算量提高约40%P。CABAC是基于可变的符号概率模型下的算术编码,与传统算术编码相同,CABAC运用了递归区间的划分方法进行编码表示.由于CABAC是自适应编码.也就是概率模型会随着符号的出现而调整。在编码过程中,语法元素通过二值化转换成二进制序列后,一次输入的 bit为0或者1将会影响之后的 bit出现0与1的概率值,在编码过程中需要对这一概率模型进行维护更新。并在下一次镝码一个bit时重新读取。
CABAC编码器分为三个部分:二值化,上下文建模,以及二进制算术编码器。二值化过程将输入的非二进制残差数据语法元素转化为二进制序列(bins);在上下文建模过程中,对二值化后的序列中每个符号(bin)出现的概率进行估计,分为最大概率符号(MPS)和最小概率符号((LPS);二进制算术编码器则将此序列通过算术编码的形式编码为最终的比特流符号,完成 HEVC编码输出。每个bin在编码完成后都需要对其上下文模型进行更新,即概率估计过程,该过程在上下文建模部分中完成,更新当前概率状态索引和LPS的值。CABAC算术编码器整体结构如图所示。
4.哥伦布编码
4.1.哥伦布编码简介
Golomb编码是一种无损的数据压缩方法,由数学家Solomon W.Golomb在1960年代发明。Golomb编码只能对非负整数进行编码,符号表中的符号出现的概率符合几何分布(Geometric Distribution)时,使用Golomb编码可以取得最优效果,也就是说Golomb编码比较适合小的数字比大的数字出现概率比较高的编码。它使用较短的码长编码较小的数字,较长的码长编码较大的数字。
4.2.哥伦布编码原理
Golomb编码是一种分组编码,需要一个正整数参数m,然后以m为单位对待编码的数字进行分组
对于任一待编码的非负正整数N,Golomb编码将其分为两个部分:所在组的编号GroupID以及分组后余下的部分,GroupID实际是待编码数字N和参数m的商,余下的部分则是其商的余数,具体计算如下:
q=N/m,r=N%m
对于得到的组号q使用一元编码(Unary code),余下部分r则使用固定长度的二进制编码(binary encoding)。
num | Unary coding |
0 | 0 |
1 | 10 |
2 | 110 |
3 | 1110 |
4 | 11110 |
5 | 111110 |
Golomb-Rice 编码
Golomb-Rice是Golomb编码的一个变种,它给Golomb编码的参数m添加了个限制条件:m必须是2的次幂。
编码规则
初始化参数m,m必须为2的次幂
计算q和r,q = N / m ; r = N & (m - 1)
使用一元编码编码q
取r的二进制位的低log2(m)位作为r的码字。
指数哥伦布编码
Exp-Golomb不再使用固定大小的分组,而使组的大小呈指数增长。
编码方式
首先使用公式计算组号m,m=log2(num+1)(取上限)
对组号m进行编码,连续写入m个0,最后写入一个1作为结束。
计算组内偏移量offset,Offset=num+1−2m
取offset二进制形式的低m位作为offset码元
0阶Exp-Golomb的编码后的长度是:2∗m+1,其解码过程和上面的Rice码类似,读入bit流,是0则继续,1则停止,然后统计0的个数m;接着读入m位的bit,就是offset,最后解码后的数值是:N=2m−1+offset。
4.3.哥伦布编码难点
在编码实现部分,难点有三个:
1.byte数组和bit流之间的转换
2.需要一个唯一的编码终止符
3.解码时,byte buffer中剩余数据不足以完成一次解码
针对上述问题,做了如下工作:
实现了一个简单的BitStream库,能够方便在bit流和byte数组之间进行转换
对编码后的码元长度做了一个假设,其最长长度不会超过64位,这样就使用64比特的0作为编码的终止符
在编码的时,会将编码后的总字节数填充为8的倍数,解码的过程中就以8字节为单位进行,当byte buffer中的数据不足8字节时,可以判定当前buffer中的数据并不是全部的数据,需要继续读入数据已完成解码。
5.系数编码
系数编码简介:
HEVC是基于块进行编码的,其中又可以分为编码单元(CU)、预测单元(PU)和变换单元(TU),其中T的有关处理涉及大型信息,在视频编码过程中占有重要的作用。在经过一系列的预况、变换和星仫等处理之后,TU中的变换系数具有非常显著的特点,即数据向左上角高度集中,也就是每个变换单元中只在左上角有少量的非零系数,其他位置的系数大部分都为零。
在HEVC中,无论是亮度信息还是色度信息,均是以变换块来进行处理的,每个变换块又继续被分割为4大小的子块。在进行编码前,按照变换系数幅值的分布情况选择具体的扫描方式对角扫描、水平扫描或垂直扫描,将一组变换系数转换成一维的数组,并且幅值接近的系数尽量排列在相邻的位置,从而便于建立高效的CABAC模型,提高编码效率。
系数编码分析
首先对扫描顺序中最后一个非零系数的索引进行编码
1.符号位:符号位:当它为1时,变换系数为负,否则为正。
2.基范围(BR):该符号包含四个可能的结果{0、1、2、> 2},它们是量化变换系数的绝对值。一个例外是最后一个非零系数,其中BR∈{1,2,> 2},因为0已被排除
3.低范围(LR):它包含四种可能的结果{0、1、2、> 2},它们对应于前面符号的上限上的残值。
4.高范围(HR):符号的范围为[0,215),对应于先前符号上限的残值。
5.为了编码一个量化的变换系数V,我们首先处理它的绝对值。如图28所示,如果|V |∈[0,2],则BR符号足以发出信号,则|V |的编码终止。否则,BR符号的结果将是“>2”;在这种情况下,一个LR符号被用于信号|V |。如果是V∈[3,5],这个LR符号将能够覆盖其值并完成编码。如果没有,第二个LR将用于进一步编码|V |。这被重复了四次,这有效地覆盖了[3,14]的范围。如果是|V | > 14,则将另一个HR符号编码为信号(|V |−14)。
二维变换块中的系数(橙色)使用五个之前处理过的系数(绿色)来构建其条件概率模型的上下文。中间和右:一维变换块中的系数(橙色)沿着变换方向使用三个之前处理过的系数(绿色)来构建其条件概率模型的上下文。
符号LR的参考区域。左图:一个二维变换块中的系数(橙色)使用三个之前处理过的系数(绿色)来构建其条件概率模型的上下文。中间和右:一维变换块中的系数(橙色)沿着变换方向使用三个之前处理过的系数(绿色)来构建其条件概率模型的上下文。
6.总结
随着互联网和移动网络的快速发展,市场对更高分辨率视频的需求越来越大,高质量视频服务在网络数据中占据比例越来越高,虽然网络带宽在不断增加,依然无法满足用户对于视频质量的需求,使得更高压缩效率的编码技术成为工业级和学界研究的点。降低HEVC编码复杂度的研究工作具有重要的实际应用价值和广泛的应用前景。视频转码技术是一种解决视频发送端与接收端兼容性问题的技术,它能实现不同的视频标准、视频分辨率、视频帧率和视频码率等之间的相互转换。釆用视频转码技术只需要改变发送端的系统结构或者在网关处增加相应的转码器即可,无需对接收端做任何修改。视频转码技术不仅能调整视频流的分辨率、帧率、码率等各种属性去适应不同的终端用户和网络带宽,还可以对视频流的压缩格式、语法结构等进行转换,因此视频转码技术应用广泛。总体来说,该技术研究实用价值非常高,它将用来满足更多领域的数字视频转换需求,不仅覆盖包括媒体网管多会议单元、视频监控、视频广播转码和医疗设备等商用产品中,还可以用于包括高清视频会议终端数字媒体适配器、高清网络摄像机、视频电话和高级数字机顶盒等产品。
7.参考文献
[1].A Technical Overview of AV1
[2]一种高效的 CABAC 熵编码硬件设计 傅 晨,郑明魁,陈志峰,施隆照,王 炎
[3]Github https://github.com/brookicv/GolombCode
[4].CSDN http://download.csdn.net/detail/brookicv/9740838
[5]AN OVERVIEW OF EMERGING VIDEO CODING STANDARDS
[6]王尧. HEVC二进制算术编码器的实现与CABAC算法改进[D].中国科学院大学(中国科学院上海技术物理所.2019.DOI:10.27581/d.cnki.gksjw.2019.000046.