CN116074499A - 一种视频编解码方法及装置 - Google Patents
一种视频编解码方法及装置 Download PDFInfo
- Publication number
- CN116074499A CN116074499A CN202111333832.1A CN202111333832A CN116074499A CN 116074499 A CN116074499 A CN 116074499A CN 202111333832 A CN202111333832 A CN 202111333832A CN 116074499 A CN116074499 A CN 116074499A
- Authority
- CN
- China
- Prior art keywords
- group
- coding
- coefficient
- decoding
- mode
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 200
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 71
- 241000209094 Oryza Species 0.000 claims description 71
- 235000007164 Oryza sativa Nutrition 0.000 claims description 71
- 235000009566 rice Nutrition 0.000 claims description 71
- 238000013139 quantization Methods 0.000 claims description 55
- 230000009466 transformation Effects 0.000 claims description 33
- 230000001131 transforming effect Effects 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 10
- 238000004458 analytical method Methods 0.000 claims description 7
- 238000012545 processing Methods 0.000 abstract description 54
- 230000008569 process Effects 0.000 description 52
- 230000006835 compression Effects 0.000 description 22
- 238000007906 compression Methods 0.000 description 22
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 17
- 238000004891 communication Methods 0.000 description 15
- 238000009826 distribution Methods 0.000 description 15
- 238000010586 diagram Methods 0.000 description 13
- 230000003044 adaptive effect Effects 0.000 description 12
- 230000006870 function Effects 0.000 description 11
- 238000004364 calculation method Methods 0.000 description 8
- 238000012937 correction Methods 0.000 description 7
- 239000013598 vector Substances 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 230000003139 buffering effect Effects 0.000 description 4
- 238000005192 partition Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000001914 filtration Methods 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 101100129590 Schizosaccharomyces pombe (strain 972 / ATCC 24843) mcp5 gene Proteins 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000009795 derivation Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000012805 post-processing Methods 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000001502 supplementing effect Effects 0.000 description 2
- 230000002123 temporal effect Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000012952 Resampling Methods 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000002146 bilateral effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/103—Selection of coding mode or of prediction mode
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/44—Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本申请提供一种视频编解码方法及装置,涉及图像处理技术领域,解决了现有技术中视频编解码性能较低,或编解码算法复杂度较高的问题。该方法包括:解码端获取待解码单元的码流;确定所述待解码单元的扫描方式、分组方式以及每个组对应的编码方式;根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块;根据所述待解码单元的所述扫描方式,逐个将每个组所述系数块内系数进行恢复得到所述待解码单元对应的重建数据块。
Description
技术领域
本申请涉及图像处理技术领域,尤其涉及一种视频编解码方法及装置。
背景技术
在计算机视觉领域中,为了有效存储和传输视频,通常需要通过视频编码来进行图像压缩,主要包括有损压缩和无损压缩。其中,无损压缩是利用图像数据的统计冗余进行图像压缩,可完全恢复原始图像数据而不引起任何失真;另外,如果重建图像和原始图像存在误差,而误差被限制在一定的范围内就称作近无损压缩。近无损压缩虽然存在一定失真,但对于视觉影像来说可以忽略不计,因此近无损压缩也可以认为是无损压缩。
目前的无损压缩(包括近无损压缩)的编解码方案中,例如,基于上下文的自适应二进制算数编码(Context-based Adaptive Binary Arithmetic Coding,CABAC)压缩技术涉及到诸多的概率模型以及上下文建模、二进制算术编码等算法,处理过程较为复杂。另外,基于哥伦布编码的Golomb-Rice编码,其编码过程中存在冗余计算,编解码性能不高。因此,亟需提出一种编解码效率较高,且算法复杂度较低的视频编解码方法。
发明内容
本申请提供一种视频编解码方法及装置,解决了现有技术中视频编解码性能较低,或编解码算法复杂度较高的问题。
为达到上述目的,本申请采用如下技术方案:
第一方面,提供一种视频编解码方法,该方法包括:解码端获取待解码单元的码流;确定所述待解码单元的扫描方式、分组方式以及每个组对应的编码方式;根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块;根据所述待解码单元的所述扫描方式,逐个将每个组所述系数块内系数进行恢复得到所述待解码单元对应的重建数据块。
在一种实施方式中,分组方式包括:固定长度的分组方式,或者,基于系数值大小进行分组划分的半定长分组,或者,基于系数排列位置进行分组划分中的至少一种。
在一种实施方式中,编码方式:一元码、截断一元码、截断二元码、定长编码、半定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码、哥伦布-莱斯编码中的至少一种。
在一种实施方式中,扫描方式包括:光栅扫描、块扫描、水平扫描、垂直扫描、往返扫描、对角扫描、逆水平扫描、逆垂直扫描或者希尔伯特扫描中的至少一种。
在一种实施方式中,重建数据块为待解码图像的原始像素值、对所述原始像素值进行预测得到的残差值、对所述残差值经量化后的系数,或者,对所述残差值经变换后得到的变换系数中的一种组成的数据块。
在一种实施方式中,确定所述待解码单元的扫描方式、分组方式以及每个组对应的编码方式,具体包括:根据编码端以及解码端的预先约定或者上下文信息,确定所述待解码单元的扫描方式、分组方式以及每一组对应的编码方式中的至少一个;或者,根据所述码流解析得到所述待解码单元的扫描方式、分组方式以及每个组对应的编码方式中的至少一个;或者,根据所述待解码单元的预测方式、量化方式和/或变换方式得到所述分组方式。
在一种实施方式中,根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块,具体包括:根据编码算法解码得到每个组的组参数;根据每个组的所述组参数,根据所述半定长编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,根据编码算法解码得到每个组的组参数,具体包括:根据以下至少一种编码方式对应的解码方式进行解码得到每个组的组参数:一元码、截断一元码、截断二元码、定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码或哥伦布-莱斯编码。
在一种实施方式中,根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块,具体包括:根据定长编码算法解码得到每个组的组莱斯参数,或者,根据上下文模型得到每个组的组莱斯参数;根据每个组的所述组莱斯参数,根据哥伦布-莱斯编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块,具体包括:根据上下文模型得到每个组的组莱斯参数;根据定长编码算法或者截断一元码解码得到每个组的组参数偏差;根据每个组的所述组莱斯参数和所述组参数偏差得到每个组的组参数;根据每个组的所述组参数,根据哥伦布-莱斯编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块,具体包括:根据定长编码算法解码得到每个组的阶数k,或者,根据上下文模型得到每个组的阶数k;根据每个组的所述阶数k,根据k阶指数哥伦布编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块,具体包括:根据上下文模型得到每个组的阶数k;根据定长编码算法或者截断一元码解码得到每个组的组参数偏差;根据所述组参数偏差更新每个组的阶数k;根据每个组更新后的所述阶数k,根据k阶指数哥伦布编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块,具体包括:根据已经解码得到的一个或多个组的系数、预测方式、量化方式或者变换方式中的至少一个,确定当前组的编码方式;根据所述当前组的编码方式对应的解码方式进行解码得到所述当前组的系数,其中,所述当前组的编码方式是哥伦布-莱斯编码、k阶指数哥伦布编码或者半定长编码方式中的几种编码方式的组合。
在一种实施方式中,编码单元的多个分组中,至少两个分组的编码方式不同。
在一种实施方式中,若所述待解码单元的解码方式为哥伦布-莱斯编码或者k阶指数哥伦布编码中的任一项,则所述确定所述待解码单元的分组方式,具体包括:根据所述待解码单元的预测方式、量化方式和/或变换方式得到所述待解码单元的分组方式。
通过本申请的上述实施方式,解码端可以根据不同的预测方式,导出不同的扫描方式,同时导出系数分组方式,这样的系数分组结合了预测的信息,使得分组后的系数更加统一,编码端对于变化很小的系数,可以分配较小的码字进行编码,从而编码方式较灵活,提高编码性能。此外,通过设计多种固定分组模式可以更好的适应于半定长编码方式,可以灵活地为每个编码块选择更好的二值化方法,编码算法复杂度较低。
第二方面,提供一种视频编解码方法,该方法包括:编码端将原始图像中的待编码数据块根据第一扫描方式进行扫描得到系数序列;将所述系数序列按照第一分组方式进行分组,得到多组待编码子序列;确定每组待编码子序列对应的系数编码方式,并逐个进行编码得到已编码码流。
在一种实施方式中,分组方式包括:固定长度的分组方式,或者,基于系数值大小进行分组划分的半定长分组,或者,基于系数排列位置进行分组划分中的至少一种。
在一种实施方式中,编码方式:一元码、截断一元码、截断二元码、定长编码、半定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码、哥伦布-莱斯编码中的至少一种。
在一种实施方式中,扫描方式包括:光栅扫描、块扫描、水平扫描、垂直扫描、往返扫描、对角扫描、逆水平扫描、逆垂直扫描或者希尔伯特扫描中的至少一种。
在一种实施方式中,待编码数据块为待编码图像的原始像素值、对所述原始像素值进行预测得到的残差值、对所述残差值经量化后的系数,或者,对所述残差值经变换后得到的变换系数中的一种组成的数据块。
第三方面,提供一种视频解码装置,该装置包括收发模块和处理模块,收发模块用于获取待解码单元的码流;处理模块用于确定所述待解码单元的扫描方式、分组方式以及每个组对应的编码方式;根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块;根据所述待解码单元的所述扫描方式,逐个将每个组所述系数块内系数进行恢复得到所述待解码单元对应的重建数据块。
在一种实施方式中,分组方式包括:固定长度的分组方式,或者,基于系数值大小进行分组划分的半定长分组,或者,基于系数排列位置进行分组划分中的至少一种。
在一种实施方式中,编码方式:一元码、截断一元码、截断二元码、定长编码、半定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码、哥伦布-莱斯编码中的至少一种。
在一种实施方式中,扫描方式包括:光栅扫描、块扫描、水平扫描、垂直扫描、往返扫描、对角扫描、逆水平扫描、逆垂直扫描或者希尔伯特扫描中的至少一种。
在一种实施方式中,重建数据块为待解码图像的原始像素值、对所述原始像素值进行预测得到的残差值、对所述残差值经量化后的系数,或者,对所述残差值经变换后得到的变换系数中的一种组成的数据块。
在一种实施方式中,处理模块具体用于:根据编码端以及解码端的预先约定或者上下文信息,确定所述待解码单元的扫描方式、分组方式以及每一组对应的编码方式中的至少一个;或者,根据所述码流解析得到所述待解码单元的扫描方式、分组方式以及每个组对应的编码方式中的至少一个;或者,根据所述待解码单元的预测方式、量化方式和/或变换方式得到所述分组方式。
在一种实施方式中,处理模块具体用于:根据编码算法解码得到每个组的组参数;根据每个组的所述组参数,根据所述半定长编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,处理模块具体用于:根据以下至少一种编码方式对应的解码方式进行解码得到每个组的组参数:一元码、截断一元码、截断二元码、定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码或哥伦布-莱斯编码。
在一种实施方式中,处理模块具体用于:根据定长编码算法解码得到每个组的组莱斯参数,或者,根据上下文模型得到每个组的组莱斯参数;根据每个组的所述组莱斯参数,根据哥伦布-莱斯编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,处理模块具体用于:根据上下文模型得到每个组的组莱斯参数;根据定长编码算法或者截断一元码解码得到每个组的组参数偏差;根据每个组的所述组莱斯参数和所述组参数偏差得到每个组的组参数;根据每个组的所述组参数,根据哥伦布-莱斯编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,处理模块具体用于:根据定长编码算法解码得到每个组的阶数k,或者,根据上下文模型得到每个组的阶数k;根据每个组的所述阶数k,根据k阶指数哥伦布编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,处理模块具体用于:根据上下文模型得到每个组的阶数k;根据定长编码算法或者截断一元码解码得到每个组的组参数偏差;根据所述组参数偏差更新每个组的阶数k;根据每个组更新后的所述阶数k,根据k阶指数哥伦布编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,处理模块具体用于:根据已经解码得到的一个或多个组的系数、预测方式、量化方式或者变换方式中的至少一个,确定当前组的编码方式;根据所述当前组的编码方式对应的解码方式进行解码得到所述当前组的系数,其中,所述当前组的编码方式是哥伦布-莱斯编码、k阶指数哥伦布编码或者半定长编码方式中的几种编码方式的组合。
在一种实施方式中,编码单元的多个分组中,至少两个分组的编码方式不同。
在一种实施方式中,若所述待解码单元的解码方式为哥伦布-莱斯编码或者k阶指数哥伦布编码中的任一项,则处理模块具体用于:根据所述待解码单元的预测方式、量化方式和/或变换方式得到所述待解码单元的分组方式。
第四方面,提供一种视频编码装置,该装置包括收发模块和处理模块,处理模块用于将原始图像中的待编码数据块根据第一扫描方式进行扫描得到系数序列;将所述系数序列按照第一分组方式进行分组,得到多组待编码子序列;确定每组待编码子序列对应的系数编码方式,并逐个进行编码得到已编码码流。收发模块用于将已编码码流发送至解码端。
在一种实施方式中,分组方式包括:固定长度的分组方式,或者,基于系数值大小进行分组划分的半定长分组,或者,基于系数排列位置进行分组划分中的至少一种。
在一种实施方式中,编码方式:一元码、截断一元码、截断二元码、定长编码、半定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码、哥伦布-莱斯编码中的至少一种。
在一种实施方式中,扫描方式包括:光栅扫描、块扫描、水平扫描、垂直扫描、往返扫描、对角扫描、逆水平扫描、逆垂直扫描或者希尔伯特扫描中的至少一种。
在一种实施方式中,待编码数据块为待编码图像的原始像素值、对所述原始像素值进行预测得到的残差值、对所述残差值经量化后的系数,或者,对所述残差值经变换后得到的变换系数中的一种组成的数据块。
第五方面,提供一种编解码系统,该编解码系统包括如第三方面任一项所述的装置和如第四方面中任一项所述的装置。
第六方面,提供一种视频编解码装置,所述装置包括处理器,所述处理器与存储器耦合;存储器,用于存储计算机程序或指令;处理器,用于执行所述存储器中存储的计算机程序或指令,以使得所述装置执行如第一方面中任一项所述的方法。
第七方面,提供一种视频编解码装置,所述装置包括处理器,所述处理器与存储器耦合;存储器,用于存储计算机程序或指令;处理器,用于执行所述存储器中存储的计算机程序或指令,以使得所述装置执行如第二方面中任一项所述的方法。
第八方面,提供一种电子设备,所述电子设备用于执行如第一方面中任一项所述的方法。
第九方面,提供一种电子设备,所述电子设备用于执行如第二方面中任一项所述的方法。
第十方面,提供一种可读存储介质,包括程序或指令,当所述程序或指令被处理器运行时,如第一方面中任意一项所述的方法被执行。
第十一方面,提供一种可读存储介质,包括程序或指令,当所述程序或指令被处理器运行时,如第二方面中任意一项所述的方法被执行。
第十二方面,提供一种芯片或电路,用于执行第一方面中任一项所述方法。
第十三方面,提供一种芯片或电路,用于执行第二方面中任一项所述方法。
第十四方面,提供一种计算机应用程序,当所述计算机应用程序在计算机或处理器上运行时,使得所述计算机或所述处理器执行如第一方面中任一项所述方法。
第十五方面,提供一种计算机应用程序,当所述计算机应用程序在计算机或处理器上运行时,使得所述计算机或所述处理器执行如第二方面中任一项所述方法。
可以理解地,上述提供的任一种视频编解码的装置、视频编解码系统、芯片、计算机可读存储介质或计算机程序产品,均可以由上文所提供的对应的方法来实现,因此,其所能达到的有益效果可参考上文所提供的对应的方法中有益效果,此处不再赘述。
附图说明
图1为本申请实施例提供的一种编解码系统的架构图;
图2为本申请实施例提供的一种编码器的内部架构图;
图3为本申请实施例提供的一种解码器的内部架构图;
图4A为本申请实施例提供的一种视频编解码流程示意图;
图4B为本申请实施例提供的一种视频编解码方法的流程示意图;
图5为本申请实施例提供的一种视频编解码方法中待解码单元的示意图;
图6为本申请实施例提供的一种视频编解码方法中分组及扫描的示意图;
图7为本申请实施例提供的一种视频编解码方法中待解码单元中的数据部分示意图;
图8为本申请实施例提供的一种视频编解码方法中待解码单元的分组方式示意图;
图9为本申请实施例提供的一种视频编解码方法中待解码单元的分组方式示意图;
图10为本申请实施例提供的一种视频编解码装置的结构示意图。
具体实施方式
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
需要说明的是,本申请中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
首先,对本申请实施例涉及的技术术语进行介绍:
视频序列/图像序列:视频中完整的图像通常被称为“帧”,由许多帧按照时间顺序组成的视频被称为视频序列(Video Sequence),或者可以称为图像序列。
视频编码技术:视频序列存在空间冗余、时间冗余、视觉冗余、信息熵冗余、结构冗余、知识冗余、重要性冗余等一系列的冗余信息。为了尽可能的去除视频序列中的冗余信息,减少表征视频的数据量,提出了视频编码(Video Coding)技术,以达到减小存储空间和节省传输带宽的效果。视频编码技术也称为视频压缩技术。
视频编码的过程通常包括预测、变换、量化、熵编码等过程,通过熵编码可以对量化后的变换系数进行编码。具体的过程将在下文进行描述,此处不再赘述。
在国际通用范围内,视频压缩编码标准,例如:由运动图像专家组(MotionPicture Experts Group,MPEG)制定的MPEG-2和MPEG-4标准中第10部分的高级视频编解码(Advanced Video Coding,AVC),由国际电信联盟电信标准化部门(InternationalTelecommunication Uion-Telecommunication StandardizationSector,ITU-T)制定的H.263、H.264和H.265(又称高效率视频编解码(High EfficiencyVideo Coding standard,HEVC))。
需要说明的是,在基于混合编码架构的编码算法中,上述压缩编码方式可以被混合使用。
残差:在视频编码过程中,需要经过预测过程去除空域和时域冗余,编码器经过预测得到预测值,将原始像素值减去预测值得到残差值。残差块是变换、量化、熵编码的基本单元。
变换:在视频编码过程中,变换是指将以空间域中像素形式描述的图像转换至变换域的图像,并以变换系数的形式来表示。由于绝大多数图像都含有较多平坦区域和缓慢变化的区域,因此,适当的变换过程,可以使图像能量在空间域的分散分布,转换为在变换域的相对集中分布,从而能够去除信号之间的频域相关性,配合量化过程,可以有效压缩码流。变换过程能够将时域的像素值转换到频域,由于实际残差块中,低频分量占比较大,通过变换将能量集中到低频区域,即变换后的低频系数的值较大,高频系数的值较小。
变换系数:残差块经过变换、量化后的系数称为变换系数。残差块中的像素值称为系数,残差经过变换后,左上角的为低频系数,右下角的为高频系数。从左上角到右下角,频率越来越大。
二值化:也叫二进制化,对需要编码的符号或系数进行二值化,经过二值化后的符号或系数转化为二元字符串,不同的二值化方法对相同的系数进行编码得到的二元字符串可能具有不同的二元概率模型,以及不同的字符串长度。
上下文:一般情况下,不同的语法元素之间并不完全独立,且相同语法元素自身也具有一定的记忆性。因此,根据条件熵的理论,利用其他已编码的语法元素进行条件编码,相对于独立编码或者无记忆编码能够进一步提高编码性能。这些用来作为条件的已编码符号信息称为上下文。
上下文模型:在视频编解码中,基于上下文更新符号概率的过程称为上下文模型,并且根据具体应用条件,同一个语法元素可以使用的多个上下文模型来自适应的更新当前条件下的符号概率,从而进一步压缩码率。
熵编码:是指按照信息熵的原理进行的无损编码方式,它处于视频压缩的最后一个处理模块,把一系列用来表示视频序列的元素符号转变为一个用来传输或存储的二进制码流,熵编码模块的输出数据即原始视频压缩后的最终码流。熵编码可以有效地去除这些视频元素符号的统计冗余,是保证视频编码压缩效率的重要工具之一。
光栅扫描:是指将二维矩形光栅映射到一维光栅,一维光栅的入口从二维光栅的第一行开始,然后扫描第二行、第三行,依次类推。光栅中的行从左到右扫描。
右上对角扫描:是指从系数块右下方最后一个系数开始扫描,终止于系数块左上方第一个系数,在每个小块内的扫描顺序都是按照右下-右上-左下-左上的顺序,其他小块于此相同,块之间的扫描顺序与系数之间的扫描顺序一样,也为右下-右上-左下-左上。
水平往返扫描:是指将二维矩形映射到一维串,一维串的入口从二维矩形的起始行开始,逐行扫描整个二维矩形。起始行的行扫描方向是从左到右,起始行的相邻行的行扫描方向是从右到左,任意两个相邻行具有相反的行扫描方向。
逆水平扫描:是指从系数块右下方最后一个系数开始扫描,终止于系数块左上方第一个系数,在每个系数块内从右到左,从下到上扫描,块之间的扫描顺序为右下块-右上块-左下块-左上块的顺序。
逆垂直扫描:是指从系数块右下方最后一个系数开始扫描,终止于系数块左上方第一个系数,在每个小块内从下到上,从右到左扫描。
Z-扫描:是指对于任何一个边长为偶数的正方形来说,都先扫描左上角,再扫描右上角,然后是扫描左下角,最后是扫描右下角。
一元码:是一种简单的二值化方法。具体的,对于非负整数N,其一元码表示为N个1加1个0。
截断一元码:是一元码的变体。具体的,在已知待编码符号的最大值为N_max的情况下,假设当前待编码符号为非负整数N,若N<N_max,则截断一元码即为一元码;若N=N_max,则截断一元码为N个1。
截断二元码:计算val的相关变量(stage,num0,num1以及thd等),对于0~(thd-1),其二元符号串长度为stage的定长码,对于thd~val,其二元符号串长度为(stage+1)的定长码。
游程编码:通过记录每个值连续出现的次数,作为编码值。例如:0001110011010100001100,压缩之后输出:33221111422。
定长编码:使用固定码长对待编码系数进行编码,例如使用8位二进制数进行编码的ASCII码。
半定长编码:是指将待编码系数按照预测方向,以及残差大小进行分组,编码分组模式,每个组编码一个码长,对同一个组内的系数使用相同的定长进行编码。
k阶指数哥伦布编码:k阶指数哥伦布编码包括前缀prefix和后缀suffix两部分,编码方法包括以下步骤:1)将数字X以二进制形式写出,去掉最低的k个比特,之后加1,求得T;2)计算T的比特数,前面需要补T-1个零;3)将去掉的最低k个比特位补回比特串尾部。
截断莱斯编码:截断莱斯码编码包括前缀prefix和后缀suffix两部分,已知最大上限值cMax,莱斯参数cRice,对待编码符号cVal进行编码。
霍夫曼编码:统计所有系数出现的频率,构建霍夫曼树,为概率较大的系数分配较短码字,为概率较小的系数分配较长码字。
哥伦布-莱斯编码:Golomb-Rice是Golomb编码的一个变种,相比Golomb编码区别是,参数m的限制条件为,m必须是2的次幂。具体的,初始化参数m,m必须为2的次幂;计算q和r,其中,q=N/m;r=N&(m-1);使用一元编码编码q,取r的二进制位的低log2(m)位作为r的码字。
下面,结合JPEG-LS编码模型介绍下哥伦布-莱斯编码算法。
在JPEG-LS编码算法中,利用周围重建像素值计算某一方向的像素梯度,可以根据当前像素的预测方向计算一个梯度值,或者根据经验,计算水平垂直方向的梯度值,对梯度进行量化。
按照JPEG-LS计算梯度的门限参数T1,T2和T3。
maxval=2n-1
factor=(maxval+128)>>8
其中,n为图像位宽,Near是量化失真参数。按照门限参数T1,T2,T3,对梯度进行量化如下:
其中,Di表示梯度计算值。i表示多个方向。根据量化后的梯度,得到对应的上下文索引:Q=(Q1*9+Q2)*9+Q3。
根据索引值Q的符号sign以及残差修正值C[Q](根据上下文重建像素残差累计计算得到)进行自适应误差修正:(有些像SAO,修正的是预测值):
if(sign==l) Px=Px+c[Q];
else Px=Px-c[Q];
if(Px>Maxval)Px=Maxval;
else if(Px<0) Px=0;
为了使得残差值Errval的幅值进一步缩小,近无损压缩量化公式为:
其中,sign表示索引值Q的符号sign,此时预测误差的取值范围是:±(range-1)。
Range0=(2n-1)原来像素范围;
Range0=±range预测残差范围;
range1=-(range0-Near)/(2Near+1)量化后的极小值;
range2=(range0+Near)/(2Near+1)量化后的极大值;
range=range2+1。
为了将误差值的范围再次压缩,当预测误差Errval小于-range/2,便将预测误差Errval加上range值。在完成这步处理后,若预测误差Errval大于等于(1+range)/2,则需要将预测误差Errval减去range值。经过处理后,所有预测误差Errval的值的绝对值都不会大于(range+1)/2。模减的公式如下:
最后,根据上下文估计哥伦布编码的k值。
A上下文残差绝对值累加器(即前n个已编码的残差值的绝对值之和)
B+=Errval*(2Near+1)上下文重建值残差累加器(即前n个已编码重建值之和),用于计算预测误差修正参数C(Q)。N是对应上下文环境的计数器,保存的是该上下文环境出现的次数。每当B/N的值(修正残差平均值)增加0.5或更多时,C[Q]的值将会自增1,反之B/N的值减小0.5或更多时,C[Q]的值会自减1。同时,为了使得计算更符合局部特征,可以设置一个阈值N0,当N大于N0的时候,N和A的值减半,同时B和C[Q]的值也减半。
其中,K的计算是假设当前残差分布符合几何分布的条件下导出的的期望值。以正整数m为参数,对n进行哥伦布编码,分为两部分:n%m的二进制码和n/m的一元码。对几何分布的被编码变量,总存在一个m使得编码后的平均码长最短。当m的取值为2^k时的哥伦布编码叫做哥伦布-莱斯编码。其中,K=min{k1|2k1N>=A}。
残差原来的范围是±(range+1)/2,将其进行映射:
对Merrval使用哥伦布-莱斯编码。
同时,对于平坦区域,即Di=0,直接使用游程编码。当检测到相邻像素a=b=c=d时,即g1=g2=g3=0时,说明编码进行到了一个很平坦的区域,则会进入游程编码模式。在游程模式中,会继续检测当前像素x后面的像素是否和x相等(在进无损模式则判断是否和x的差值在一个允许的范围内),如果满足,则继续往后检测,然后将相同值的个数(包括x在内)记录下来,即游程长度。
现有技术中,SRCC编码技术主要针对与有损编码中,存在较多残差值为0的系数进行的编码,不适用于无损编码或近无损编码。基于上下文的自适应二进制算数编码(Context-based adaptive binary arithmetic coding,CABAC)技术过程较为复杂,会带来编解码复杂度的增加,因此不宜使用于近无损压缩。现有的Golomb-Rice编码和半定长编码较使用于无损和近无损编码有较好的效果,但是,Golomb编码的码长依赖于选定的阶数k,若k值不准确,会导致二值化后的码长很长,因此一般只适用于逐点编码,快速更新k值。半定长编码可以将码长有效的控制在一定的范围之内,但是其在编码每个系数之前,需要先编码这些系数的码长,因此这个方法一般适用于分组编码,若组内系数个数太少,这个方法会增加平均码长,但增加编码系数的个数,往往会带来系数值的范围增大,由于组内每个系数使用相同的码长,当组内最大值越大,那么平均码长就会增大。鉴于这两种方案都存在一些不足,因此结合这两种的编码方式,提出一种基于无损和近无损编码的系数编码方案。
接下来,对本申请实施例的实施环境和应用场景进行简单介绍。本申请提供的视频编解码方法可以适用于如图1所示的视频编解码系统。
下面描述本申请实施例所应用的系统架构。参见图1,给出了本申请实施例所应用的编解码系统(也可以称为编码及解码系统)10的架构示意图。如图1所示,编解码系统10可以包括源设备11和目的设备12,源设备11用于对图像进行编码,因此,源设备11可被称为视频编码装置。目的设备12用于对由源设备11所产生的经编码的图像数据进行解码,因此,目的设备12可被称为视频解码装置。
源设备11和目的设备12可以包括各种装置,例如,包含桌上型计算机、移动计算装置、笔记型(例如,膝上型)计算机、平板计算机、机顶盒、手机、电视机、相机、显示装置、数字媒体播放器、视频游戏控制台、车载计算机、无线通信设备等等。
可选地,图1中的源设备11和目的设备12可以是两个单独的设备,或者,源设备11和目的设备12为同一设备,即源设备11或对应的功能以及目的设备12或对应的功能可以集成在同一个设备上。
源设备11和目的设备12之间可以进行通信,例如,目的设备12可从源设备11接收经编码图像数据。在一个实例中,源设备11和目的设备12之间可以包括一个或多个通信媒体,通过一个或多个通信媒体传输经编码图像数据,该一个或多个通信媒体可包含路由器、交换器、基站或促进从源设备11到目的设备12的通信的其它设备。
如图1所示,源设备11包括编码器112,可选地,源设备11还可以包括图像预处理器111以及通信接口113。其中,图像预处理器111,用于对接收到的待编码图像执行预处理,例如,图像预处理器111执行的预处理可以包括整修、色彩格式转换(例如,从RGB格式转换为YUV格式)、调色或去噪等。编码器112,用于接收经预处理的图像,采用相关预测模式(如本文各个实施例中的预测模式)对经预处理的图像进行处理,从而提供经编码图像数据。在一些实施例中,编码器112可以用于执行下文中所描述的各个实施例中的图像编码过程。通信接口113,可用于将经编码图像数据传输至目的设备12或任何其它设备(如存储器),以用于存储或直接重构,其它设备可为任何用于解码或存储的设备。通信接口113也可以将经编码图像数据封装成合适的格式之后再传输。
可选地,上述图像预处理器111、编码器112以及通信接口113可能是源设备11中的硬件部件,也可能是源设备11中的软件程序,本申请实施例不做限定。
继续如图1所示,目的设备12包括解码器122,可选地,目的设备12还可以包括通信接口121、图像后处理器123。其中,通信接口121可用于从源设备11或任何其它源设备接收经编码图像数据,该任何其它源设备例如为存储设备。通信接口121还可以解封装通信接口113所传输的数据以获取经编码图像数据。解码器122,用于接收经编码图像数据并输出经解码图像数据(也称为经重构图像数据或已重构图像数据)。在一些实施例中,解码器122可以用于执行下文中所描述的各个实施例所述的解码过程。
图像后处理器123,用于对经解码图像数据执行后处理,以获得经后处理像数据。图像后处理器123执行的后处理可以包括:色彩格式转换(例如,从YUV格式转换为RGB格式)、调色、整修或重采样,或任何其它处理,还可用于将将经后处理图像数据传输至显示设备进行显示。
同理,可选地,上述通信接口121、解码器122以及图像后处理器123可能是目的设备12中的硬件部件,也可能是目的设备12中的软件程序,本申请实施例不做限定。
下面对图1中的编码器和解码器的结构进行简单介绍。
参见图2,图2示出用于实现本申请实施例的编码器20的实例的示意性框图。在图2中,编码器包括预测处理单元201、残差计算单元202、变换处理单元203、量化单元204、熵编码单元205、反量化单元(也可以称为逆量化单元)206、反变换单元(也可以称为逆变换处理单元)207、重构单元(或者称为重建单元)208以及滤波器单元209。可选地,编码器20还可以包括缓冲器、经解码图像缓冲器,其中,缓冲器用于缓存重构单元208输出的重构图像块,经解码图像缓冲器用于缓存滤波器单元209输出的滤波后的图像块。
编码器20的输入为图像(可以称为待编码图像)的图像块,图像块也可以称为当前图像块或待编码图像块,编码器20中还可以包括分割单元(图2中未示出),该分割单元用于将待编码图像分割成多个图像块。编码器20用于逐块编码从而完成对待编码图像的编码,例如,对每个图像块执行编码过程。
预测处理单元201,用于接收或获取图像块(当前待编码图像的当前待编码图像块,也可以称为当前图像块,该图像块可以理解为图像块的真实值)和已重构图像数据,基于已重构图像数据中的相关数据对当前图像块进行预测,得到当前图像块的预测块。可选地,预测处理单元201可以包含帧间预测单元、帧内预测单元和模式选择单元,模式选择单元用于选择帧内预测模式或者帧间预测模式,若选择帧内预测模式,则由帧内预测单元执行预测过程,若选择帧间预测模式,则由帧间预测单元执行预测过程。
残差计算单元202用于计算图像块的真实值和该图像块的预测块之间的残差,得到残差块,例如,通过逐像素将图像块的像素值减去预测块的像素值。
变换处理单元203用于对残差块进行例如离散余弦变换(discrete cosinetransform,DCT)或离散正弦变换(discrete sine transform,DST)的变换,以在变换域中获取变换系数,变换系数也可以称为变换残差系数,该变换残差系数可以在变换域中表示残差块。
量化单元204用于通过应用标量量化或向量量化来量化变换系数,以获取经量化变换系数,经量化变换系数也可以称为经量化残差系数。量化过程可以减少与部分或全部变换系数有关的位深度。例如,可在量化期间将n位变换系数向下舍入到m位变换系数,其中n大于m。可通过调整量化参数(quantization parameter,QP)修改量化程度。例如,对于标量量化,可以应用不同的标度来实现较细或较粗的量化。较小量化步长对应较细量化,而较大量化步长对应较粗量化。可以通过量化参数(quantization parameter,QP)指示合适的量化步长。
熵编码单元205用于对上述经量化残差系数进行熵编码,以经编码比特流的形式输出的经编码图像数据(即当前待编码图像块的编码结果),然后可以将经编码比特流传输到解码器,或将其存储起来,后续传输至解码器或用于检索。熵编码单元205还可用于对当前图像块的其它语法元素进行熵编码,例如将预测模式熵编码至码流等。熵编码算法包括但不限于可变长度编码(variable length coding,VLC)算法、上下文自适应VLC(contextadaptive VLC,CAVLC)算法、算术编码算法、上下文自适应二进制算术编码(contextadaptive binary arithmetic coding,CABAC)算法、基于语法的上下文自适应二进制算术编码(syntax-based context-adaptive binary arithmetic coding,SBAC)算法、概率区间分割熵(probability interval partitioning entropy,PIPE)算法。
反量化单元206用于对上述经量化系数进行反量化,以获取经反量化系数,该反量化是上述量化单元204的反向应用,例如,基于或使用与量化单元204相同的量化步长,应用量化单元204应用的量化方案的逆量化方案。经反量化系数也可以称为经反量化残差系数。
反变换单元207用于对上述反量化系数进行反变换,应理解,该反变换是上述变换处理单元203的反向应用,例如,反变换可以包括逆离散余弦变换(discrete cosinetransform,DCT)或逆离散正弦变换(discrete sine transform,DST),以在像素域(或者称为样本域)中获取逆变换块。逆变换块也可以称为逆变换经反量化块或逆变换残差块。
重构单元208用于将逆变换块(即逆变换残差块)添加至预测块,以在样本域中获取经重构块,重构单元208可以为求和器,例如,将残差块的样本值(即像素值)与预测块的样本值相加。该重构单元208输出的重构块可以后续用于预测其他图像块,例如,在帧内预测模式下使用。
滤波器单元209(或简称“滤波器”)用于对经重构块进行滤波以获取经滤波块,从而顺利进行像素转变或提高图像质量。滤波器单元可以为环路滤波器单元,旨在表示一个或多个环路滤波器,例如去块滤波器、样本自适应偏移(sample-adaptive offset,SAO)滤波器或其它滤波器,例如双边滤波器、自适应环路滤波器(adaptive loop filter,ALF),或锐化或平滑滤波器,或协同滤波器。可选地,该滤波单元209输出的经滤波块可以后续用于预测其他图像块,例如,在帧间预测模式下使用。
具体的,在本申请实施例中,编码器20用于实现后文实施例中描述的视频编解码方法。
参见图3,图3示出用于实现本申请实施例的解码器30的实例的示意性框图。视频解码器30用于接收例如由编码器20编码的经编码图像数据(即经编码比特流,例如,包括图像块的经编码比特流及相关联的语法元素),以获取经解码图像。解码器30包括熵解码单元301、反量化单元302、反变换处理单元303、预测处理单元304、重构单元305、滤波器单元306。在一些实例中,解码器30可执行大体上与图2的编码器20描述的编码遍次互逆的解码遍次。可选地,解码器30还可以包括缓冲器、经解码图像缓冲器,其中,缓冲器用于缓存重构单元305输出的重构图像块,经解码图像缓冲器用于缓存滤波器单元306输出的滤波后的图像块。
熵解码单元301用于对经编码图像数据执行熵解码,以获取经量化系数和/或经解码的编码参数(例如,解码参数可以包括帧间预测参数、帧内预测参数、滤波器参数和/或其它语法元素中的任意一个或全部)。熵解码单元301还用于将上述经解码的编码参数转发至预测处理单元304,以供预测处理单元根据编码参数执行预测过程。
反量化单元302的功能可与编码器20的反量化单元206的功能相同,用于反量化(即,逆量化)在由熵解码单元301解码的经量化系数。
反变换处理单元303的功能可与编码器20的反变换单元207的功能相同,重构单元305(例如求和器)的功能可与编码器20的重构单元208的功能相同,用于对上述经量化系数进行逆变换(例如,逆DCT、逆整数变换或概念上类似的逆变换过程),得到逆变换块(也可以称为逆变换残差块),该逆变换块即为当前图像块在像素域中的残差块。
预测处理单元304,用于接收或获取经编码图像数据(例如当前图像块的经编码比特流)和已重构图像数据,预测处理单元301还可以从例如熵解码单元302接收或获取预测相关参数和/或关于所选择的预测模式的信息(即经解码的编码参数),并且基于已重构图像数据中的相关数据和经解码的编码参数对当前图像块进行预测,得到当前图像块的预测块。可选地,预测处理单元304可以包含帧间预测单元、帧内预测单元和模式选择单元,模式选择单元用于选择帧内预测模式或者帧间预测模式,若选择帧内预测模式,则由帧内预测单元执行预测过程,若选择帧间预测模式,则由帧间预测单元执行预测过程。
重构单元305用于将逆变换块(即逆变换残差块)添加到预测块,以在样本域中获取经重构块,例如将逆变换残差块的样本值与预测块的样本值相加。
滤波器单元306用于对经重构块进行滤波以获取经滤波块,该经滤波块即为经解码图像块。
具体的,在本申请实施例中,解码器30用于实现后文实施例中描述的视频解码方法。
应当理解的是,在本申请实施例的编码器20和解码器30中,针对某个环节的处理结果也可以经过进一步处理后,输出到下一个环节,例如,在插值滤波、运动矢量推导或滤波等环节之后,对相应环节的处理结果进一步进行Clip或移位shift等操作。
本申请实施例提供的视频解码方法、视频编码方法可以由电子设备来执行,该电子设备可以具有对任意图像或者视频图像进行压缩编码或者解码的功能。在一些实施例中,该电子设备可以为笔记本电脑、平板电脑、台式计算机、便携式计算机等等,本申请实施例对此不做限定。
下面在图1~图3所示出的视频编解码系统的基础上,本申请提供一种可能的视频编/解码实现方式,如图4A所示,图4A为本申请提供的一种视频编/解码的流程示意图,该视频编/解码实现方式包括过程①至过程⑤,过程①至过程⑤可以由上述的编码器20、解码器30、源设备11或目的设备12中的任意一个或多个执行。
过程①:将一帧图像分成一个或多个互相不重叠的并行编码单元。该一个或多个并行编码单元间无依赖关系,可完全并行/独立编码和解码,如图4A所示出的并行编码单元1和并行编码单元2。
过程②:对于每个并行编码单元,可再将其分成一个或多个互相不重叠的独立编码单元,各个独立编码单元间可相互不依赖,但可以共用一些并行编码单元头信息。
例如,独立编码单元的宽为w_lcu,高为h_lcu。若并行编码单元划分成一个独立编码单元,则独立编码单元的尺寸与并行编码单元完全相同;否则,则独立编码单元的宽应大于高(除非是边缘区域)。
通常的,独立编码单元可为固定的w_lcu×h_lcu,w_lcu和h_lcu均为2的N次方(N≥0),如独立编码单元的尺寸为:128×4,64×4,32×4,16×4,8×4,32×2,16×2或8×2等。
作为一种可能的示例,独立编码单元可为固定的128×4。若并行编码单元的尺寸为256×8,则可将并行编码单元等分为4个独立编码单元;若并行编码单元的尺寸为288×10,则并行编码单元划分为:第一/二行为2个128×4+1个32×4的独立编码单元;第三行为2个128×2+1个32×2的独立编码单元。
值得注意的是,独立编码单元既可以是包括亮度Y、色度Cb、色度Cr三个分量,或红(red,R)、绿(green,G)、蓝(blue,B)三个分量,也可以仅包含其中的某一个分量。若独立编码单元包含三个分量,则这三个分量的尺寸可以完全一样,也可以不一样,具体与图像的输入格式相关。
过程③:对于每个独立编码单元,可再将其分成一个或多个互相不重叠的编码单元,独立编码单元内的各个编码单元可相互依赖,如多个编码单元可以进行相互参考预编解码。
若编码单元与独立编码单元尺寸相同(即独立编码单元仅分成一个编码单元),则其尺寸可为过程②所述的所有尺寸。
若独立编码单元分成多个互相不重叠的编码单元,则其可行划分例子有:水平等分(编码单元的高与独立编码单元相同,但宽不同,可为其1/2,1/4,1/8,1/16等),垂直等分(编码单元的宽与独立编码单元相同,高不同,可为其1/2,1/4,1/8,1/16等),水平和垂直等分(四叉树划分)等,优选为水平等分。
编码单元的宽为w_cu,高为h_cu,则其宽应大于高(除非是边缘区域)。通常的,编码单元可为固定的w_cu x h_cu,w_cu和h_cu均为2个N次方(N大于等于0),如16x4,8x4,16x2,8x2,8x1,4x1等。
作为一种可能的示例,编码单元可为固定的16x4。若独立编码单元的尺寸为64x4,则可将独立编码单元等分为4个编码单元;若独立编码单元的尺寸为72x4,则编码单元划分为:4个16x4+1个8x4。
值得注意的是,编码单元既可以是包括亮度Y、色度Cb、色度Cr三个分量(或红R、绿G、蓝B三分量),也可以仅包含其中的某一个分量。若包含三个分量,几个分量的尺寸可以完全一样,也可以不一样,具体与图像输入格式相关。
值得注意的是,过程③是视频编解码方法中一个可选的步骤,视频编/解码器可以对过程②获得的独立编码单元进行残差系数(或残差值)进行编/解码。
过程④:对于编码单元,可以将其可再将其分成一个或多个互相不重叠的预测组(Prediction Group,PG),PG也可简称为Group,各个PG按照选定预测模式进行编解码,得到PG的预测值,组成整个编码单元的预测值,基于预测值和编码单元的原始值,获得编码单元的残差值。
过程⑤:基于编码单元的残差值,对编码单元进行分组,获得一个或多个相不重叠的残差小块(residual block,RB),各个RB的残差系数按照选定模式进行编解码,形成残差系数流。具体的,可分为对残差系数进行变换和不进行变换两类。
其中,过程⑤中残差系数编解码方法的选定模式可以包括,但不限于下述任一种:半定长编码方式、指数哥伦布(Golomb)编码方法、Golomb-Rice编码方法、截断一元码编码方法、游程编码方法、直接编码原始残差值等。
例如,视频编码器可直接对RB内的系数进行编码。
又如,视频编码器也可对残差块进行变换,如DCT、DST、Hadamard变换等,再对变换后的系数进行编码。
作为一种可能的示例,当RB较小时,视频编码器可直接对RB内的各个系数进行统一量化,再进行二值化编码。若RB较大,可进一步划分为多个系数组(coefficient group,CG),再对各个CG进行统一量化,再进行二值化编码。在本申请的一些实施例中,系数组(CG)和量化组(QG)可以相同。
下面以半定长编码方式对残差系数编码的部分进行示例性说明。首先,将一个RB块内残差绝对值的最大值定义为修整最大值(modified maximum,mm)。其次,确定该RB块内残差系数的编码比特数(同一个RB块内残差系数的编码比特数一致)。例如,若当前RB块的关键限值(critica llimit,CL)为2,当前残差系数为1,则编码残差系数1需要2个比特,表示为01。若当前RB块的CL为7,则表示编码8-bit的残差系数和1-bit的符号位。CL的确定是去找满足当前子块所有残差都在[-2^(M-1),2^(M-1)]范围之内的最小M值。若同时存在-2^(M-1)和2^(M-1)两个边界值,则M应增加1,即需要M+1个比特编码当前RB块的所有残差;若仅存在-2^(M-1)和2^(M-1)两个边界值中的一个,则需要编码一个Trailing位来确定该边界值是-2^(M-1)还是2^(M-1);若所有残差均不存在-2^(M-1)和2^(M-1)中的任何一个,则无需编码该Trailing位。
另外,对于某些特殊的情况,视频编码器也可以直接编码图像的原始值,而不是残差值。
基于前述的问题,本申请针对无损与近无损的压缩编码框架,提出一种视频编解码方法,可以对原始像素(量化/非量化)的值、或预测后(量化/非量化)的残差系数、或变换后(量化/非量化)的变换系数进行如下编码:
(1)考虑到原始像素,残差系数以及变换系数之间,数据分布的不同,对于不同的数据,根据其分布特点使用不同的编码方法。
(2)同时可以对数据设计不同的扫描方式,扫描的方式要考虑数据的分布,尽可能使幅值相近的系数分布在一起。
(3)对于扫描后得到的数据,可以对其进行分组,分组方式可以根据数据的分布进行不规则分组,也可以直接进行固定分组,数据的具体分组情况可以编解码约定一致,或者根据上下文导出(包括根据已编码数据导出,根据预测系数导出,根据已编码的参数导出),或者由编码端传参的方式得到。
(4)对于不同的数据分布,可以选择直接根据待编码数据进行编码,也可以根据上下文进行参数估计,估计待编码系数的编码范围,或直接估计相关的待编码系数值,然后可以根据估计值的范围,计算得到一个参数纠正值,可以选择是否再传递一个参数纠正值,使得估计参数更加准确。
(5)对于不同的数据分布,可以根据上下文进行参数估计,估计下一组(每组系数个数可以是大于等于1)编码系数的数值范围,根据估计值选择对下一组系数的编码方式。
(6)对于不同的数据分布,可以根据上下文进行参数估计,然后从码流中解析一个参数纠正值,得到下一组编码参数的数值范围,根据数值范围根据选择对下一组系数的编码方式,可以根据系数不同范围选择不同的编码方案和编码方式。
(7)由于时域上的数据分布与频域上的数据分布不同,时域上的数据分布较为均匀,而频域上的数据较大的能量会分布在低频信息上,因此对变换系数的编码,可以根据考虑对变换后系数的位置进行特殊分组。
(8)对系数进行编码的时候,可以选择一元码、截断一元码、截断二元码、定长编码、半定长编码、游程编码、k阶指数哥伦布编码、截断莱斯编码、哥伦布-莱斯编码、霍夫曼编码、算术编码或者自适应变长编码等。可以使用其中一种或结合多种编码方式,对系数进行编码。
在具体的实施方式中,对编码系数的扫描方式可以选择光栅扫描、块扫描、水平扫描、垂直扫描、往返(水平/垂直)扫描、对角(左上,右上,左下,右下)扫描、逆对角线扫描、逆水平扫描、逆垂直扫描或者基于一个固定的扫描模板进行扫描等。
整体来说,本申请实施例提供的总体编码流程与解码流程的过程一致,对于需要写入码流的参数,可以经过在编码端的比特率失真优化(rate distortion optimization,RDO)得到,也可以估计得到。本申请实施例提供的视频编解码流程主要包括分组编码流程以及无需分组编码流程。
1、分组编码流程:
首先将系数变为一维向量,若待编码区域是三维图像,先将三维图像划分为1个或多个二维系数块,若待编码区域是二维系数块,将待编码块使用某一种扫描顺序,将二维系数块扫描为成一维系数向量。
其次将系数向量按照系数大小进行分组,将幅值相近的系数分为同一个组,根据几种固定的分组方式,将一维系数进行分组,然后将具体的分组信息编码,或者根据预测方式,变换方式,导出一维系数分组方式,同一组内编码系数可以使用一个参数group_param,这个参数可以指导后面所有系数的编码。参数group_param可以用定长码编码,也可以使用一元码或截断一元码编码。然后根据group_param使用某一种编码方式编码组内每一个系数。
2、无需分组编码流程:
类似分组方案,去除分组方法,逐个系数进行编码,对于每个待编码系数,可以基于上下文导出待编码系数的取值范围,基于这个范围选择一种编码方式对其进行编码。
下面,简单介绍本申请实施例总体解码流程:
a)确定对系数的扫描方法;
b)确定系数类型(原始值,变换系数,预测后的残差系数);
c)确定系数编码方法;
d)根据编码方法从码流中解码出每个系数,或每组系数所需参数;
e)根据系数编码方法确定是否需要根据上下文信息导出预测参数;
f)若存在预测参数,则根据预测参数以及码流中解析的参数,按照系数编码方式进行相应的解码,否则,直接根据预测参数以及码流中解析的参数,按照系数编码方式进行相应的解码;
g)若存在分组,则根据码流将每组内的解码系数按照顺序放回原来系数位置,否则直接解码得到所有系数值。
其中,解码端的步骤a)、b)和c)中确定的方式可以由码流解析,也可以由编解码端约定,或者解码端导出(根据当前块的大小或预测方式,变换方式等参数确定)的方法确定。
1、分组解码的流程主要包括:首先,确定该块的扫描方式;其次,确定扫描后的系数的分组划分方式;然后,使用某一种解码每个组参数group_param,根据group_param,使用某一种解码方法解码组内每个系数值;最后根据扫描方式,将改编码块内系数恢复为原来的排布。
2、无需分组解码的流程主要包括:首先,确定该块的扫描方式;根据上下文进行预测当前编码系数范围,根据系数的取值范围,选择一中解码方法进行解码。
接下来将结合附图对本申请实施例提供的视频解码方法、视频编码方法进行详细介绍。
本申请提供一种视频解码方法,请参考图4B,为本申请实施例提供的一种视频编解码方法的流程图。该方法中的编码过程可以由前述的编码器来执行,解码过程可以由前述的解码器来执行,该方法可以包括如下几个步骤。
401:编码端将原始图像数据中的待编码单元根据第一扫描方式进行扫描得到系数序列。
在一种实施方式中,编码端对原始数据块进行扫描,可以基于不同的扫描方式得到待编码的系数。具体的,第一扫描方式可以包括一下任一种:光栅扫描、块扫描、水平扫描、垂直扫描、往返(水平/垂直)扫描、对角(左上,右上,左下,右下)扫描、逆水平扫描、逆垂直扫描、希尔伯特扫描或者其他的基于一个固定的扫描模板进行的扫描等。其中,每种扫描方式的具体扫描过程可以参照相关的技术说明,本申请中对此不做过多限定。
编码端可以根据当前系数的预测方式或变换方式等导出其中一种或多种扫描方式。或者,编码端可以根据编解码的预先约定,对所有系数选择一种扫描方式,从而解码端也可以根据预先约定确定该扫描方式。
在一种实施方式中,本申请实施例中的视频编解码方式可以适用于,对原始像素的编码、或对原始像素值进行预测得到残差值的编码、或对原始像素值进行预测得到残差值再进行量化后的系数进行编码、或对预测后的残差值经变换后得到的变换系数进行编码、或对预测后残差值经变换后得到变换系数并进行量化后的系数进行编码等。以上几种数据的编码都可以通过本申请提供的实施方式进行编码压缩。
也就是说,本申请实施例中所指的原始数据块、待编码单元或解码得到的重建数据块,可以为待编码图像的原始像素值组成的数据块,或者,是对原始像素值进行预测得到的残差值组成的数据块,或者,是对所述残差值经量化后的系数组成的数据块,或者,是对所述残差值经变换后得到的变换系数组成的数据块,或者,是对所述残差值经变换后变换系数再经量化后的系数组成的数据块。下述的实施例中对此不再重复说明。
需要说明的是,如果待编码的图像数据有多个分量的话,每个分量可以使用不同的编码方式。
在一种实施方式中,本申请实施例中的待编码的数据序列可以为各种大小的系数块,例如,可以是m×n的数据块,其中m和n均小于或等于64,例如待编码单元为16×4的系数块、16×1的系数块、8×4的系数块、8×2的系数块或者4×2的系数块等。
402:编码端将系数序列按照第一分组方式进行分组,得到多组待编码子序列。
在一种实施方式中,所述分组方式包括:固定长度的分组方式,或者,基于系数值大小进行分组划分的半定长分组,或者,基于系数排列位置进行分组划分中的至少一种。其中,多组待编码子序列中的系数数量可以相同,也可以不同。后续将基于具体的实施例对具体的分组方式进行介绍,此处不再赘述。
403:编码端确定每一组待编码子序列对应的系数编码方式,并逐个进行编码,得到已编码的码流。
在一种实施方式中,所述编码方式可以包括前述的一元码、截断一元码、截断二元码、定长编码、半定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码、哥伦布-莱斯编码等中的至少一种。还可以为上述编码方式中多种编码方式的组合,后续将基于具体的实施例进行介绍,此处不再赘述。
在一种实施方式中,针对待编码子序列确定的编码方式可以相同,也可以不同。后续将基于具体的实施例对具体的编码方式进行介绍,此处不再赘述。
404:编码端向解码端逐个传输码流。
405:解码端获取码流,确定待解码单元的扫描方式、分组划分方式以及每一组对应的编码方式。
解码端获取已编码的码流,可以逐段进行解码。其中,待解码单元可以为已编码的码流中解码端进行解码处理的数据单元。
在一种实施方式中,解码端可以根据编解码端的预先约定或者上下文信息,确定该待解码单元所用的扫描方式、分组划分方式以及每一组对应的编码方式中的至少一种。或者,解码端还可以根据码流解析出该待解码单元所用的扫描方式、分组划分方式以及每一组对应的编码方式中的至少一种。或者,解码端还可以根据该待解码单元的预测方式、量化方式和/或变换方式得到每一组对应的分组方式。后续将基于具体的实施例进行介绍,此处不再赘述。
406:解码端逐个根据每一组的编码方式进行解码,得到待解码单元对应的系数块。
在一种实施方式中,解码过程具体可以包括:
1、解码端根据编码算法解码得到每个组的组参数;
在一个例子中,在一种实施方式中,组参数的解码方式具体可以包括:
解码端根据以下至少一种编码方式对应的解码方式进行解码得到每个组的组参数:一元码、截断一元码、截断二元码、定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码或哥伦布-莱斯编码。
2、解码端根据每个组的所述组参数,根据所述半定长编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,解码过程具体可以包括:
1、解码端根据定长编码算法解码得到每个组的组莱斯参数,或者,根据上下文模型得到每个组的组莱斯参数;
2、解码端根据每个组的所述组莱斯参数,根据哥伦布-莱斯编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,解码过程具体可以包括:
1、解码端根据上下文模型得到每个组的组莱斯参数;
2、解码端根据定长编码算法或者截断一元码解码得到每个组的组参数偏差;根据每个组的组莱斯参数和组参数偏差得到每个组的组参数;
在一个例子中,可以根据组莱斯参数和组参数偏差更新得到每个组的组参数,具体的,组参数=组莱斯参数+组参数偏差。
3、解码端根据每个组的组参数,根据哥伦布-莱斯编码算法解码得到每个组中的多个系数值,待解码单元对应的系数块包括每个组中的多个系数值。
在一种实施方式中,解码过程具体可以包括:
1、解码端根据定长编码算法解码得到每个组的阶数k,或者,根据上下文模型得到每个组的阶数k;
2、解码端根据每个组的所述阶数k,根据k阶指数哥伦布编码算法解码得到每个组中的多个系数值,待解码单元对应的系数块包括每个组中的多个系数值。
在一种实施方式中,解码过程具体可以包括:
1、解码端根据上下文模型得到每个组的阶数k;
2、解码端根据定长编码算法或者截断一元码解码得到每个组的组参数偏差;然后,根据组参数偏差更新每个组的阶数k;
在一个例子中,每个组的阶数k=组参数偏差+上下文模型得到原阶数k。
3、根据每个组更新后的所述阶数k,根据k阶指数哥伦布编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,解码过程具体可以包括:
1、解码端根据已经解码得到的一个或多个组的系数、预测方式、量化方式或者变换方式中的至少一个,确定当前组的编码方式;
2、解码端根据当前组的编码方式对应的解码方式进行解码得到当前组的系数,其中,当前组的编码方式可以是哥伦布-莱斯编码、k阶指数哥伦布编码或者半定长编码方式中的几种编码方式的组合。后续将基于具体的实施例进行介绍,此处不再赘述。
在一种实施方式中,上述任一种编解码方式中,编码单元的多个分组中,至少两个分组的编码方式不同。
407:解码端根据待解码单元的扫描方式,将待解码单元的系数块内系数进行恢复得到重建数据块。
解码端逐个将每个组系数块内系数进行恢复得到待解码单元对应的重建数据块。
在一种实施方式中,本申请实施例中适用的扫描方式可以包括光栅扫描、块扫描、水平扫描、垂直扫描、往返扫描、对角扫描、逆水平扫描、逆垂直扫描或者希尔伯特扫描中的至少一种。
通过本申请的上述实施方式,解码端可以根据不同的预测方式,导出不同的扫描方式,同时导出系数分组方式,这样的系数分组结合了预测的信息,使得分组后的系数更加统一,编码端对于变化很小的系数,可以分配较小的码字进行编码,从而编码方式较灵活,提高编码性能。此外,通过设计多种固定分组模式可以更好的适应于半定长编码方式,可以灵活地为每个编码块选择更好的二值化方法,编码算法复杂度较低。
以下将结合几个具体的实施例,对本申请实施例的技术方式进行说明。
实施例1:
步骤1、解码端确定待解码单元的扫描方式。
步骤2、解码端根据编解码端预先配置的n种分组方式,解码端根据码流解析出待解码单元的分组方式。
其中,所述分组方式可以包括固定长度的分组方式,或者,基于系数值大小进行分组划分的半定长分组,或者,基于系数排列位置进行分组划分中的至少一种。
具体的,固定长度的分组方式,如将整个待编码单元作为一个组,或者,将整个待解码单元中的每4个系数作为一组,或者,将整个待编码单元中的每3个系数作为一组。示例性的,待编码单元为12行4列的数据单元,即12×4的待编码单元,若根据每4个系数作为一组的分组方式,则可以将12×4的待编码单元分为12个组;若根据每3个系数作为一组的分组方式,则可以将12×4的待编码单元分为16个组;若根据整个待编码作为一组的分组方式,则可以将该12×4的待编码单元直接作为1个组。
在一个例子中,分组方式还可以是基于系数排列位置进行分组划分的方式。具体的,可以将整个待编码单元中的每个系数按照排列位置均匀划分为2组、3组或4组等。例如,按照比例均分为2组,示例性的,对于12×4的待编码单元,若整个待解码单元系数个数N=48,按照1:1的比例均分为2组,则12×4的待编码单元中前24个系数为一组,其余的后24个系数作为另一组。
在一个例子中,还可以将整个待编码单元中的系数按照位置进行不均匀划分为2组、3组或4组等。示例性的,不均匀划分为3组,且划分的比例可以是2:1:1,即可以将12×4的待编码单元中按照系数排列位置的1~24系数为1组,25~36系数作为2组,37-48系数作为3组。
在一个例子中,分组方式还可以是基于每个组的系数数量进行分组,例如,将整个待编码单元中的每2个相邻系数作为一组,或者每3个相邻系数作为一组,或每4个相邻系数作为一组等方式。
在一个例子中,分组方式还可以是基于整个待编码单元中系数排列位置每间隔a个点作为一个组进行划分。例如,a为1时,即可以将整个待编码单元中系数位置每隔1个点的系数作为一个组,分为2个组;a为2时,即可以将整个待编码单元中系数位置每隔2个点的系数作为一个组,分为3个组。
在一个例子中,分组方式还可以是基于待编码单元中系数值大小进行分组划分,由于待编码单元中系数值大小无法预测,因此一般的基于系数值大小进行分组划分之后的每个组中系数个数不相同,因此,这种划分方式在本申请中可以称为半定长分组方式。
示例性的,按照系数值大小分组可以确定待编码单元中每个系数是否大于n,可以将大于或等于n的系数作为一组,小于n的系数作为一组。或者,可以将大于n的系数作为一组,小于或等于n的系数作为一组。
其中,n的值可以为编码端和解码端预先约定的,或者通过信息交互确定的,或者,还通过码流解码确定。
示例性的,编码端和解码端可以预先约定一个数值,如n=23。或者,解码端可以根据已解码重建值或者预测值进行预测,确定数值n。或者,解码端可以根据已解码系数值进行预测,确定数值n。
示例性的,解码端可以根据已解码重建值或根据预测值进行预测,确定数值n;再从码流中解析当前的待解码单元的每一个组内每个系数值是否大于这个预测值n,然后将大于n的系数作为一组,小于或等于n的系数作为一组。
进一步的,上述的多种分组方式中,在对待编码单元中的系数进行分组后,若某组内系数个数较多,可以进行二次分组。例如,将待编码单元中的系数大于n分为一组,该组内的系数个数大于预设的系数个数,则可以对该组进行二次分组,具体的,二次分组的方式可以基于前述任一种的分组方式或者多种分组方式的组合进行分组。
在一个例子中,对于对待编码单元中的系数为变换系数,则分组方式还可以表示为:将整个待编码单元中变换系统的直流分量DC系数作为一组,交流分量AC系数按照前述的任一种的分组方式或者多种分组方式的组合进行分组。
步骤3、解码端使用定长码解码每个组的参数group_param,然后,逐个根据每个组的参数group_param,使用定长码解码每个组内的每个系数值,得到待解码单元对应的系数块。
步骤4、解码端根据待解码单元的扫描方式,将该系数块内系数进行恢复得到原始数据块。
在一种实施方式中,编码端和解码端可以预先约定或者配置有上述几种分组方式中的一种或多种,在视频编解码的过程中,编码端根据待编码单元的系数情况选择其中一种或者几种分组方式进行分组编码。解码端可以通过码流解析或者与编码端的信令交互,或者上下文预测、导出等方式确定分组方式,并基于确定的分组方式对码流进行分组解析。此外,解码端还可以是根据待解码单元内不同像素的预测方向、预测模式、或变换模式等,导出当前待解码单元中系数的分组方式。具体示例将在下文进行描述,此处不再赘述。
在一种实施方式中,基于实例1中的固定长度的分组编码方式或半定长分组编码方式,对于每组参数group_param进行编码和解码,可以使用以下任一种编码方式,或者几种编码方式进行结合。
1、一元码:是一种简单的二值化方法。具体的,对于非负整数N,其一元码表示为N个1加1个0。
2、截断一元码:是一元码的变体。具体的,在已知待编码符号的最大值为N_max的情况下,假设当前待编码符号为非负整数N,若N<N_max,则截断一元码即为一元码;若N=N_max,则截断一元码为N个1。
3、截断二元码:计算val的相关变量(stage,num0,num1以及thd等),对于0~(thd-1),其二元符号串长度为stage的定长码,对于thd~val,其二元符号串长度为(stage+1)的定长码。
4、定长编码:使用固定码长对待编码系数进行编码,例如使用8位二进制数进行编码的ASCII码。
5、k阶指数哥伦布编码:k阶指数哥伦布编码包括前缀prefix和后缀suffix两部分,编码方法包括以下步骤:
1)将数字X以二进制形式写出,去掉最低的k个比特,之后加1,求得T;2)计算T的比特数,前面需要补T-1个零;3)将去掉的最低k个比特位补回比特串尾部。
6、截断莱斯编码:截断莱斯码编码包括前缀prefix和后缀suffix两部分,已知最大上限值cMax,莱斯参数cRice,对待编码符号cVal进行编码。
具体编码过程包括:(1)计算prefix:prefix=cVal>>cRice,对prefix以cMax>>cRice为上限制使用截断一元码二值化。(2)计算suffix:如果cVal<cMax:suffix=cVal-prefix<<cRice。如果cVal>=cMax:无后缀suffix。suffix按定长码计算,位数为cRice。根据计算过程可以看出,当cRice=0时,截断莱斯编码等同于截断一元码。其中,符号>>表示为右移运算,<<表示为左移运算。
7、霍夫曼编码:统计所有系数出现的频率,构建霍夫曼树,为概率较大的系数分配较短码字,为概率较小的系数分配较长码字。
8、哥伦布-莱斯编码:Golomb-Rice是Golomb编码的一个变种,相比Golomb编码区别是,参数m的限制条件为,m必须是2的次幂。具体的,初始化参数m,m必须为2的次幂;计算q和r,其中,q=N/m;r=N&(m-1);使用一元编码编码q,取r的二进制位的低log2(m)位作为r的码字。
此外,还可以使用定长编码与截断一元码相结合,从而得到以下几种组合解码方案:
方案1:使用类似截断一元码的方案,对大于(N-1)>>1的前缀使用以1开始以0结尾的截断一元码,对于小于(N-1)>>1的前缀,使用以0开始,以1结尾的截断一元码。
方案2:对大于(N-1)>>1的前缀使用以1开始以0结尾的截断一元码,对于小于(N-1)>>1的前缀,使用以0开始的定长码表示。
方案3:对大于(N-1)>>1的前缀使用以1开始的定长码表示,对于小于(N-1)>>1的前缀,使用以0开始,以1结尾的截断一元码表示。
方案4:使用类似截断一元码的方案,对大于(N-1)>>1的前缀使用以0开始以1结尾的截断一元码,对于小于(N-1)>>1的前缀,使用以1开始,以0结尾的截断一元码。
方案5:对大于(N-1)>>1的前缀使用以0开始以1结尾的截断一元码,对于小于(N-1)>>1的前缀,使用以1开始的定长码表示。
方案6:对大于(N-1)>>1的前缀使用以0开始的定长码表示,对于小于(N-1)>>1的前缀,使用以1开始,以0结尾的截断一元码表示。
另外,在一种实施方式中,编码端还可以基于以上几种编码方式对分组方式进行编码。也就是说,基于实施例1中的多种半定长分组方式,编码端和解码端可以配置有n种分组方法,然后编码端可以根据配置使用其中一种编码方式对待编码单元进行编码,从而解码端可以基于码流导出待解码单元所使用的分组方式,进一步基于分组方式进行解码。
在一种实施方式中,基于上述实施例1中的半定长分组解码可以结合上下文模型导出预测值,并进一步解码。具体的,对于待解码单元中每组的组参数group_param,可以先由上下文导出预测值group_param_pred,再使用前述实施方式中的解码方式,解出真实group_param与预测的group_param_pred的差值group_delta,根据group_param=group_param_pred+group_delta,得到待解码单元中每一组的组参数group_param。然后再根据组参数以及解码算法解码得到每一组的所有系数。
在一种实施方式中,编码端对于半定长编码的系数需要进行定长编码的情况下,对于较大的系数,编码端可以直接用定长编码对原始像素值进行编码,或者,直接用定长编码对重建像素值进行编码。
示例性的,若原始像素值的位宽为8,当系数组的编码位宽group_param>=6,或者,系数组的编码位宽group_param>=7,则可以直接用定长码为8编码原始像素值,或编码重建像素值,从而可以提高编解码的性能。
在一种实施方式中,解码端确定待解码单元的分组方式还可以是根据待解码单元内不同像素的预测方向、预测模式、或变换模式等,导出当前待解码单元中系数的分组方式。
具体的,解码端可以根据预测模式导出待解码单元中系数的分组方式及编码方式。
示例性的,当前第一列使用一个预测模式,后面所有列是水平预测模式。第一个点可以直接传递原始值,或由上一个块重建值预测。如图5所示,以16×4的待解码单元为例,若经当前预测方案的残差由预测后如下图5所示,第一列的所有残差值作为1组。剩余系数块15×4中每一行残差值作为1组,第一个组内系数个数较少,不再继续分组,其余在每个组内允许更小的分组。
因此,整个块的扫描顺序是,先垂直扫描,得到第一组系数,对其进行编码;再水平扫描得到第二组系数,第二组系数可以从左到右划分为更小的小组,每个小组内可以使用不同的编码方案。第二组内第一个小组使用半定长编码,根据第一小组内使用的前缀值的大小,若前缀小于某一个阈值,则使用哥伦布-莱斯编码后一个小组的系数,若前缀大于某一个阈值,则使用k阶哥伦布编码后一个小组的系数,k值由前一个小组的残差值导出。
另外,解码端可以根据变换模式导出待解码单元中系数的分组方式及编码方式。
示例性的,编码端可以根据DC系数的具体位置,对变换系数进行编码。可以将所有DC系数分为一组,将所有AC系数分为一组。当DC系数个数较多时,可以将DC系数组内部再二次分组;当AC系数个数较多时,可以将AC系数组内部再二次分组。
具体的,由于DC系数值在大多数情况下,系数比较大,因此可以对DC系数使用较灵活的编码方案,例如使用分组较细的k阶指数哥伦布编码。当DC系数幅值值较相近的时候,对DC系数进行系数预测,使用k阶指数哥伦布先编码第一个DC系数,剩余DC系数只需要编码DC系数符号,以及与第一个DC系数的差值即可。其中,DC系数差值的编码可以使用半定长编码。
具体的,AC系数一般情况下系数值较小,因此可以整个AC系数作为一组,使用半定长编码;或者,可以将AC系数分成2组(例如,右上角+左下角为一组,右下角为一组),每组使用半定长编码。但当AC系数幅值较大的时候,可以将右上角、左下角的AC系数进行以2-3个系数为一组,使用哥伦布-莱斯编码,对右下角使用半定长编码。
其中,对待编码单元的扫描顺序可以为,先将整个大块分为DC系数与AC系数。如图6所示,以16×4的待编码单元为例,变换后系数分布可能如图6所示。在DC系数内,若以整个DC系数为一组编码,那么对DC系数使用光栅扫描,否则,使用希尔伯特扫描,将距离较近的系数放在一起编码。在AC系数中,若所有AC系数作为一组,则对AC系数直接使用光栅扫描,否则,首先按照右上角,左下角,右下角的顺序进行扫描,对三个角内部的系数,使用光栅扫描顺序进行扫描。
在另一个实施例中,以16×4的待编码单元为例,变换后系数分布可能如图7所示。将系数划分为2个块,在每个块内做变换。如图7所示,若只有两个DC系数,存在以下分组:
1、直接将两个DC系数作为一组,所有AC系数分为1组;扫描顺序为对每个8×4内使用光栅扫描。
2、直接将两个DC系数作为一组,所有AC系数分为2组,每个8×4为一组(除去DC系数);扫描顺序为对每个8×4内使用光栅扫描。
3、直接将两个DC系数作为一组,所有AC系数分为4组,每个4×4为一组(除去DC系数)在每个4×4内使用光栅扫描。
4、直接将两个DC系数作为一组,所有AC系数分为8组(8×4内,每两列为一组)使用垂直扫描。
基于上述任一种分组方式,在一个例子中,编码端可以对DC系数使用k阶指数哥伦布编码,对AC系数,使用半定长编码。
实施例2:
步骤1、解码端确定待解码单元的扫描方式。
步骤2、解码端根据编解码端预先配置的n种固定分组方式,解码端根据码流解析出待解码单元的分组方式。
步骤3、解码端使用定长码解码每个组的莱斯参数CRice,然后,使用哥伦布-莱斯解码组内每个系数值。
步骤4、解码端根据待解码单元的扫描方式,将该系数块内系数进行恢复得到原始数据块。
实施例3:
步骤1、解码端确定待解码单元的扫描方式。
步骤2、解码端根据编解码端预先配置的n种固定分组方式,解码端根据码流解析出待解码单元的分组方式。
步骤3、解码端根据上下文估计每个组的莱斯参数CRice,然后,使用哥伦布-莱斯解码组内每个系数值。
步骤4、解码端根据待解码单元的扫描方式,将该系数块内系数进行恢复得到原始数据块。
实施例4:
步骤1、解码端确定待解码单元的扫描方式。
步骤2、解码端根据编解码端预先配置的n种固定分组方式,解码端根据码流解析出待解码单元的分组方式。
步骤3、解码端根据上下文估计每个组的莱斯参数CRice,再使用定长码解码每个组的参数偏差C,将原CRice+C更新为莱斯参数CRice,即CRice+=C。然后,使用哥伦布-莱斯解码组内每个系数值。
步骤4、解码端根据待解码单元的扫描方式,将该系数块内系数进行恢复得到原始数据块。
实施例5:
步骤1、解码端确定待解码单元的扫描方式。
步骤2、解码端根据编解码端预先配置的n种固定分组方式,解码端根据码流解析出待解码单元的分组方式。
步骤3、解码端确定每个组的莱斯参数CRice,然后,使用哥伦布-莱斯编码解码组内每个系数值。
其中,解码端可以基于码流导出莱斯参数CRice,其具体的解码方法可以为前述实施例1中的任一种,如一元码、截断一元码、截断二元码、定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码、哥伦布-莱斯编码等。解码端对系数的分组方式可以根据系数值的大小,使用定长码解码与截断一元码结合,此处不再赘述。
步骤4、解码端根据待解码单元的扫描方式,将该系数块内系数进行恢复得到原始数据块。
实施例6:
步骤1、解码端确定待解码单元的扫描方式。
步骤2、解码端根据编解码端预先配置的n种固定分组方式,解码端根据码流解析出待解码单元的分组方式。
步骤3、解码端根据上下文估计每个组的莱斯参数CRice,再使用定长码解码每个组的参数偏差C,莱斯参数CRice+=C,使用哥伦布-莱斯编码解码组内每个系数值。
其中参数偏差C的解码方案可以为前述实施例1中的任一种,如一元码、截断一元码、截断二元码、定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码、哥伦布-莱斯编码等。解码端对系数的分组方式可以根据系数值的大小,使用定长码解码与截断一元码结合,此处不再赘述。
步骤4、解码端根据待解码单元的扫描方式,将该系数块内系数进行恢复得到原始数据块。
实施例7:
步骤1、解码端确定待解码单元的扫描方式。
步骤2、解码端根据编解码端预先配置的n种固定分组方式,解码端根据码流解析出待解码单元的分组方式。
步骤3、解码端使用定长码解码每个组的阶数k,然后,使用k阶指数哥伦布解码组内每个系数值。
步骤4、解码端根据待解码单元的扫描方式,将该系数块内系数进行恢复得到原始数据块。
实施例8:
步骤1、解码端确定待解码单元的扫描方式。
步骤2、解码端根据编解码端预先配置的n种固定分组方式,解码端根据码流解析出待解码单元的分组方式。
步骤3、解码端上下文估计每个组的阶数k,然后,使用k阶指数哥伦布解码组内每个系数值。
步骤4、解码端根据待解码单元的扫描方式,将该系数块内系数进行恢复得到原始数据块。
实施例9:
步骤1、解码端确定待解码单元的扫描方式。
步骤2、解码端根据编解码端预先配置的n种固定分组方式,解码端根据码流解析出待解码单元的分组方式。
步骤3、解码端上下文估计每个组的阶数k,再使用定长码解码每个组的参数偏差C,将原阶数k+C更新为阶数k,即k+=C。然后,使用k阶指数哥伦布解码组内每个系数值。
步骤4、解码端根据待解码单元的扫描方式,将该系数块内系数进行恢复得到原始数据块。
实施例10:
步骤1、解码端确定待解码单元的扫描方式。
步骤2、解码端根据编解码端预先配置的n种固定分组方式,解码端根据码流解析出待解码单元的分组方式。
步骤3、解码端确定每个组的阶数k,然后,使用k阶指数哥伦布解码组内每个系数值。
其中,解码端可以基于码流导出阶数k,其具体的解码方法可以为前述实施例1中的任一种,如一元码、截断一元码、截断二元码、定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码、哥伦布-莱斯编码等。解码端对系数的分组方式可以根据系数值的大小,使用定长码解码与截断一元码结合,此处不再赘述。
步骤4、解码端根据待解码单元的扫描方式,将该系数块内系数进行恢复得到原始数据块。
实施例11:
步骤1:解码端利用周围重建像素值计算某一方向的像素梯度,可以根据当前像素的预测方向计算一个梯度值,或者根据经验,计算水平方向的梯度值或者垂直方向的梯度值,并对梯度进行量化。
步骤2:解码端根据上下文估计当前系数的取值范围,根据取值范围估计哥伦布-莱斯的莱斯系数k值,或指数哥伦布的阶数k值。
实施例12:
步骤1:编码端根据上下文估计当前系数的取值范围,根据取值范围选择一种编码方式。
步骤2:编码端用相应的哥伦布编码方法对当前系数进行编码。
示例性的,当估计的系数绝对值取值范围是大于或等于25时,估计哥伦布-莱斯编码的k值,然后对当前系数用哥伦布-莱斯编码进行编码。当估计的系数绝对值取值范围是小于25时,估计指数哥伦布的k值,然后对当前系数用指数哥伦布编码进行编码。
或者,在一个例子中,当估计的系数绝对值取值范围是大于25时,估计指数哥伦布编码的k值,然后对当前系数用指数哥伦布编码进行编码。当估计的系数绝对值取值范围是小于或者等于25时,估计哥伦布-莱斯的k值,然后对当前系数用哥伦布-莱斯编码进行编码。
进一步的,系数的取值范围也可以根据经验值取其他正整数值,本申请实施例对此不做具体限定。
实施例13:
步骤1:编码端根据上下文估计当前编码系数的值。
示例性的,若真实值大于当前估计值,则编码1;否则编码0。其中,编码值0和1分别对应一种编码方式。
步骤2:编码端用相应的哥伦布编码方法对当前系数进行编码。
示例性的,1对应指数哥伦布编码,0对应哥伦布-莱斯编码。当得到编码值为1时,根据上下文估计指数哥伦布编码的k值,然后对当前系数用指数哥伦布编码进行编码。当得到编码值为0时,估计哥伦布-莱斯的k值,然后对当前系数用哥伦布-莱斯编码进行编码。
或者,在一个例子中,当得到编码值为0,根据上下文估计哥伦布-莱斯编码的k值;否则估计指数哥伦布的k值,然后用相应的哥伦布编码方法对当前系数进行编码。
实施例14:
步骤1:编码端编码系数时,根据上下文导出当前编码系数的一个估计值n,从码流中读出,当前编码系数是否小于n。
步骤2:编码端对于小于n的参数,使用定长码编码;对于大于n的系数,估计一个k值,使用指数哥伦布或者哥伦布莱斯进行解码,将解码后的值加上n。
实施例15:
步骤1:编码端对残差系数分组编码时,根据上下文导出一个估计值n,根据估计值n将待编码系数的参数分为两组。
步骤2:对于小于n的参数,编码端使用定长码解码;对于大于n的系数,估计一个k值,使用指数哥伦布或者哥伦布莱斯进行解码,将解码后的值加上n。
或者对于小于n的参数,估计一个k,使用指数哥伦布解码;对于大于n的系数,估计一个k值,使用哥伦布莱斯进行解码,将解码后的值加上n。
或者对于小于n的参数,估计一个k,使用哥伦布莱斯解码;对于大于n的系数,估计一个k值,使用指数哥伦布进行解码,将解码后的值加上n。
实施例16:
步骤1:编码端对残差系数进行分组编码时,根据上下文导出一个估计值n,根据码流中使用截断一元码读出一个纠正值delta,根据delta更新n的值为:n+=delta。根据n的值,将待解码单元中系数的参数分为两组。
步骤2:对于小于n的参数,使用定长码解码;对于大于n的系数,估计一个k值,使用指数哥伦布或者哥伦布莱斯进行解码,将解码后的值加上n。
或者对于小于n的参数,估计一个k,使用指数哥伦布解码;对于大于n的系数,估计一个k值,使用哥伦布莱斯进行解码,将解码后的值加上n。
或者对于小于n的参数,估计一个k,使用哥伦布莱斯解码;对于大于n的系数,估计一个k值,使用指数哥伦布进行解码,将解码后的值加上n。
实施例17:
步骤1:编码端根据上下文信息,从码流中解析是否打开游程编码模式。
具体的,基于编码系数、或重建数据中若存在连续多个相等的值,则打开游程编码模式;否则关闭游程编码模式,直接使用前述任一种的编码方案。
示例性的,上下文信息可以包括如下描述中的一种:
a)根据已解码的重建像素值的各个方向上的梯度或梯度之和的大小;
b)根据相邻预测像素值的各个方向上的梯度或梯度之和的大小;
c)根据已解码的系数在各个方向上的梯度或梯度之和的大小;
d)结合a、b或c中2个梯度之和的大小加权;
e)结合a、b、或c中3个梯度之和的大小加权。
实施例18:
由于半定长编码的码长与分组方式以及组内系数的个数有关,编码端根据不同的预测方案或不同的图像内容进行编码的压缩率或编码性能都会有较大差异。因此,需要预先约定一个较好的分组方法:如固定大小的分组方式。
对于多种固定块划分进行解码时,可以首先解码当前编码单元的块划分方法,然后按照固定划分方法进行解码。下面将结合附图以及具体的实施例进行说明。
示例性的,可以将待编码单元分成多个2×2小块作为一个编码组,以16×4的待编码单元为例,组内共享一个CL。使用半定长编码,第一个CL值使用定长编码,码长为3或4(与图像位宽N相关)。第二个CL值为基于上下文预测得到的CL的差值,使用截断一元码编码。截断一元码最长为N-1。
如图8所示,将16×4的待编码单元按照固定划分为2×2小块的分组方式,分组为如图8中(1)中所示的16个小块。每个2×2小块之间,可以按照希尔伯特扫描方式进行扫描,示例性的,编码端对待编码单元扫描顺序可以为如图8中(2)所示的,按照编号顺序0~15进行扫描。
其中,每个CL内部可以进行光栅扫描,即每个2×2小块内部的扫描顺序可以为如图8中(3)所示的,按照编号顺序0~3进行扫描。
CL之间可以使用上下文预测,CL0使用定长码直接编码,CL1=(CL1-CL0),使用截断一元码编码,CLn=(CLn-(CLn-2+CLn-1*3>>2)),使用截断一元码编码。
检测CLn-2与CLn-1的重建值,若CLn-2与CLn-1内部所有重建值相等或几乎相等,则判断当前2×2小块是否直接复用前面CLn-2与CLn-1内部的重建值。在一个例子中,也可以直接使用游程编码,编码当前编码块内部,直接使用已编码重建值的2×2小块的个数。编码这个个数可以使用定长码,根据当前编码单元内未编码的CL个数,确定定长码码长,最多15个未编码单元,所以定长码长最大为4比特(bit)。
在另一种实施方式中,如图9所示,可以将待编码单元分成多个4×1的小块。以16×4的待编码单元为例,可以将16×4的待编码单元按照固定划分为4×1小块的分组方式,分组为如图9中所示的16个小块。
其中,图像数据的多个分量(亮度值或色度值)的编码方法可以一致,也可以不一致。
在一个例子中,编码端对待编码单元的固定块划分方式还可以是:2×1、1×2、1×4、2×4、4×2、2×8、2×16、4×4、8×4或16×4等等。本申请对划分方式不做具体限定。
示例性的,以2×2固定块划分解码为例,解码端的解码过程主要包括以下步骤。
1)若当前块为第一个块,使用定长码解码第0个块的CL值,根据CL值,使用定长码解出4个系数值,将4个残差值的位置按照光栅扫描顺序存放于第一个2×2小块中。
2)若当前块并非第一个块,根据前几个块的重建值是否相等,或CL值(前1或2个cl是否为0),若为前2个CL值为0,解析一个flag,即当前块是否直接使用前一个系数值或者重建值。若是,不再解析当前块;若否,计入第3步继续解码。
3)若当前块并非第一个块,使用截断一元码解码出当前块的CL值与前一个块CL值的残差值,得到当前值的CL,使用定长码解出块内四个系数值。根据希尔比特扫描顺序,将每个2×2小块按照顺序存放。
需要说明的是,16×4的待编码单元一共需要解析16个2×2小块。若当前组的CL值大于等于图像位宽时,当前组直接编码原始值,或重建值。
实施例19:
对于非固定大小的块划分方式进行解码的情况,下面将结合具体的实施例进行说明。
步骤1、导出前块的预测方案,得到当前块中每个像素的预测模式,根据预测模式进行分组。
步骤2、若当前块在预测时,对像素进行分组,则按照预测分组方案对当前块进行分组。否则,若当前块在做预测时,直接逐点预测,可以按照每个点的预测方向对其进行分组。
步骤3、根据预测顺序,对每个组内系数进行解码,若预测顺序为从左上到右下,那么对分组后的系数按照相同顺序解码,若预测顺序为从左到右,也对分组后的系数按照相同顺序解码。
步骤4、导出每个组是否使用变换编码。
步骤5、若当前组使用了变换编码,若当前组为第一个组,根据经验值,或前一个编码块导出阶数k,对DC系数使用k阶哥伦布解码;若当前组不是第一个组,则根据前一个组的DC系数值,估计当前组的DC系参数k,使用k阶哥伦布解码。
1)对于其余系数,若DC系数值大于阈值,则从码流中解析当前组的后1/2系数(即高频部分系数)是否全为0。若是,则判断当前组系数除了DC系数,以及为0系数外剩余系数个数,作为需要编码的系数个数。
2)若系数个数小于3,则对于其余系数使用哥伦布-莱斯编码,第一个编码的系数根据量化步长,以及DC系数值,导出莱斯系数C,使用哥伦布-莱斯解码,其后系数根据前一个系数值的大小导出莱斯系数C,使用哥伦布-莱斯解码。否则,系数个数大于3,则使用半定长编码;若前组的后1/2系数(即高频部分系数)存在非零,按照2)处理。
3)从码流中解析当前组的后1/4系数(即高频部分系数)是否全为0,若全为0,则除了DC系数以及后1/4的系数以外,其余系数按照2)处理,否则,出DC系数外全部系数按照2)处理。若DC系数值小于阈值,按照3)处理。
步骤6、若当前组内未使用变换编码,则对于组内系数,导出当前组内系数的量化步长,根据量化步长,以及前一组时域上的系数值进行解码。
1)首先估计当前组内系数的绝对值的均值;
2)然后,解码当前组内所有系数绝对值与估计的均值比较结果,根据比较结果进行二次分组,大于均值为一组,小于等于均值为另一组;
3)二次分组后,根据组内系数的个数,若小于均值的那一组的系数个数大于等于4,则使用半定长解码,否则对于小于均值那组使用哥伦布莱斯解码;
对于大于均值那一组系数,若系数个数大于4,且估计的均值小于阈值,则使用半定长解码,否则,使用k阶指数哥伦布解码。其中k值和C值,可以基于估计的均值进行估计,也可以基于估计的均值以及解码端解析一个参数得到。
实施例20:
步骤1、解码端确定分组方式后,确定当前组内系数的个数x是否大于一个阈值m。例如m=30,x=32,则确定当前组内系数的个数x大于该阈值m。
步骤2、解码端从码流中解析最多n个位置,这个n个位置表示n个异常值(组内幅值较大的系数)点在当前组内的位置(例如n=2),位置编码使用定长码解码,码长与x值的大小有关(若x=32,码长为5)。
步骤3、解码端解码当前组其他位置系数值。
其中,解码当前组其他位置的系数值的方法可以是前述的半定长解码、指数哥伦布解码、哥伦布-莱斯解码或者霍夫曼解码等。
步骤4、解码端使用k阶指数哥伦布解码解码异常值,解码后的幅值加上其余位置系数值中的最大幅值,作为该异常点的幅值。
实施例21:
步骤1、解码端确定分组方式后,确定当前组内系数的个数x是否大于一个阈值m。例如m=30,x=32,则确定当前组内系数的个数x大于该阈值m。
步骤2、解码端使用定长码解码当前组内的最大幅值,根据最大幅值的取值,使用定长码解码当前组内的最小幅值。根据最大幅值和最小幅值的取值范围,对当前组内所有系数进行解码。
具体的,若最大幅值等于最小幅值,则整个组的系数无需解码;
若最大幅值与最小幅值之间的差值为1,则整个组每个系数只需要1比特定长码进行解码;
若最大幅值与最小幅值之间的差值小于n(例如n=15),则当前组内其余位置的系数可以使用定长码进行解码。例如,n=15时可以使用4比特定长码进行解码。
若最大幅值与最小幅值之间的差值大于n,则根据差值选择合适的阶数k,使用k阶指数哥伦布解码当前组内系数。
需要说明的是,上述的本申请实施例中的各个实施例之间可以相互结合,例如,实施例1中多种不同的分组方式可以应用于其他实施例中,实施例2中的不同编解码算法也可以应用于其他实施例中,并且多种不同的编解码算法时间可以根据需要结合使用。
基于上述实施方式,本申请还提供一种视频编码装置,以及对应的一种视频解码装置,本申请中统称为视频编解码装置。结合前述的图1至图3,如图10所示,该装置1000可以包括收发模块1001和处理模块1002。
其中,收发模块1001可以用于获取待解码单元的码流。
处理模块1002可以用于确定所述待解码单元的扫描方式、分组方式以及每个组对应的编码方式;根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块;根据所述待解码单元的所述扫描方式,逐个将每个组所述系数块内系数进行恢复得到所述待解码单元对应的重建数据块。
在一种实施方式中,分组方式包括:固定长度的分组方式,或者,基于系数值大小进行分组划分的半定长分组,或者,基于系数排列位置进行分组划分中的至少一种。
在一种实施方式中,编码方式:一元码、截断一元码、截断二元码、定长编码、半定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码、哥伦布-莱斯编码中的至少一种。
在一种实施方式中,扫描方式包括:光栅扫描、块扫描、水平扫描、垂直扫描、往返扫描、对角扫描、逆水平扫描、逆垂直扫描或者希尔伯特扫描中的至少一种。
在一种实施方式中,重建数据块为待解码图像的原始像素值、对所述原始像素值进行预测得到的残差值、对所述残差值经量化后的系数,或者,对所述残差值经变换后得到的变换系数中的一种组成的数据块。
在一种实施方式中,处理模块1002具体可以用于:根据编码端以及解码端的预先约定或者上下文信息,确定所述待解码单元的扫描方式、分组方式以及每一组对应的编码方式中的至少一个;或者,根据所述码流解析得到所述待解码单元的扫描方式、分组方式以及每个组对应的编码方式中的至少一个;或者,根据所述待解码单元的预测方式、量化方式和/或变换方式得到所述分组方式。
在一种实施方式中,处理模块1002具体可以用于:根据编码算法解码得到每个组的组参数;根据每个组的所述组参数,根据所述半定长编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,处理模块1002具体可以用于:根据以下至少一种编码方式对应的解码方式进行解码得到每个组的组参数:一元码、截断一元码、截断二元码、定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码或哥伦布-莱斯编码。
在一种实施方式中,处理模块1002具体可以用于:根据定长编码算法解码得到每个组的组莱斯参数,或者,根据上下文模型得到每个组的组莱斯参数;根据每个组的所述组莱斯参数,根据哥伦布-莱斯编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,处理模块1002具体可以用于:根据上下文模型得到每个组的组莱斯参数;根据定长编码算法或者截断一元码解码得到每个组的组参数偏差;根据每个组的所述组莱斯参数和所述组参数偏差得到每个组的组参数;根据每个组的所述组参数,根据哥伦布-莱斯编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,处理模块1002具体可以用于:根据定长编码算法解码得到每个组的阶数k,或者,根据上下文模型得到每个组的阶数k;根据每个组的所述阶数k,根据k阶指数哥伦布编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,处理模块1002具体可以用于:根据上下文模型得到每个组的阶数k;根据定长编码算法或者截断一元码解码得到每个组的组参数偏差;根据所述组参数偏差更新每个组的阶数k;根据每个组更新后的所述阶数k,根据k阶指数哥伦布编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
在一种实施方式中,处理模块1002具体可以用于:根据已经解码得到的一个或多个组的系数、预测方式、量化方式或者变换方式中的至少一个,确定当前组的编码方式;根据所述当前组的编码方式对应的解码方式进行解码得到所述当前组的系数,其中,所述当前组的编码方式是哥伦布-莱斯编码、k阶指数哥伦布编码或者半定长编码方式中的几种编码方式的组合。
在一种实施方式中,编码单元的多个分组中,至少两个分组的编码方式不同。
在一种实施方式中,若所述待解码单元的解码方式为哥伦布-莱斯编码或者k阶指数哥伦布编码中的任一项,则处理模块1002具体可以用于:根据所述待解码单元的预测方式、量化方式和/或变换方式得到所述待解码单元的分组方式。
相对应的,本申请提供一种视频编码装置,如图10所示,该装置1000包括收发模块1001和处理模块1002.
其中,处理模块1002用于将原始图像中的待编码数据块根据第一扫描方式进行扫描得到系数序列;将所述系数序列按照第一分组方式进行分组,得到多组待编码子序列;确定每组待编码子序列对应的系数编码方式,并逐个进行编码得到已编码码流。
收发模块1001用于将已编码码流发送至解码端。
在一种实施方式中,分组方式包括:固定长度的分组方式,或者,基于系数值大小进行分组划分的半定长分组,或者,基于系数排列位置进行分组划分中的至少一种。
在一种实施方式中,编码方式:一元码、截断一元码、截断二元码、定长编码、半定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码、哥伦布-莱斯编码中的至少一种。
在一种实施方式中,扫描方式包括:光栅扫描、块扫描、水平扫描、垂直扫描、往返扫描、对角扫描、逆水平扫描、逆垂直扫描或者希尔伯特扫描中的至少一种。
在一种实施方式中,待编码数据块为待编码图像的原始像素值、对所述原始像素值进行预测得到的残差值、对所述残差值经量化后的系数,或者,对所述残差值经变换后得到的变换系数中的一种组成的数据块。
具体的,本申请提供的视频编解码装置可以由前述图2和图3所示的编码器和解码器来实现,组成如图1所示的编解码系统。其装置内部的结构示意图请参照图1至图3所示,此处不再赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机指令时,全部或部分地产生按照本申请实施例中的流程或功能。该计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,该计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))方式或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包括一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如,软盘、磁盘、磁带)、光介质(例如,数字视频光盘(digital video disc,DVD))、或者半导体介质(例如固态硬盘(solid state drives,SSD))等。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:快闪存储器、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (22)
1.一种视频编解码方法,其特征在于,所述方法包括:
获取待解码单元的码流;
确定所述待解码单元的扫描方式、分组方式以及每个组对应的编码方式;
根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块;
根据所述待解码单元的所述扫描方式,逐个将每个组所述系数块内系数进行恢复得到所述待解码单元对应的重建数据块。
2.根据权利要求1所述的方法,其特征在于,所述分组方式包括:固定长度的分组方式,或者,基于系数值大小进行分组划分的半定长分组,或者,基于系数排列位置进行分组划分中的至少一种。
3.根据权利要求1或2所述的方法,其特征在于,所述编码方式:一元码、截断一元码、截断二元码、定长编码、半定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码、哥伦布-莱斯编码中的至少一种。
4.根据权利要求1或2所述的方法,其特征在于,所述扫描方式包括:光栅扫描、块扫描、水平扫描、垂直扫描、往返扫描、对角扫描、逆水平扫描、逆垂直扫描或者希尔伯特扫描中的至少一种。
5.根据权利要求1或2所述的方法,其特征在于,所述重建数据块为待解码图像的原始像素值、对所述原始像素值进行预测得到的残差值、对所述残差值经量化后的系数,或者,对所述残差值经变换后得到的变换系数中的一种组成的数据块。
6.根据权利要求1或2所述的方法,其特征在于,所述确定所述待解码单元的扫描方式、分组方式以及每个组对应的编码方式,具体包括:
根据编码端以及解码端的预先约定或者上下文信息,确定所述待解码单元的扫描方式、分组方式以及每一组对应的编码方式中的至少一个;
或者,根据所述码流解析得到所述待解码单元的扫描方式、分组方式以及每个组对应的编码方式中的至少一个;
或者,根据所述待解码单元的预测方式、量化方式和/或变换方式得到所述分组方式。
7.根据权利要求1或2所述的方法,其特征在于,所述根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块,具体包括:
根据编码算法解码得到每个组的组参数;
根据每个组的所述组参数,根据所述半定长编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
8.根据权利要求7所述的方法,其特征在于,所述根据编码算法解码得到每个组的组参数,具体包括:
根据以下至少一种编码方式对应的解码方式进行解码得到每个组的组参数:一元码、截断一元码、截断二元码、定长编码、k阶指数哥伦布编码、截断莱斯编码、霍夫曼编码或哥伦布-莱斯编码。
9.根据权利要求1或2所述的方法,其特征在于,所述根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块,具体包括:
根据定长编码算法解码得到每个组的组莱斯参数,或者,根据上下文模型得到每个组的组莱斯参数;
根据每个组的所述组莱斯参数,根据哥伦布-莱斯编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
10.根据权利要求1或2所述的方法,其特征在于,所述根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块,具体包括:
根据上下文模型得到每个组的组莱斯参数;
根据定长编码算法或者截断一元码解码得到每个组的组参数偏差;
根据每个组的所述组莱斯参数和所述组参数偏差得到每个组的组参数;
根据每个组的所述组参数,根据哥伦布-莱斯编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
11.根据权利要求1或2所述的方法,其特征在于,所述根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块,具体包括:
根据定长编码算法解码得到每个组的阶数k,或者,根据上下文模型得到每个组的阶数k;
根据每个组的所述阶数k,根据k阶指数哥伦布编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
12.根据权利要求1或2所述的方法,其特征在于,所述根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块,具体包括:
根据上下文模型得到每个组的阶数k;
根据定长编码算法或者截断一元码解码得到每个组的组参数偏差;
根据所述组参数偏差更新每个组的阶数k;
根据每个组更新后的所述阶数k,根据k阶指数哥伦布编码算法解码得到每个组中的多个系数值,所述待解码单元对应的系数块包括所述每个组中的多个系数值。
13.根据权利要求1或2所述的方法,其特征在于,所述根据每个组的编码方式进行解码,得到所述待解码单元对应的系数块,具体包括:
根据已经解码得到的一个或多个组的系数、预测方式、量化方式或者变换方式中的至少一个,确定当前组的编码方式;
根据所述当前组的编码方式对应的解码方式进行解码得到所述当前组的系数,其中,所述当前组的编码方式是哥伦布-莱斯编码、k阶指数哥伦布编码或者半定长编码方式中的几种编码方式的组合。
14.根据权利要求1或2所述的方法,其特征在于,所述编码单元的多个分组中,至少两个分组的编码方式不同。
15.根据权利要求1或2所述的方法,其特征在于,若所述待解码单元的解码方式为哥伦布-莱斯编码或者k阶指数哥伦布编码中的任一项,则所述确定所述待解码单元的分组方式,具体包括:
根据所述待解码单元的预测方式、量化方式和/或变换方式得到所述待解码单元的分组方式。
16.一种视频编解码方法,其特征在于,所述方法包括:
将原始图像中的待编码数据块根据第一扫描方式进行扫描得到系数序列;
将所述系数序列按照第一分组方式进行分组,得到多组待编码子序列;
确定每组待编码子序列对应的系数编码方式,并逐个进行编码得到已编码码流。
17.一种视频解码装置,其特征在于,所述装置用于执行如权利要求1至15中任一项所述的方法。
18.一种视频编码装置,其特征在于,所述装置用于执行如权利要求16所述的方法。
19.一种编解码系统,其特征在于,所述编解码系统包括如权利要求17所述的装置和权利要求18所述的装置。
20.一种视频编解码装置,其特征在于,所述装置包括处理器,所述处理器与存储器耦合;
存储器,用于存储计算机程序或指令;
处理器,用于执行所述存储器中存储的计算机程序或指令,以使得所述装置执行如权利要求1至15中任一项所述的方法,或者,执行如权利要求16所述的方法。
21.一种电子设备,其特征在于,所述电子设备用于执行如权利要求1至15中任一项所述的方法,或者,执行如权利要求16所述的方法。
22.一种可读存储介质,包括程序或指令,当所述程序或指令被处理器运行时,如权利要求1至15中任意一项所述的方法被执行,或者,如权利要求16所述的方法被执行。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111333832.1A CN116074499A (zh) | 2021-11-11 | 2021-11-11 | 一种视频编解码方法及装置 |
CN202310492992.3A CN116647673A (zh) | 2021-11-11 | 2021-11-11 | 一种视频编解码方法及装置 |
PCT/CN2022/130954 WO2023083225A1 (zh) | 2021-11-11 | 2022-11-09 | 视频编解码方法及装置 |
TW111143289A TW202327362A (zh) | 2021-11-11 | 2022-11-11 | 視頻編解碼方法及裝置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111333832.1A CN116074499A (zh) | 2021-11-11 | 2021-11-11 | 一种视频编解码方法及装置 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310492992.3A Division CN116647673A (zh) | 2021-11-11 | 2021-11-11 | 一种视频编解码方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116074499A true CN116074499A (zh) | 2023-05-05 |
Family
ID=86173721
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111333832.1A Pending CN116074499A (zh) | 2021-11-11 | 2021-11-11 | 一种视频编解码方法及装置 |
CN202310492992.3A Pending CN116647673A (zh) | 2021-11-11 | 2021-11-11 | 一种视频编解码方法及装置 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310492992.3A Pending CN116647673A (zh) | 2021-11-11 | 2021-11-11 | 一种视频编解码方法及装置 |
Country Status (3)
Country | Link |
---|---|
CN (2) | CN116074499A (zh) |
TW (1) | TW202327362A (zh) |
WO (1) | WO2023083225A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117354534B (zh) * | 2023-12-04 | 2024-02-02 | 上海方诚光电科技有限公司 | 一种自适应图像无损压缩方法、设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104272736B (zh) * | 2013-01-16 | 2018-04-17 | 黑莓有限公司 | 用于对视频进行编码/解码的方法和设备及其处理器可读介质 |
CN105812803B (zh) * | 2014-12-31 | 2018-09-28 | 浙江大华技术股份有限公司 | 一种针对变换单元tu的残差舍弃方法及装置 |
WO2018097691A2 (ko) * | 2016-11-28 | 2018-05-31 | 한국전자통신연구원 | 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장한 기록 매체 |
EP3664449A1 (en) * | 2018-12-05 | 2020-06-10 | InterDigital VC Holdings, Inc. | Method and device for picture encoding and decoding |
-
2021
- 2021-11-11 CN CN202111333832.1A patent/CN116074499A/zh active Pending
- 2021-11-11 CN CN202310492992.3A patent/CN116647673A/zh active Pending
-
2022
- 2022-11-09 WO PCT/CN2022/130954 patent/WO2023083225A1/zh unknown
- 2022-11-11 TW TW111143289A patent/TW202327362A/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2023083225A1 (zh) | 2023-05-19 |
CN116647673A (zh) | 2023-08-25 |
TW202327362A (zh) | 2023-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10785483B2 (en) | Modified coding for a transform skipped block for CABAC in HEVC | |
EP2622577B1 (en) | Video coding using intra-prediction | |
US9838718B2 (en) | Secondary boundary filtering for video coding | |
EP3270591B1 (en) | Modified coding for a transform skipped block for cabac in hevc | |
RU2565502C2 (ru) | Кодирование коэффициентов преобразования для кодирования видео | |
KR101569259B1 (ko) | 비디오 코딩을 위한 변환 계수들의 적응적 스캐닝 | |
KR100773761B1 (ko) | 동영상 부호화 장치 및 방법 | |
US20120128064A1 (en) | Image processing device and method | |
US8552890B2 (en) | Lossless coding with different parameter selection technique for CABAC in HEVC | |
US9860527B2 (en) | High throughput residual coding for a transform skipped block for CABAC in HEVC | |
KR20130095311A (ko) | 변환 계수들에 대한 함수-기반의 스캐닝 순서를 이용한 비디오 코딩 | |
US20160277741A1 (en) | High throughput significance map processing for cabac in hevc | |
US11483562B2 (en) | Method and apparatus for video encoding and decoding based on context switching | |
EP3014879B1 (en) | Modified coding for a transform skipped block for cabac in hevc | |
WO2019086033A1 (zh) | 视频数据解码方法及装置 | |
WO2012166963A1 (en) | Run-mode based coefficient coding for video coding | |
WO2023083225A1 (zh) | 视频编解码方法及装置 | |
WO2014162749A1 (en) | High throughput residual coding for a transform skipped block for cabac in hevc | |
WO2023138391A1 (zh) | 系数解码方法、装置、图像解码器及电子设备 | |
CN116074531A (zh) | 解码方法、编码方法及装置 | |
CN116668705A (zh) | 一种图像解码方法、编码方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40092386 Country of ref document: HK |