编码器、解码器及使用自适应环路滤波器的相应方法与流程

文档序号:26945810发布日期:2021-10-12 18:21阅读:73来源:国知局
编码器、解码器及使用自适应环路滤波器的相应方法1.本专利申请要求于2018年12月23日提交的第us62/784,535号美国临时申请、2019年1月2日提交的第us62/787,735号美国临时申请和2019年3月24日提交的第us62/822,979号美国临时申请的优先权。这些申请的内容通过引用并入本文中。
技术领域
:2.本技术(本发明)实施例大体上涉及图像处理领域,更具体地,涉及对图像中的相邻块的样本进行滤波。
背景技术
::3.视频译码(视频编码和解码)广泛用于数字视频应用,例如广播数字tv、通过互联网和移动网络传输视频、实时会话应用(如视频聊天)、视频会议、dvd和蓝光光盘、视频内容采集和编辑系统,以及安全应用的摄像机。4.即使在视频较短的情况下也需要对大量的视频数据进行描述,当数据要在带宽容量受限的通信网络中发送或以其它方式发送时,这样会造成困难。因此,视频数据通常要先压缩然后在现代电信网络中发送。由于内存资源有限,当在存储设备中存储视频时,视频的大小也会成为问题。视频压缩设备通常在信源侧使用软件和/或硬件,以在发送或存储之前对视频数据进行译码,从而减少用来表示数字视频图像所需的数据量。然后,压缩数据在目的侧由用于对视频数据进行解码的视频解压缩设备接收。在有限的网络资源以及对更高视频质量的需求不断增长的情况下,需要改进压缩和解压缩技术,这些改进的技术在几乎不影响图像质量的情况下能够提高压缩比。技术实现要素:5.本技术实施例提供根据独立权利要求请求保护的用于编码和解码的装置和方法。6.上述和其它目的通过独立权利要求请求保护的主题实现。其它实现方式从从属权利要求、说明书和附图中是显而易见的。7.本发明提供了一种对图像的样本值进行滤波的方法,所述图像包括第一块和第二块,所述第一块和所述第二块在块边界上相邻,其中,所述图像至少包括排列成n行m列的n×m(n乘m)个样本p(i,j),其中,i是从1至n的行索引,j是从1至m的列索引,其中,i从1至k的样本p(i,j)属于所述第一块,i从k+1至n的样本属于所述第二块,其中,k为小于n的整数,其中,对于小于k的整数t,以及在1至m的范围内的整数j,所述方法包括:通过对整数i在1至k–t–1的范围内的所述样本p(i,j)的值应用滤波器来生成滤波样本值,其中,所述滤波器由滤波器支持样本集合支持,其中,所述滤波器支持样本集合包括所述样本p(i,j)和一个或多个其它样本,其中,所述滤波器支持样本集合不包括行索引i'大于k–t–1的任何样本p(i',j'),和/或通过对整数i在k–t至k的范围内的所述样本p(i,j)的值应用滤波器来生成滤波样本值,其中,所述滤波器由滤波器支持样本集合支持,其中,所述滤波器支持样本集合包括所述样本p(i,j)和一个或多个其它样本,其中,所述滤波器支持样本集合不包括行索引i'小于k–t的任何样本p(i',j')。8.滤波器支持样本是这样一些样本:这些样本的值确定了应用滤波器的样本的滤波值。例如,滤波样本值可以是滤波器支持样本值的加权和。滤波器可以是一个数学意义上的滤波器,因此可以完全以软件实现。块边界可以位于第k行与第k+1行之间。9.本发明还提供了一种对图像的样本值进行滤波的方法,所述图像包括第一块和第二块,所述第一块和所述第二块在块边界上相邻,其中,所述图像至少包括排列成n行m列的n×m个样本p(i,j),其中,i是从1至n的行索引,j是从1至m的列索引,其中,i从1至k的样本p(i,j)属于所述第一块,i从k+1至n的样本属于所述第二块,其中,k为小于n的整数,其中,对于小于k的整数t,从1至k的每个i,以及从1至m的每个j,所述方法包括:通过对样本p(i,j)的值应用滤波器来生成滤波样本值,其中,所述滤波器由滤波器支持样本集合支持,其中,所述滤波器支持样本集合包括所述样本p(i,j)和一个或多个其它样本,其中,如果i在1至k–t–1的范围内,则所述滤波器支持样本集合不包括行索引i'大于k–t–1的任何样本p(i',j'),并且其中,如果i在k–t至k的范围内,则所述滤波器支持样本集合不包括行索引i'小于k–t的任何样本p(i',j')。10.根据一个实施例,第一块可以是第一编码树单元(codingtreeunit,ctu),第二块可以是第二ctu。11.t的取值可以为2、3、4、5或6。在一个示例性实施例中,t可以为4。12.根据另一个实施例,对于在1至k–t–1范围内的每个i和对于在1至m范围内的每个j,滤波器支持样本集合可以包括i在1至k–t–1范围内的多个样本p(i',j');并且对于在k–t至k范围内的每个i和对于在1至m的每个j,滤波器支持样本集合可以包括i等于或大于k–t的多个样本p(i,j)。13.这可以进一步拓展:对于k–t至k范围内的每个i,以及对于1至m中的每个j,所述滤波器支持样本集合还可以包括i'大于k的一个或多个样本p(i',j')。因此,在该拓展中,如果i在k–t至k的范围内,则像素p(i,j)的滤波器支持样本集合可以包括第二块的一个或多个样本。14.所述滤波器可以是环内滤波器。或者或另外,所述滤波器可以包括去块效应滤波器。15.根据另一个实施例,所述滤波器可以包括去块效应滤波器、样本自适应偏移滤波器(sampleadaptiveoffsetfilter,sao)和自适应环路滤波器(adaptiveloopfilter,alf),其中,所述sao在所述去块效应滤波器之后应用,所述alf在所述sao之后应用。16.根据一个实施例,所述方法可以包括:确定所述第一块的样本值;将所述滤波器应用于所述第一块的行1至k–t–1的样本值;将所述第一块的行k–t至k的样本值存储在缓冲区中;确定所述第二块的样本值;将所述滤波器应用于已经存储在所述缓冲区中的所述第一块的行k–t的样本值。17.在另一个实施例中,滤波器可以是自适应环路滤波器,所述自适应环路滤波器可以通过访问所述当前块的样本以及所述块周围的样本的分类步骤确定。因此,滤波器可以不是固定滤波器。当前块中以及给定块的邻域中的所有样本的平均值可以用于分类步骤;在一个示例中,如下所述,在块周围的一些样本不可用的情况下,可以使用不同的归一化值来对当前块进行分类。18.根据一个示例性实施例,当所述块周围的样本不可用时,所述自适应滤波器可以通过归一化值确定,其中,所述归一化值可以为正整数值且可以取决于给定块周围的可访问样本的数量。归一化值可以与可访问的样本的数量成反比关系。19.在一个示例中,分类需要邻域样本。或者,如果某些邻域样本不可用,则可以使用不同的归一化。在一个示例中,总是进行归一化:情况(1),块周围的所有样本都可用。情况(2):一些样本不可用。在情况(1)中:在这种情况下,可以使用一种归一化。这可以对应于平均值。如果可用样本较多,则可以取所有样本的总和,并除以样本总数。在情况(2)中:如果可用样本较少,则可以只对可用样本求和,然后只除以可用样本的数量。相应地,归一化因子可以根据可用样本的数量而变化。在一个示例中,当可用样本的数量减少时,归一化值会增大。20.根据一个示例性实施例,当并非围绕块的所有样本都可用时,归一化值可以为96。因此,这可以对应于当围绕块的至少一个样本不可用时的情况。或者或另外,当围绕块的所有样本都可用时,归一化值可以为64。21.根据一个实施例,滤波器可以是自适应环路滤波器。22.根据另一个实施例,当无法访问所需样本以滤波给定样本时,可以应用对称填补操作。根据一个示例性实施例,对称填补操作被定义为用可用于滤波操作的直接相邻样本替换不可用样本。或者或另外,对称填补操作可以定义为一种方法,该方法通过在滤波器的两侧应用填补操作来使滤波器对称,即使在一侧应用填补操作,滤波器的样本仍可访问。23.根据一个实施例,该图像可以包括在视频序列的帧中。24.根据另一个实施例,该方法可以用于编码或解码图像,或者用于编码或解码包括图像的视频序列。25.本发明还提供一种编码器和一种解码器,其中,编码器包括用于执行根据本发明方法的处理电路,解码器包括用于执行根据本发明方法的处理电路。26.本发明还提供一种包括用于执行根据本发明方法的程序代码的计算机程序。27.本发明还提供一种解码器,包括一个或多个处理器和非瞬时性计算机可读存储介质,该非瞬时性计算机可读存储介质与处理器耦合并存储由处理器执行的程序,其中,当程序由处理器执行时,使解码器执行根据本发明的方法。28.本发明还提供一种编码器,包括一个或多个处理器和非瞬时性计算机可读存储介质,该非瞬时性计算机可读存储介质与处理器耦合并存储由处理器执行的程序,其中,当程序由处理器执行时,使编码器执行根据本发明的方法。29.附图及以下说明中将详细描述一个或多个实施例。其它特征、目标和优点在说明书、附图以及权利要求中显而易见。附图说明30.下面结合附图对本发明实施例进行详细描述。31.图1a为用于实现本发明实施例的视频译码系统的示例的框图。32.图1b为用于实现本发明实施例的视频译码系统的另一个示例的框图。33.图2为用于实现本发明实施例的视频编码器的示例的框图。34.图3为用于实现本发明实施例的视频解码器的示例性结构的框图。35.图4为编码装置或解码装置的一个示例的框图。36.图5为编码装置或解码装置的另一个示例的框图。37.图6至图22示意性地示出了本发明实施例的示例。38.下文中,除非另外明确说明,否则相同的附图标记指代相同或至少功能等同的特征。具体实施方式39.在以下描述中,参考构成本发明的一部分的附图,这些附图通过说明的方式示出本发明的实施例的特定方面或可以使用本发明的实施例的具体方面。应理解,本发明的实施例可以用于其它方面,并且包括在附图中未示出的结构上或逻辑上的变化。因此,以下详细描述不作为限制意义,并且本发明的范围由所附权利要求限定。40.例如,应理解,参考所描述的方法公开的内容对于用于执行该方法的对应的设备或系统也可以成立,反之亦然。例如,如果描述了一个或多个特定的方法步骤,则对应的设备可以包括一个或多个单元,例如用于执行所描述的一个或多个方法步骤的功能单元(例如,执行一个或多个步骤的一个单元;或者多个单元,每个单元执行多个步骤中的一个或多个),即使一个或多个单元在附图中未明确描述或示出时也是如此。此外,例如,如果根据一个或多个单元(例如功能单元)来描述特定装置,则对应的方法可以包括用于执行一个或多个单元的功能的一个步骤(例如执行一个或多个单元的功能的一个步骤,或多个步骤,每个步骤执行多个单元中的一个或多个单元的功能),即使一个或多个步骤在附图中未明确描述或示出时也是如此。此外,应理解,除非特别指出,否则本文描述的各种示例性实施例和/或方面的特征可以彼此组合。41.视频译码通常是指对构成视频或视频序列的图像序列进行处理。在视频译码领域中,术语“帧(frame)”可以代替术语“图像(picture或image)”。视频译码(或通常称为译码)包括视频编码和视频解码两部分。视频编码在源端执行,并且通常包括处理(例如,通过压缩)原始视频图像,以减少表示视频图像所需的数据量(以获得更高效的存储和/或传输)。视频解码在目的端执行,并且通常包括相对于编码器的逆处理以重建视频图像。实施例涉及的视频图像(或通常称为图像)的“译码”应理解为视频图像或各自视频序列的“编码”或“解码”。编码部分和解码部分的组合也称为编解码器(编码和解码,codec)。42.在无损视频译码的情况下,可以对原始视频图像进行重建,即,重建的视频图像与原始视频图像具有相同的质量(假设在存储或传输期间没有传输损失或其它数据损失)。在有损视频译码的情况下,通过量化等方式进行进一步压缩,以减少表示视频图像所需的数据量,在解码端无法完全重建视频图像,即,重建的视频图像的质量比原始视频图像的质量低或差。43.若干视频编码标准属于“有损混合视频编解码”组(即,将样本域中的空间和时间预测与2d变换译码相结合,以在变换域中进行量化)。视频序列的每个图像通常分割为一组不重叠的块,并且通常在块级别上进行译码。换句话说,在编码端,通常在块(视频块)级别上对视频进行处理(即,编码),例如,通过使用空间(帧内图像)预测和/或时间(帧间图像)预测来生成预测块,从当前块(当前处理/待处理块)中减去预测块以获得残差块,变换残差块并在变换域中量化残差块以减少待发送(压缩)的数据量,而在解码端,相对于编码器的逆处理用于编码的或压缩的块,以重建当前块用于表示。此外,编码器按照解码器处理循环来处理,使得两者生成相同的预测(例如,帧内和帧间预测)和/或重建,用于进行处理,即,对后续块进行译码。44.在以下视频译码系统10的实施例中,视频编码器20和视频解码器30根据图1至图3进行描述。45.图1a为示例性译码系统10的示意性框图,例如可以使用本技术的技术的视频译码系统10(或简称为译码系统10)。视频译码系统10的视频编码器20(或简称为编码器20)和视频解码器30(或简称为解码器30)表示可以用于根据本技术中描述的各种示例执行技术的设备的示例。46.如图1a所示,译码系统10包括源设备12,源设备12用于向目的地设备14等提供编码图像数据21,以对编码数据13进行解码。47.源设备12包括编码器20,并且可以另外(即可选地)包括图像源16、预处理器(预处理单元)18(例如图像预处理器18)和通信接口或通信单元22。48.图像源16可以包括或可以是:任何类型的图像捕获设备,例如用于捕获真实世界图像的摄像机;和/或任何类型的图像生成设备,例如用于生成计算机动画图像的计算机图形处理器;或用于获取和/或提供真实世界图像、计算机动画图像(例如屏幕内容、虚拟现实(virtualreality,vr)图像),和/或其任何组合(例如增强现实(augmentedreality,ar)图像)的任何类型的设备。图像源可以为存储上述图像中任何图像的任何类型的存储器或存储装置。49.为了与预处理单元18和由预处理单元18执行的处理进行区分,图像或图像数据17也可以称为原始图像或原始图像数据17。50.预处理器18用于接收(原始)图像数据17,并对图像数据17进行预处理,以获得预处理图像19或预处理图像数据19。预处理器18执行的预处理可以包括修正(trimming)、颜色格式转换(例如从rgb到ycbcr)、颜色校正或去噪等。可以理解的是,预处理单元18可以是可选的组件。51.视频编码器20用于接收预处理的图像数据19并提供编码图像数据21(例如,下文根据图2进一步详细描述)。52.源设备12中的通信接口22可以用于:接收编码图像数据21并通过通信信道13向目的地设备14等另一个设备或任何其它设备发送编码图像数据21(或任何其它处理后的版本),以用于存储或直接重建。53.目的地设备14包括解码器30(例如视频解码器30),并且可以另外(即可选地)包括通信接口或通信单元28、后处理单元32(或后处理单元32)和显示设备34。54.目的地设备14的通信接口28用于例如直接从源设备12,或从任何其它源(例如存储设备,例如编码图像数据存储设备)接收编码图像数据21或(或任何其它处理后的版本),并将编码图像数据21提供给解码器30。55.通信接口22和通信接口28可以用于通过源设备12与目的地设备14之间的直接通信链路(例如直接有线或无线连接),或者通过任何类型的网络(例如有线网络、无线网络、有线网络和无线网络的任何组合、任何类型的私网和公网、任何类型的私网和公网的组合),发送或接收编码图像数据21或编码数据13。56.例如,通信接口22可以用于将编码图像数据21封装为报文等合适的格式,和/或使用任何类型的传输编码或处理来处理编码图像数据,以便在通信链路或通信网络上进行传输。57.通信接口28与通信接口22对应,例如,可以用于接收所发送数据,并使用任何类型的对应传输解码或处理和/或解封装过程对传输数据进行处理,以获得编码图像数据21。58.通信接口22和通信接口28均可配置为如图1a中从源设备12指向目的地设备14的通信信道13的箭头所表示的单向通信接口,或配置为双向通信接口,并且可用于发送和接收消息,建立连接,确认并交换与通信链路和/或数据传输(例如编码图像数据传输)相关的任何其它信息等。59.解码器30用于接收编码图像数据21并提供解码图像数据31或解码图像31(例如,下文根据图3或图5进一步详细描述)。60.目的地设备14的后处理器32用于对解码图像数据31(也称为重建图像数据),例如解码图像31,进行后处理,以获得后处理图像数据33,例如后处理图像33。由后处理单元32执行的后处理可以包括颜色格式转换(例如从ycbcr到rgb)、颜色校正、修剪或重新采样或任何其它处理,以例如准备解码图像数据31,用于通过显示设备34等进行显示。61.目的地设备14的显示设备34用于接收后处理图像数据33,以例如向用户或观看者显示图像。显示设备34可以是或包括用于呈现重建图像的任何类型的显示器,例如集成的或外部的显示器或监控器。例如,显示器可以包括液晶显示器(liquidcrystaldisplay,lcd)、有机发光二极管(organiclightemittingdiode,oled)显示器、等离子显示器、投影仪、微led显示器,硅上液晶(liquidcrystalonsilicon,lcos)、数字光处理器(digitallightprocessor,dlp)或任何类型的其它显示器。62.尽管图1a将源设备12和目的地设备14示出为不同的设备,但是设备的实施例也可以包括这两种设备或这两种设备的功能,即包括源设备12或对应的功能与目的地设备14或对应的功能。在此类实施例中,源设备12或对应的功能与目的地设备14或对应的功能可以通过相同的硬件和/或软件、通过不同的硬件和/或软件或其任何组合来实现。63.根据以上描述,对于本领域技术人员来说显而易见的是,图1a中所示的源设备12和/或目的地设备14的不同单元或功能的存在和(精确)功能划分可以根据实际设备和应用而变化。64.编码器20(例如视频编码器20)或解码器30(例如视频解码器30)或两者都可通过如图1b所示的处理电路如一个或多个微处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(application‑specificintegratedcircuit,asic)、现场可编程门阵列(field‑programmablegatearray,fpga)、离散逻辑、硬件、视频译码专用处理器或其任何组合来实现。编码器20可以通过处理电路46实现,以实现结合图2的编码器20和/或本文描述的任何其它编码器系统或子系统所讨论的各种模块。解码器30可以通过处理电路46实现,以实现结合图3的解码器30所讨论的各种模块和/或本文所描述的任何其它解码器系统或子系统。处理电路可以用于执行本文所描述的各种操作。如图5所示,如果这些技术部分地在软件中实现,则设备可以将软件指令存储在合适的非瞬时性计算机可读存储介质中,并且可以通过一个或多个处理器在硬件中执行这些指令,以执行本发明的技术。视频编码器20和视频解码器30中任何一个可以作为组合编解码器(encoder/decoder,codec)的一部分集成在单个设备中,如图1b所示。65.源设备12和目的地设备14可以包括多种设备中的任一种,包括任何类型的手持设备或固定设备,例如,笔记本电脑或膝上型电脑、手机、智能手机、平板或平板电脑、摄像机、台式计算机、机顶盒、电视机、显示设备、数字媒体播放器、视频游戏控制台、视频流设备(如内容业务服务器或内容分发服务器)、广播接收器设备、广播发送器设备等,并且可以使用或不使用任何类型的操作系统。在一些情况下,源设备12和目的地设备14可以用于无线通信。因此,源设备12和目的地设备14可以是无线通信设备。66.在一些情况下,图1a所示的视频译码系统10仅是示例,本技术的技术可以应用于视频译码设置(例如,视频编码或视频解码),不一定包括编码设备与解码设备之间的任何数据通信。在其它示例中,数据可以从本地存储器检索、通过网络流式传输等。视频编码设备可以对数据进行编码并将数据存储到存储器,和/或视频解码设备可以从存储器检索和解码数据。在一些示例中,编码和解码由不彼此通信但简单地将数据编码到存储器和/或从存储器检索和解码数据的设备执行。67.为便于描述,例如,参考由itu‑t视频编码专家组(videocodingexpertsgroup,vceg)和iso/iec运动图像专家组(motionpictureexpertsgroup,mpeg)的视频编码联合工作组(jointcollaborationteamonvideocoding,jct‑vc)开发的高效视频编码(high‑efficiencyvideocoding,hevc)、通用视频编码(versatilevideocoding,vvc)参考软件、下一代视频编码标准描述本发明实施例。本领域普通技术人员应理解本发明的实施例不限于hevc或vvc。68.编码器及编码方法69.图2为用于实现本技术的技术的示例性视频编码器20的示意性框图。在图2的示例中,视频编码器20包括输入端201(或输入接口201)、残差计算单元204、变换处理单元206、量化单元208、反量化单元210、逆变换处理单元212、重建单元214、环路滤波器220、解码图像缓冲区(decodedpicturebuffer,dpb)230、模式选择单元260、熵编码单元270和输出端272(或输出接口272)。模式选择单元260可以包括帧间预测单元244、帧内预测单元254和分割单元262。帧间预测单元244可以包括运动估计单元和运动补偿单元(图中未示出)。根据混合视频编解码器,图2所示的视频编码器20也可以称为混合视频编码器或视频编码器。70.残差计算单元204、变换处理单元206、量化单元208和模式选择单元260组成编码器20的前向信号路径;反量化单元210、逆变换处理单元212、重建单元214、缓冲区216、环路滤波器220、解码图像缓冲区(decodedpicturebuffer,dpb)230、帧间预测单元244和帧内预测单元254组成视频编码器20的反向信号路径,其中,视频编码器20的反向信号路径对应于解码器(参见图3的解码器30)的信号路径。反量化单元210、逆变换处理单元212、重建单元214、环路滤波器220、解码图像缓冲区230、帧间预测单元244和帧内预测单元254还组成视频编码器20的“内置解码器”。71.图像和图像分割(图像和块)72.编码器20可以用于通过输入端201等接收图像17(或图像数据17),例如,形成视频或视频序列的图像序列中的图像。接收到的图像或图像数据还可以是预处理图像19(或预处理图像数据19)。为简单起见,以下描述中称为图像17。图像块17还可以称为当前图像或待译码图像(特别是在视频译码中,将当前图像与其它图像区分开来,其它图像例如是同一视频序列(即,也包括当前图像的视频序列)中之前编码和/或解码的图像)。73.(数字)图像是或可以看作具有强度值的二维样本阵列或矩阵。阵列中的样本也可以称为像素(pixel/pel)(图像元素的简称)。阵列或图像的水平和垂直方向(或轴线)上的样本的数量定义图像的大小和/或分辨率。通常使用三个颜色分量来表示颜色,即,可以通过三个样本阵列来表示图像或图像可以包括三个样本阵列。在rgb格式或色彩空间中,图像包括对应的红、绿、蓝样本阵列。但是,在视频译码中,每个像素通常以亮度和色度格式或颜色空间表示,例如ycbcr,其包括y表示的亮度分量(有时也用l代替)以及cb和cr表示的两个色度分量。亮度分量y表示亮度或灰度强度(例如在灰度级图像中),而两个色度分量cb和cr表示色度或颜色信息分量。对应地,ycbcr格式的图像包括亮度样本值的亮度样本阵列(y)和色度值的两个色度样本阵列(cb和cr)。rgb格式的图像可以转换或变换为ycbcr格式,反之亦然,该过程也称为颜色变换或转换。如果图像是单色的,则该图像可以只包括亮度样本阵列。相应地,图像可以为例如单色格式的亮度样本阵列或4:2:0、4:2:2和4:4:4彩色格式的亮度样本阵列和两个对应的色度样本阵列。74.在视频编码器20的实施例中,视频编码器20可以包括图像分割单元(图2中未示出),用于将图像17分割为多个(通常是不重叠的)图像块203。这些块也可以称为根块或宏块(h.264/avc标准)或称为编码树块(codingtreeblock,ctb)或编码树单元(codingtreeunit,ctu)(h.265/hevc和vvc标准)。图像分割单元可以用于对视频序列中的所有图像和定义块大小的对应的栅格使用相同的块大小,或者改变图像或子集或图像组之间的块大小,并将每个图像分割为对应的块。75.在其它实施例中,视频编码器可以用于直接接收图像17的块203,例如,组成图像17的一个、若干个或所有块。图像块203也可以称为当前图像块或待译码图像块。76.尽管图像块203的尺寸小于图像17,但是与图像17一样,块203也是或也可以被认为是具有强度值(样本值)的样本的二维阵列或矩阵。换句话说,块203例如可以包括一个样本阵列(例如,在单色图像17的情况下,亮度阵列)、三个样本阵列(例如,在彩色图像17的情况下,一个亮度阵列和两个色度阵列)或任何其它数量和/或类型的阵列,这取决于应用的颜色格式。块203在水平和垂直方向(或轴线)上的样本的数量定义了块203的大小。相应地,某图像块可以为m×n(m列×n行)个样本阵列,或m×n个变换系数阵列等。77.在图2所示的视频编码器20的实施例中,视频编码器20可以用于对图像17逐块地进行编码,例如对每个块203执行编码和预测。78.残差计算79.残差计算单元204可以用于根据图像块203和预测块265(后面会详细描述预测块265)计算残差块205(也称为残差205),例如,逐样本(逐像素)从图像块203的样本值中减去预测块265的样本值,以获得样本域中的残差块205。80.变换81.变换处理单元206可以用于对残差块205的样本值进行变换,例如离散余弦变换(discretecosinetransform,dct)或离散正弦变换(discretesinetransform,dst),以获得变换域中的变换系数207。变换系数207也可以称为变换残差系数,并且表示变换域中的残差块205。82.变换处理单元206可以用于应用dct/dst的整数近似,例如针对h.265/hevc指定的变换。与正交dct变换相比,此类整数近似通常通过某个因子进行缩放。使用附加的缩放因子作为变换过程的一部分,以维持经过前向变换和反向变换处理的残差块的范数。通常根据某些限制来选择缩放因子,例如缩放因子为移位运算的2的幂次方、变换系数的位深、准确度和实现成本之间的权衡等。例如,通过逆变换处理单元212指定用于逆变换的特定缩放因子(以及在视频解码器30中通过逆变换处理单元312等为相应的逆变换指定缩放因子),在编码器20中可以相应地通过变换处理单元206等指定用于正向变换的对应的缩放因子。83.在视频编码器20的实施例中,例如,视频编码器20(对应地,变换处理单元206)可以用于直接输出或通过熵编码单元270进行编码或压缩后输出一种或多种变换类型的变换参数,使得视频解码器30可以接收并使用变换参数进行解码。84.量化85.量化单元208可以用于对变换系数207进行量化(例如进行标量量化或矢量量化),以获得量化系数209。量化系数209也可以称为量化变换系数209或量化残差系数209。86.量化过程可以减小与部分或全部变换系数207相关的位深。例如,可以在量化期间将n位变换系数向下舍入到m位变换系数,其中,n大于m,可以通过调整量化参数(quantizationparameter,qp)修改量化程度。例如,对于标量量化,可以进行不同的缩放来实现更精细或更粗略的量化。量化步长大小越小,量化越精细;量化步长大小越大,量化越粗略。合适的量化步长大小可以通过量化参数(quantizationparameter,qp)来表示。例如,量化参数可以是适用于预定义的一组合适的量化步长大小的索引。例如,小的量化参数可以对应精细的量化(小量化步长大小),而大的量化参数可以对应粗略的量化(大量化步长大小),反之亦然。量化操作可以包括除以量化步长,而反量化单元210等执行的相应解量化和/或反解量化操作可以包括乘以量化步长。根据一些标准(例如hevc),实施例中可以使用量化参数来确定量化步长大小。通常,可以通过包括除法的方程的定点近似、根据量化参数计算量化步长大小。可以将附加的缩放因子引入量化和解量化,用于恢复残差块的范数,因为量化步长大小和量化参数的方程的定点近似中使用缩放,所以可以修改该范数。在一种示例性实现方式中,可以合并逆变换和解量化中的缩放。或者,可以使用自定义量化表,并且例如在码流中将该自定义量化表从编码器发送到解码器。量化为有损操作,损耗随量化步长大小的增加而增加。87.在视频编码器20的实施例中,视频编码器20(对应地,量化单元208)可以用于,例如,直接输出或经熵编码单元270进行编码后输出量化参数(quantizationparameter,qp),使得视频解码器30可以接收并使用量化参数进行解码。88.反量化89.反量化单元210用于对量化系数执行量化单元208所执行的量化的反量化,以获得解量化系数211,例如,根据或使用与量化单元208相同的量化步长执行与量化单元208所执行的量化方案的反量化方案。解量化系数211也可以称为解量化残差系数211,其对应于变换系数207,但是由于量化造成损耗,所以解量化系数211通常与变换系数不完全相同。90.逆变换91.逆变换处理单元212用于执行变换处理单元206所执行的变换的逆变换,例如,逆离散余弦变换(discretecosinetransform,dct)或逆离散正弦变换(discretesinetransform,dst),以获得样本域中的重建残差块213(或对应的解量化系数213)。重建残差块213也可以称为变换块213。92.重建93.重建单元214(例如,加法器或求和器214)用于将变换块213(即重建残差块213)与预测块265相加,例如,将重建残差块213的样本值和预测块265的样本值逐样本进行相加,以获得样本域中的重建块215。94.滤波95.环路滤波单元220(或简称为“环路滤波器”220)用于对重建块215进行滤波,以得到滤波块221,或通常用于对重建样本进行滤波,以得到滤波样本。例如,环路滤波单元用于平滑像素的突变或提高视频质量。环路滤波单元220可以包括一个或多个环路滤波器,例如去块效应滤波器、样本自适应偏移(sample‑adaptiveoffset,sao)滤波器或一个或多个其它滤波器,例如双边滤波器、自适应环路滤波器(adaptiveloopfilter,alf)、锐化滤波器、平滑滤波器、协作滤波器或其任何组合。尽管在图2中环路滤波单元220示出为环内滤波器,但在其它配置中,环路滤波单元220可以实现为后环路滤波器。滤波块221也可以称为滤波重建块221。96.例如,视频编码器20(相应地,环路滤波单元220)的实施例可以用于直接输出或通过熵编码单元270编码后输出环路滤波器参数(例如样本自适应偏移信息),使得解码器30可以接收并应用相同或不同的环路滤波参数进行解码。97.解码图像缓冲区98.解码图像缓冲区(decodedpicturebuffer,dpb)230可以是存储参考图像或通常存储参考图像数据的存储器,以在视频编码器20对视频数据进行编码时使用。dpb230可以由各种存储器设备中的任一种形成,例如动态随机存取存储器(dynamicrandomaccessmemory,dram)(包括同步dram(synchronousdram,sdram))、磁阻ram(magnetoresistiveram,mram)、电阻ram(resistiveram,rram)或其它类型的存储器设备。解码图像缓冲区(decodedpicturebuffer,dpb)230可用于存储一个或多个滤波块221。解码图像缓冲区230还可以用于存储相同的当前图像或不同图像(例如之前重建的图像)的其它之前滤波的块(例如之前重建的和滤波的块221),并且可以提供完整的之前重建的(即解码的)图像(以及对应的参考块和样本)和/或部分重建的当前图像(以及对应的参考块和样本),以例如用于帧间预测。解码图像缓冲区230还可以用于存储一个或多个未滤波的重建块215,或通常存储未滤波的重建样本,例如,未经环路滤波单元220滤波的重建块215,或未进行任何其它处理的重建块或重建样本。99.模式选择(分割和预测)100.模式选择单元260包括分割单元262、帧间预测单元244和帧内预测单元254,并且用于从解码图像缓冲区230或其它缓冲区(例如,行缓冲区,图中未示出)接收或获得原始图像数据如原始块203(当前图像17的当前块203),以及重建图像数据如同一(当前)图像和/或一个或多个之前解码的图像的滤波和/或未经滤波的重建样本或重建块。重建图像数据用作帧间预测或帧内预测等预测所需的参考图像数据,以获得预测块265或预测值265。101.模式选择单元260可以用于为当前块预测模式(包括不分割模式)和预测模式(例如帧内或帧间预测模式)确定或选择分割模式,并生成对应的预测块265,该预测块用于残差块205的计算以及重建块215的重建。102.在模式选择单元260的实施例中,模式选择单元260可以用于选择分割和预测模式(例如,从模式选择单元260支持或可用的模式中选择)。分割和预测模式提供最佳匹配,即最小残差(最小残差更有利于压缩,以便传输或存储),或提供最小指示(signaling)开销(最小的指示开销更有利于压缩,以便传输或存储),或者同时考虑以上两者或在以上两者中取得平衡。模式选择单元260可用于根据率失真优化(ratedistortionoptimization,rdo)确定分割和预测模式,即选择提供最小率失真的预测模式。本文中“最佳”、“最小”、“最优”等术语不一定指总体上“最佳”、“最小”、“最优”等,也可以指满足终止或选择标准的情况,例如,某个值超过或低于阈值或其它限制,可能导致“次优选择”,但会降低复杂度和处理时间。103.换句话说,分割单元262可以用于例如,通过迭代地使用四叉树分割(quad‑tree‑partitioning,qt)、二叉树分割(binarypartitioning,bt)或三叉树分割(triple‑tree‑partitioning,tt)或其任何组合,将块203分割为较小的块部分或子块(它们再次形成块),以及用于例如对块部分或子块中的每一个执行预测,其中,模式选择包括选择分割的块203的树结构以及应用于每个块部分或子块的预测模式。104.下文详细描述由视频编码器20执行的分割(例如,由分割单元260执行)处理和预测处理(例如,由帧间预测单元244和帧内预测单元254执行)。105.分割模块106.分割单元262可以将当前块203分割(或划分)为较小的部分,例如较小的正方形或矩形块。这些较小的块(也可以称为子块)可以进一步分割为更小的部分。这也称为树分割或分层树分割,其中,在根树层级0(层级0、深度0)等的根块可以递归地分割为两个或多个下一较低树层级的块,例如树层级1(层级1、深度1)的节点,这些块又可以分割为两个或多个下一较低层级的块,例如树层级2(层级2、深度2)等,直到由于满足结束标准(例如达到最大树深度或最小块大小)而结束分割。未进一步分割的块也称为树的叶块或叶节点。分割为两个部分的树称为二叉树(binary‑tree,bt),分割为三个部分的树称为三叉树(ternary‑tree,tt),分割为四个部分的树称为四叉树(quad‑tree,qt)。107.如上所述,本文中使用的术语“块”可以是图像的一部分,特别是正方形或矩形部分。例如,结合hevc和vvc,块可以是或对应于编码树单元(codingtreeunit,ctu)、编码单元(codingunit,cu)、预测单元(predictionunit,pu)和变换单元(transformunit,tu)和/或对应于相应的块,例如,编码树块(codingtreeblock,ctb)、编码块(codingblock,cb)、变换块(transformblock,tb)或预测块(predictionblock,pb)。108.例如,编码树单元(codingtreeunit,ctu)可以是或包括:亮度样本的ctb、具有三个样本阵列的图像的色度样本的两个对应的ctb、单色图像或使用三个不同的颜色平面和用于对样本进行译码的语法结构译码的图像的样本的ctb。相应地,编码树块(codingtreeblock,ctb)可以是n×n的样本块,其中,n可以设为某个值以将分量分割为ctb,这是一种分割。编码单元(codingunit,cu)可以是或包括:亮度样本的编码块、具有三个样本阵列的图像的色度样本的两个对应的编码块、单色图像或使用三个不同的颜色平面和用于对样本进行译码的语法结构译码的图像的样本的编码块。相应地,编码块(codingblock,cb)可以是m×n的样本块,其中,m和n可以设为某些值以将ctb分割为编码块,这是一种分割。109.在实施例中,例如,根据hevc,可以通过表示为编码树的四叉树结构将编码树单元(codingtreeunit,ctu)划分为cu。在cu级别上决定是通过帧间(时间)预测还是通过帧内(空间)预测对图像区域进行译码。每个cu还可以根据pu划分类型划分为1个、2个或4个pu。在一个pu内,进行相同的预测过程,并且以pu为单位将相关信息发送到解码器。在通过进行预测过程而获得残差块后,根据pu划分类型,可以根据与用于cu的编码树类似的其它四叉树结构将cu分割为变换单元(transformunit,tu)。110.在实施例中,例如,根据当前正在开发的最新视频编码标准(称为通用视频编码(versatilevideocoding,vvc),使用四叉树和二叉树(quad–treeandbinarytree,qtbt)分割对编码块进行分割。在qtbt块结构中,cu可以具有正方形或矩形形状。例如,首先通过四叉树结构分割编码树单元(codingtreeunit,ctu)。进一步通过二叉树或三叉树结构对四叉树叶节点进行分割。分割树叶节点称为编码单元(codingunit,cu),该段用于预测和变换处理,无需进一步分割。即,cu、pu和tu在qtbt编码块结构中具有相同的块大小。同时,还提出将三叉树分割等多重分割与qtbt块结构结合使用。111.在一个示例中,视频编码器20的模式选择单元260可以用于执行本文分割技术的任何组合。112.如上所述,视频编码器20用于从一组(预定的)预测模式中确定或选择最佳或最优预测模式。该组预测模式可以包括例如帧内预测模式和/或帧间预测模式。113.帧内预测114.该组帧内预测模式可以包括35种不同的帧内预测模式,例如dc(或均值)模式和平面模式等非定向模式,或hevc中定义的定向模式等,或者可以包括67种不同的帧内预测模式,例如dc(或均值)模式和平面模式等非定向模式,或vvc中定义的定向模式等。115.帧内预测单元254用于根据帧内预测模式集合中的帧内预测模式使用同一当前图像的相邻块的重建样本来生成帧内预测块265。116.帧内预测单元254(或通常为模式选择单元260)还用于以语法元素266的形式向熵编码单元270输出帧内预测参数(或通常为指示块的选定帧内预测模式的信息),以将该帧内预测参数包括到编码图像数据21中,从而视频解码器30可以,例如,接收并使用该预测参数进行解码。117.帧间预测118.该组(或可能的)帧间预测模式取决于可用的参考图像(即,例如存储在dpb230中的之前至少部分解码的图像)和其它帧间预测参数,例如是整个参考图像还是仅参考图像的一部分(例如,当前块的区域周围的搜索窗口区域)用于搜索最佳匹配的参考块,和/或例如是否应用像素插值,例如半像素和/或四分之一像素插值,或不应用像素插值。119.除了上述预测模式之外,还可以应用跳过模式和/或直接模式。120.帧间预测单元244可以包括运动估计(motionestimation,me)单元和运动补偿(motioncompensation,mc)单元(两者均未在图2中示出)。运动估计单元可以用于接收或获取图像块203(当前图像17的当前图像块203)和解码图像231,或者至少一个或多个之前重建的块(例如一个或多个其它/不同的之前解码的图像231的重建块),以用于运动估计。例如,视频序列可以包括当前图像和之前解码的图像231,或者,换句话说,当前图像和之前解码的图像231可以是构成视频序列的图像序列的一部分或可以构成该序列。121.例如,编码器20可以用于从多个其它图像的相同或不同图像的多个参考块中选择参考块并提供参考图像(或参考图像索引)和/或参考块的位置(x坐标、y坐标)与当前块的位置之间的偏移(空间偏移),作为运动估计单元的帧间预测参数。这个偏移也称为运动矢量(motionvector,mv)。122.运动补偿单元用于获取(例如,接收)帧间预测参数,并根据或通过帧间预测参数进行帧间预测,以获得帧间预测块265。运动补偿单元所执行的运动补偿可以包括根据通过运动估计确定的运动/块矢量提取或生成预测块(可能执行插值以提高子像素精度)。插值滤波可以通过已知样本生成附加的样本,从而潜在地增加可以用于译码图像块的候选预测块的数量。在接收到当前图像块的pu的运动矢量时,运动补偿单元可以定位运动矢量在一个参考图像列表中指向的预测块。123.运动补偿单元还可以生成与块和视频条带(slice)相关的语法元素,该语法元素由视频解码器30用来解码视频条带的图像块。124.熵译码125.例如,熵编码单元270用于将熵编码算法或方案(例如,可变长度译码(variablelengthcoding,vlc)方案、上下文自适应vlc方案(contextadaptivevlc,calvc)、算术译码方案、二值化算法、上下文自适应二进制算术译码(contextadaptivebinaryarithmeticcoding,cabac)、基于语法的上下文自适应二进制算术译码(syntax‑basedcontext‑adaptivebinaryarithmeticcoding,sbac)、概率区间分割熵(probabilityintervalpartitioningentropy,pipe)译码或其它熵编码方法或技术)或旁路(无压缩)方案应用于量化系数209、帧间预测参数、帧内预测参数、环路滤波参数和/或其它语法元素,以获得可以通过输出单元272以编码码流21等形式输出的编码图像数据21,使得视频解码器30可以接收并使用这些参数进行解码。可以将编码码流21发送到视频解码器30,或者将其存储在存储器汇总,以便随后由视频解码器30发送或检索。126.视频编码器20的其它结构变化可以用于编码视频流。例如,对于某些块或帧,基于非变换的编码器20可以在没有变换处理单元206的情况下直接量化残差信号。在另一个种实现方式中,编码器20可以将量化单元208和反量化单元210组合成单个单元。127.解码器及解码方法128.图3为用于实现本技术的技术的视频解码器30的示例。视频解码器30用于接收例如由编码器20编码的编码图像数据21(例如,编码码流21),以获得解码图像331。编码图像数据或码流包括用于对编码图像数据进行解码的信息,例如,表示编码视频条带的图像块的数据以及相关的语法元素。129.在图3的示例中,解码器30包括熵解码单元304、反量化单元310、逆变换处理单元312、重建单元314(例如求和器314)、环路滤波器320、解码图像缓冲区(decodedpicturebuffer,dpb)330、帧间预测单元344和帧内预测单元354。帧间预测单元344可以是或包括运动补偿单元。在一些示例中,视频解码器30可以执行与图2中关于视频编码器100描述的编码通道大体上互逆的解码通道。130.如编码器20所述,反量化单元210、逆变换处理单元212、重建单元214、环路滤波器220、解码图像缓冲区(decodedpicturebuffer,dpb)230、帧间预测单元344和帧内预测单元354还组成视频编码器20的“内置解码器”。因此,反量化单元310可以与反量化单元110具有相同的功能,逆变换处理单元312可以与逆变换处理单元212具有相同的功能,重建单元314可以与重建单元214具有相同的功能,环路滤波器320可以与环路滤波器220具有相同的功能,解码图像缓冲区330可以与解码图像缓冲区230具有相同的功能。因此,对视频编码器20的相应单元和功能的解释相应地适用于视频解码器30的相应单元和功能。131.熵解码132.熵解码单元304用于解析码流21(或通常称为编码图像数据21),并对编码图像数据21进行熵解码,以获得量化系数309和/或解码译码参数(图3中未示出)等,例如帧间预测参数(如参考图像索引和运动矢量)、帧内预测参数(如帧内预测模式或索引)、变换参数、量化参数、环路滤波参数和/或其它语法元素等中的任一者或全部。熵解码单元304可以用于进行对应于编码器20的熵编码单元270所描述的编码方案的解码算法或方案。熵解码单元304还可以用于向模式选择单元360提供帧间预测参数、帧内预测参数和/或其它语法元素,并向解码器30的其它单元提供其它参数。视频解码器30可以在视频条带级和/或视频块级接收语法元素。133.反量化134.反量化单元310可以用于从编码图像数据21(例如,通过熵解码单元304等解析和/或解码)接收量化参数(quantizationparameter,qp)(或通常为与反量化相关的信息)和量化系数,并根据量化参数对解码量化系数309进行反量化,以获得解量化系数311,解量化系数311也可以称为变换系数311。反量化过程可以包括:使用视频编码器20确定的视频条带中的每个视频块的量化参数,以确定应应用的量化程度以及反量化程度。135.逆变换136.逆变换处理单元312可以用于接收解量化系数311(也称为变换系数311),并对解量化系数311进行变换,以获得样本域中的重建残差块213。重建残差块213也可以称为变换块313。变换可以是逆变换,例如,逆dct、逆dst、逆整数变换或概念上类似的逆变换过程。逆变换处理单元312还可以用于从编码图像数据21接收变换参数或相应的信息(例如,通过解析和/或解码,例如,通过熵解码单元304),以确定要应用于解量化系数311的变换。137.重建138.重建单元314(例如,加法器或求和器314)可以用于将重建残差块313添加到预测块365,以获得样本域中的重建块315,例如,通过将重建残差块313的样本值添加到预测块365的样本值。139.滤波140.环路滤波单元320(在译码环路中或译码环路之后)用于对重建块315进行滤波,以获得滤波块321,以平滑像素的突变或提高视频质量。环路滤波单元320可以包括一个或多个环路滤波器,例如去块效应滤波器、样本自适应偏移(sample‑adaptiveoffset,sao)滤波器或一个或多个其它滤波器,例如双边滤波器、自适应环路滤波器(adaptiveloopfilter,alf)、锐化滤波器、平滑滤波器、协作滤波器或其任何组合。尽管在图3中环路滤波单元320示出为环内滤波器,但在其它配置中,环路滤波单元320可以实现为后环路滤波器。141.解码图像缓冲区142.之后,将一个图像的解码视频块321存储在解码图像缓冲区330中。解码图像331作为参考图像存储在所述解码图像缓冲区330中,用于后续对其它图像进行运动补偿和/或后续相应输出以进行显示。143.解码器30用于例如通过输出端312输出解码图像311,以呈现给用户或由用户观看。144.预测145.帧间预测单元344的功能可以与帧间预测单元244(特别是运动补偿单元)相同;帧内预测单元354的功能可以与帧间预测单元254相同,并根据从编码图像数据21接收到的分割和/或预测参数或相应信息(例如,通过熵解码单元304等解析和/或解码)决定划分或分割模式并执行预测。模式选择单元360可以用于根据重建图像、重建块或相应的样本(已滤波的或未滤波的)按块进行预测(帧内预测或帧间预测),以获得预测块365。146.当视频条带译码为帧内译码(i)条带时,模式选择单元360的帧内预测单元354用于:根据所指示的帧内预测模式和来自当前图像的之前解码的块的数据来为当前视频条带的图像块生成预测块365。当视频图像译码为帧间译码(即,b或p)条带时,模式选择单元360的帧间预测单元344(例如,运动补偿单元)用于根据从熵解码单元304接收到的运动矢量和其它语法元素生成当前视频条带的视频块的预测块365。对于帧间预测,预测块可以从一个参考图像列表中的一个参考图像中生成。视频解码器30可以根据dpb330中存储的参考图像通过默认构建技术构建参考帧列表,列表0和列表1。147.模式选择单元360用于通过解析运动矢量和其它语法元素确定当前视频条带的视频块的预测信息,并使用预测信息来生成正在解码的当前视频块的预测块。例如,模式选择单元360使用接收到的一些语法元素来确定用于对视频条带的视频块进行译码的预测模式(例如,帧内或帧间预测)、帧间预测条带类型(例如,b条带,p条带或gpb条带)、条带的参考图像列表中的一个或多个的构建信息、条带的每个帧间编码视频块的运动矢量、条带的每个帧间译码视频块的帧间预测状态,以及其它信息,以对当前视频条带中的视频块进行解码。148.视频解码器30的其它变型可以用于解码编码图像数据21。例如,解码器30可以在没有环路滤波单元320的情况下生成输出视频流。例如,对于某些块或帧,基于非变换的解码器30可以在没有逆变换处理单元312的情况下直接量化残差信号。在另一个种实现方式中,视频解码器30可以将反量化单元310和逆变换处理单元312组合成单个单元。149.应理解,在编码器20和解码器30中,可以针对当前环节的处理结果进行进一步处理,然后输出到下一环节。例如,在插值滤波、运动矢量推导或环路滤波等之后,可以对插值滤波、运动矢量推导或环路滤波的处理结果进一步进行限幅(clip)或移位(shift)等操作。150.需要说明的是,可以对当前块的推导运动矢量(包括但不限于仿射模式下的控制点运动矢量、仿射、平面、atmvp模式下的子块运动矢量、时间运动矢量等)进行进一步操作。例如,根据运动矢量的表示位将该运动矢量的值限制在预定义的范围。如果运动矢量的表示位为bitdepth,则运动矢量的取值范围为–2^(bitdepth–1)至2^(bitdepth–1)–1,其中,“^”符号表示幂次方。例如,如果bitdepth设置为16,则该取值范围为–32768至32767;如果bitdepth设置为18,则该取值范围为–131072至131071。例如,对推导的运动矢量(例如一个8×8块中的四个4×4子块的mv)的值进行限制,使得四个4×4子块mv的整数部分之间的最大差值不超过n个像素,例如不超过1个像素。这里提供了两种根据bitdepth限制运动矢量的方法。151.方法一:通过流操作移除溢出最高有效位(mostsignificantbit,msb)152.ux=(mvx+2bitdepth)%2bitdepthꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(1)153.mvx=(ux>=2bitdepth–1)?(ux–2bitdepth):uxꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(2)154.uy=(mvy+2bitdepth)%2bitdepthꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(3)155.mvy=(uy>=2bitdepth–1)?(uy–2bitdepth):uyꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(4)156.其中,mvx为图像块或子块的运动矢量的水平分量,mvy为图像块或子块的运动矢量的垂直分量,ux和uy表示中间值。157.例如,如果mvx的值为–32769,则应用公式(1)和(2)后,所得到的值为32767。在计算机系统中,十进制数以二的补码的形式存储。–32769的二的补码为1,0111,1111,1111,1111(17位),然后丢弃msb,因此所得到的二的补码为0111,1111,1111,1111(十进制数为32767),与公式(1)和(2)的输出相同。158.ux=(mvpx+mvdx+2bitdepth)%2bitdepthꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(5)159.mvx=(ux>=2bitdepth–1)?(ux–2bitdepth):uxꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(6)160.uy=(mvpy+mvdy+2bitdepth)%2bitdepthꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(7)161.mvy=(uy>=2bitdepth–1)?(uy–2bitdepth):uyꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(8)162.如公式(5)至(8)所示,在求mvp与mvd之和期间,可以应用这些运算。163.方法二:通过限幅(clipping)移除溢出msb164.vx=clip3(–2bitdepth–1,2bitdepth–1–1,vx)165.vy=clip3(–2bitdepth–1,2bitdepth–1–1,vy)166.其中,vx为图像块或子块的运动矢量的水平分量,vy为图像块或子块的运动矢量的垂直分量;x、y和z分别对应mv限幅过程的三个输入值,函数clip3的定义如下:[0167][0168]图4为本发明的一个实施例提供的视频译码设备400的示意图。如本文所述,视频译码设备400适合于实现所公开的实施例。在一个实施例中,视频译码设备400可以是解码器(例如,图1a中的视频解码器30)或编码器(例如,图1a中的视频编码器20)。[0169]视频译码设备400包括:用于接收数据的入端口410(或输入端口410)和接收器单元(rx)420;用于处理数据的处理器、逻辑单元或中央处理器(centralprocessingunit,cpu)430;用于发送数据的发送器单元(tx)440和出端口450(或输出端口450);以及用于存储数据的存储器460。视频译码设备400还可以包括耦合到入端口410、接收器单元420、发送器单元440和出端口450的光电(optical‑to‑electrical,oe)组件和电光(electrical‑to‑optical,eo)组件,以用于光或电信号的出或入。[0170]处理器430通过硬件和软件实现。处理器430可以实现为一个或多个cpu芯片、核(例如,多核处理器)、fpga、asic和dsp。处理器430与入端口410、接收器单元420、发送器单元440、出端口450和存储器460通信。处理器430包括译码模块470。译码模块470实现上述公开的实施例。例如,译码模块470实现、处理、准备或提供各种译码操作。因此,包括译码模块470大大提高了视频译码设备400的功能,并影响视频译码设备400到不同状态的转换。或者,译码模块470实现为存储在存储器460中并由处理器430执行的指令。[0171]存储器460可以包括一个或多个磁盘、磁带机和固态硬盘,并且可以用作溢出数据存储设备,以在选择此类程序用于执行时存储程序,以及存储在程序执行期间读取的指令和数据。例如,存储器460可以是易失性和/或非易失性的,并且可以是只读存储器(read‑onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、三态内容寻址存储器(ternarycontent‑addressablememory,tcam)和/或静态随机存取存储器(staticrandom‑accessmemory,sram)。[0172]图5为一个示例性实施例提供的装置500的简化框图,该装置500可以用作图1中的源设备12和目的地设备14中的一者或两者。[0173]装置500中的处理器502可以是中央处理器。或者,处理器502可以是能够操纵或处理现在存在或以后开发的信息的任何其它类型的设备或多个设备。尽管所公开的实现方式可以通过单个处理器(例如处理器502)实施,但是可以通过一个以上的处理器来提高速度和效率。[0174]装置500中的存储器504在一种实现方式中可以是只读存储器(readonlymemory,rom)设备或随机存取存储器(randomaccessmemory,ram)设备。可以使用任何其它合适类型的存储设备作为存储器504。存储器504可以包括由处理器502通过总线512访问的代码和数据506。存储器504还可以包括操作系统508和应用程序510,应用程序510包括使处理器502执行本文描述的方法的至少一个程序。例如,应用程序510可以包括应用程序1至n,其还包括执行本文所描述的方法的视频译码应用程序。[0175]装置500还可以包括一个或多个输出设备,例如显示器518。在一个示例中,显示器518可以是触摸敏感显示器,触摸敏感显示器将显示器与可操作以感测触摸输入的触摸敏感元件相结合。显示器518可以通过总线512耦合到处理器502。[0176]尽管在这里描述为单个总线,但装置500的总线512可以由多个总线组成。此外,辅助存储装置514可以直接耦合到装置500的其它组件,或者可以通过网络访问,并且可以包括单个集成单元(例如存储卡)或多个单元(例如多个存储卡)。因此,可以以多种配置实现装置500。[0177]环内滤波器背景[0178]在vtm3(vvc测试模型3)中,总共有3个环路滤波器。在vtm3中,除了去块效应滤波器和sao(hevc中的两种环路滤波器)外,还使用自适应环路滤波器(adaptiveloopfilter,alf)。vtm3中滤波过程的顺序可以是去块效应滤波、sao滤波和alf滤波。[0179]alf背景[0180]vtm3中使用具有基于块的滤波器适应的自适应环路滤波器(adaptiveloopfilter,alf)。对于亮度分量,根据局部梯度的方向和活动,为每个4×4块选择25个滤波器中的一个。[0181]滤波器形状:[0182]在jem中,亮度分量使用两个菱形滤波器形状(如图6所示)。亮度分量使用7×7菱形,色度分量使用5×5菱形。[0183]块分类:[0184]对于亮度分量,每个4×4块被分到25类中的一类中。分类指数c根据其方向性d和活动量化值推导,如下所示:[0185][0186]为了计算d和首先使用一维拉普拉斯计算水平、垂直和两个对角线方向的梯度:[0187][0188][0189][0190][0191]其中,索引i和j指4×4块内左上样本的坐标,r(i,j)表示坐标(i,j)处的重建样本。[0192]为了降低块分类的复杂性,使用子采样一维拉普拉斯计算法。如图7所示,所有方向的梯度计算使用相同的子采样位置。[0193]d的水平方向和垂直方向的梯度的最大值和最小值设置为:[0194][0195]两个对角线方向的梯度的最大值和最小值设置为:[0196][0197]为了推导方向性d的值,将这些值相互比较,并与两个阈值t1和t2比较:[0198]步骤1:如果和都为真,则d设置为0。[0199]步骤2:如果则执行步骤3;否则执行步骤4。[0200]步骤3:如果则d设置为2;否则d设置为1。[0201]步骤4:如果则d设置为4;否则d设置为3。[0202]活动值a的计算过程如下:[0203][0204]a进一步量化到0至4的范围(包括端值),量化值表示为[0205]对于图像中的色度分量,没有使用分类方法,即对每个色度分量使用一组alf系数。[0206]滤波器系数的几何变换[0207]在对每个4×4亮度块进行滤波之前,根据为该块计算的梯度值,将旋转或对角和垂直翻转等几何变换应用于滤波器系数f(k,l)。这等同于将这些变换应用于滤波器支持区域中的样本。其思想是通过对齐应用alf的不同块的方向性,使这些块更加相似。[0208]介绍了三种几何变换,包括对角变换、垂直翻转变换和旋转变换:[0209]对角:fd(k,l)=f(l,k)ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(17)[0210]垂直翻转:fv(k,l)=f(k,k‑l‑1)ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(18)[0211]旋转:fr(k,l)=f(k‑l‑1,k)ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(19)[0212]其中,k是滤波器的大小,0≤k,l≤k‑1是系数坐标,使得位置(0,0)在左上顶点,位置(k‑1,k‑1)在右下顶点。根据为该块计算的梯度值,将变换应用于滤波器系数f(k,l)。下表总结了变换与四个方向的四个梯度之间的关系。[0213]表1一个块的计算的梯度与变换的映射[0214]梯度值变换gd2<gd1且gh<gv无变换gd2<gd1且gv<gh对角gd1<gd2且gh<gv垂直翻转gd1<gd2且gv<gh旋转[0215]滤波器参数指示[0216]在vtm3中,alf滤波器参数在条带头中指示。最多可指示25组亮度滤波器系数。可以合并不同分类的滤波器系数以减少比特开销。[0217]滤波过程可以控制在ctb级。标志总是指示来表示是否将alf应用于亮度ctb。对于每个色度ctb,标志可以指示来表示是否将alf应用于色度ctb,这取决于alf_chroma_ctb_present_flag的值。[0218]对滤波器系数进行量化,其中,范数等于128。为了进一步限制乘法复杂度,应用码流一致性,即中心位置的系数值应在0到28的范围内,而其余位置的系数值应在–27到27–1的范围内。[0219]滤波过程[0220]在解码端,当对ctb启用alf时,对cu内的每个样本r(i,j)进行滤波,从而得到如下所示的样本值r′(i,j),其中,l表示滤波器长度,fm,n表示滤波器系数,f(k,l)表示解码后的滤波器系数。[0221][0222]alf语法规范按照vvc规范[0223]自适应环路滤波过程[0224]1.1概述[0225]该过程的输入是自适应环路滤波器recpicturel、recpicturecb和recpicturecr之前的重建图像样本阵列。[0226]该过程的输出是自适应环路滤波器alfpicturel、alfpicturecb和alfpicturecr之后的修改后的图像样本阵列。[0227]自适应环路滤波器alfpicturel、alfpicturecb和alfpicturecr之后的修改后的重建图像样本阵列中的样本值初始设置为分别等于自适应环路滤波器recpicturel、recpicturecb和recpicturecr之前的重建图像样本阵列中的样本值。[0228]当tile_group_alf_enabled_flag的值等于1时,对于具有亮度编码树块位置(rx,ry)的每个编码树单元(其中,rx=0..picwidthinctbs–1和ry=0..picheightinctbs–1),应用如下流程:[0229]当alf_ctb_flag[0][rx][ry]的值等于1时,调用1.2小节所述的亮度样本的编码树块滤波过程,其中,recpicturel、alfpicturel和设置为(rx<<ctblog2sizey,ry<<ctblog2sizey)的亮度编码树块位置(xctb,yctb)作为输入,输出为修改后的滤波图像alfpicturel。[0230]当alf_ctb_flag[1][rx][ry]的值等于1时,调用1.1小节所述的色度样本的编码树块滤波过程,其中,recpicture设置为recpicturecb,alfpicture设置为等于alfpicturecb,色度编码树块位置(xctbc,yctbc)设置为(rx<<(ctblog2sizey–1),ry<<(ctblog2sizey–1))作为输入,输出为修改后的滤波图像alfpicturecb。[0231]当alf_ctb_flag[2][rx][ry]的值等于1时,调用1.4小节所述的色度样本的编码树块滤波过程,其中,recpicture设置为recpicturecr,alfpicture设置为等于alfpicturecr,色度编码树块位置(xctbc,yctbc)设置为等于(rx<<(ctblog2sizey–1),ry<<(ctblog2sizey–1))作为输入,输出为修改后的滤波图像alfpicturecr。[0232]1.2亮度样本编码树块滤波过程[0233]该过程的输入为:[0234]在自适应环路滤波处理之前的重建亮度图像样本阵列recpicturel,[0235]滤波重建亮度图像样本阵列alfpicturel,[0236]表示当前亮度编码树块的左上样本相对于当前图像的左上样本的亮度位置(xctb,yctb)。[0237]该过程的输出是修改后的滤波重建亮度图像样本阵列alfpicturel。[0238]调用1.3小节的滤波器索引的推导过程,其中,位置(xctb,yctb)和重建亮度图像样本阵列recpicturel为输入,filtidx[x][y]和transposeidx[x][y]作为输出(其中,x、y=0..ctbsizey–1)。[0239]对于滤波重建亮度样本alfpicturel[x][y]的推导,如下所示对当前亮度编码树块recpicturel[x][y]内部的每个重建亮度样本进行滤波,其中,x、y=0..ctbsizey–1:[0240]其中,filtidx[x][y]指定的滤波器对应的亮度滤波器系数f[j]的阵列(其中,j=0..12)的推导过程如下:[0241]f[j]=alfcoeffl[filtidx[x][y]][j]。[0242]亮度滤波器系数filtercoeff根据transposeidx[x][y]推导,如下所示:[0243]如果transposeindex[x][y]==1,[0244]则filtercoeff[]={f[9],f[4],f[10],f[8],f[1],f[5],f[11],f[7],f[3],f[0],f[2],f[6],f[12]}[0245]否则,如果transposeindex[x][y]==2,[0246]则filtercoeff[]={f[0],f[3],f[2],f[1],f[8],f[7],f[6],f[5],f[4],f[9],f[10],f[11],f[12]}[0247]否则,如果transposeindex[x][y]==3,[0248]则filtercoeff[]={f[9],f[8],f[10],f[4],f[3],f[7],f[11],f[5],f[1],f[0],f[2],f[6],f[12]}[0249]否则,[0250]filtercoeff[]={f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8],f[9],f[10],f[11],f[12]}[0251]给定亮度样本的阵列recpicture内的每个对应的亮度样本(x,y)的位置(hx,vy)的推导过程如下:[0252]hx=clip3(0,pic_width_in_luma_samples–1,xctb+x)[0253]vy=clip3(0,pic_height_in_luma_samples–1,yctb+y)[0254]变量sum的推导过程如下:[0255]sum=filtercoeff[0]*(recpicturel[hx,vy+3]+recpicturel[hx,vy–3])+[0256]filtercoeff[1]*(recpicturel[hx+1,vy+2]+recpicturel[hx–1,vy–2])+[0257]filtercoeff[2]*(recpicturel[hx,vy+2]+recpicturel[hx,vy–2])+[0258]filtercoeff[3]*(recpicturel[hx–1,vy+2]+recpicturel[hx+1,vy–2])+[0259]filtercoeff[4]*(recpicturel[hx+2,vy+1]+recpicturel[hx–2,vy–1])+[0260]filtercoeff[5]*(recpicturel[hx+1,vy+1]+recpicturel[hx–1,vy–1])+[0261]filtercoeff[6]*(recpicturel[hx,vy+1]+recpicturel[hx,vy–1])+[0262]filtercoeff[7]*(recpicturel[hx–1,vy+1]+recpicturel[hx+1,vy–1])+[0263]filtercoeff[8]*(recpicturel[hx–2,vy+1]+recpicturel[hx+2,vy–1])+[0264]filtercoeff[9]*(recpicturel[hx+3,vy]+recpicturel[hx–3,vy])+[0265]filtercoeff[10]*(recpicturel[hx+2,vy]+recpicturel[hx–2,vy])+[0266]filtercoeff[11]*(recpicturel[hx+1,vy]+recpicturel[hx–1,vy])+[0267]filtercoeff[12]*recpicturel[hx,vy][0268]sum=(sum+64)>>7[0269]修改后的滤波重建亮度图像样本alfpicturel[xctb+x][yctb+y]的推导过程如下:[0270]alfpicturel[xctb+x][yctb+y]=clip3(0,(1<<bitdepthy)–1,sum)。[0271]1.3亮度样本的alf转置和滤波器索引的推导过程[0272]该过程的输入为:[0273]表示当前亮度编码树块的左上样本相对于当前图像的左上样本的亮度位置(xctb,yctb),[0274]在自适应环路滤波处理之前的重建亮度图像样本阵列recpicturel。[0275]该过程的输出为:[0276]分类滤波器索引阵列filtidx[x][y],其中,x、y=0..ctbsizey–1,[0277]转置索引阵列transposeidx[x][y],其中,x、y=0..ctbsizey–1。[0278]给定亮度样本的阵列recpicture内的每个对应的亮度样本(x,y)的位置(hx,vy)的推导过程如下:[0279]hx=clip3(0,pic_width_in_luma_samples–1,x)[0280]vy=clip3(0,pic_height_in_luma_samples–1,y)[0281]分类滤波器索引阵列filtidx和转置索引阵列transposeidx通过以下顺序步骤推导:[0282]变量filth[x][y]、filtv[x][y]、filtd0[x][y]和filtd1[x][y](其中,x、y=–2..ctbsizey+1)的推导过程如下:[0283]如果x和y均为偶数,或x和y均为奇数,则以下适用:[0284]filth[x][y]=abs((recpicture[hxctb+x,vyctb+y]<<1)–recpicture[hxctb+x–1,vyctb+y]–recpicture[hxctb+x+1,vyctb+y])[0285]filtv[x][y]=abs((recpicture[hxctb+x,vyctb+y]<<1)–recpicture[hxctb+x,vyctb+y–1]–recpicture[hxctb+x,vyctb+y+1])[0286]filtd0[x][y]=abs((recpicture[hxctb+x,vyctb+y]<<1)–recpicture[hxctb+x–1,vyctb+y–1]–recpicture[hxctb+x+1,vyctb+y+1])[0287]filtd1[x][y]=abs((recpicture[hxctb+x,vyctb+y]<<1)–recpicture[hxctb+x+1,vyctb+y–1]–recpicture[hxctb+x–1,vyctb+y+1])[0288]否则,filth[x][y]、filtv[x][y]、filtd0[x][y]和filtd1[x][y]设置为0。[0289]变量vartemph1[x][y]、vartempv1[x][y]、vartempd01[x][y]、vartempd11[x][y]和vartemp[x][y](其中,x、y=0..(ctbsizey–1)>>2)的推导过程如下:[0290]sumh[x][y]=σiσjfilth[(x<<2)+i][(y<<2)+j],其中,i、j=–2..5[0291]sumv[x][y]=σiσjfiltv[(x<<2)+i][(y<<2)+j],其中,i、j=–2..5[0292]sumd0[x][y]=σiσjfiltd0[(x<<2)+i][(y<<2)+j],其中,i、j=–2..5[0293]sumd1[x][y]=σiσjfiltd1[(x<<2)+i][(y<<2)+j],其中,i、j=–2..5[0294]sumofhv[x][y]=sumh[x][y]+sumv[x][y][0295]变量dir1[x][y]、dir2[x][y]和dirs[x][y](其中,x、y=0..ctbsizey–1)的推导过程如下:[0296]变量hv1、hv0和dirhv的推导过程如下:[0297]如果sumv[x>>2][y>>2]大于sumh[x>>2][y>>2],则以下适用:[0298]hv1=sumv[x>>2][y>>2][0299]hv0=sumh[x>>2][y>>2][0300]dirhv=1[0301]否则,以下适用:[0302]hv1=sumh[x>>2][y>>2][0303]hv0=sumv[x>>2][y>>2][0304]dirhv=3[0305]变量d1、d0和dird的推导过程如下:[0306]如果sumd0[x>>2][y>>2]大于sumd1[x>>2][y>>2],则以下适用:[0307]d1=sumd0[x>>2][y>>2][0308]d0=sumd1[x>>2][y>>2][0309]dird=0[0310]否则,以下适用:[0311]d1=sumd1[x>>2][y>>2][0312]d0=sumd0[x>>2][y>>2][0313]dird=2[0314]变量hvd1、hvd0的推导过程如下:[0315]hvd1=(d1*hv0>hv1*d0)?d1:hv1[0316]hvd0=(d1*hv0>hv1*d0)?d0:hv0[0317]变量dirs[x][y]、dir1[x][y]和dir2[x][y]的推导过程如下:[0318]dir1[x][y]=(d1*hv0>hv1*d0)?dird:dirhv[0319]dir2[x][y]=(d1*hv0>hv1*d0)?dirhv:dird[0320]dirs[x][y]=(hvd1>2*hvd0)?1:((hvd1*2>9*hvd0)?2:0)[0321]变量avgvar[x][y](其中,x、y=0..ctbsizey–1)的推导过程如下:[0322]vartab[]={0,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4}[0323]avgvar[x][y]=vartab[clip3(0,15,(sumofhv[x>>2][y>>2]*64)>>(3+bitdepthy))][0324]分类滤波器索引阵列filtidx[x][y]和转置索引阵列transposeidx[x][y](其中,x=y=0..ctbsizey–1)的推导过程如下:[0325]transposetable[]={0,1,0,2,2,3,1,3}[0326]transposeidx[x][y]=transposetable[dir1[x][y]*2+(dir2[x][y]>>1)][0327]filtidx[x][y]=avgvar[x][y][0328]当dirs[x][y]不等于0时,filtidx[x][y]修改如下:[0329]filtidx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirs[x][y])*5。[0330]1.4色度样本的编码树块滤波过程[0331]该过程的输入为:[0332]在自适应环路滤波处理之前的重建色度图像样本阵列recpicture,[0333]滤波重建色度图像样本阵列alfpicture,[0334]表示当前色度编码树块的左上样本相对于当前图像的左上样本的色度位置(xctbc,yctbc)。[0335]该过程的输出是修改后的滤波重建色度图像样本阵列alfpicture。[0336]当前色度编码树块的大小ctbsizec的推导过程如下:[0337]ctbsizec=ctbsizey/subwidthc[0338]对于滤波重建色度样本alfpicture[x][y]的推导,如下所示对当前色度编码树块recpicture[x][y]内的每个重建色度样本进行滤波,其中,x、y=0..ctbsizec–1:[0339]给定色度样本的阵列recpicture内的每个对应的色度样本(x,y)的位置(hx,vy)的推导过程如下:[0340]hx=clip3(0,pic_width_in_luma_samples/subwidthc–1,xctbc+x)[0341]vy=clip3(0,pic_height_in_luma_samples/subheightc–1,yctbc+y)[0342]变量sum的推导过程如下:[0343]sum=alfcoeffc[0]*(recpicture[hx,vy+2]+recpicture[hx,vy–2])+[0344]alfcoeffc[1]*(recpicture[hx+1,vy+1]+recpicture[hx–1,vy–1])+[0345]alfcoeffc[2]*(recpicture[hx,vy+1]+recpicture[hx,vy–1])+[0346]alfcoeffc[3]*(recpicture[hx–1,vy+1]+recpicture[hx+1,vy–1])+[0347]alfcoeffc[4]*(recpicture[hx+2,vy]+recpicture[hx–2,vy])+[0348]alfcoeffc[5]*(recpicture[hx+1,vy]+recpicture[hx–1,vy])+[0349]alfcoeffc[6]*recpicture[hx,vy][0350]sum=(sum+64)>>7[0351]修改后的滤波重建色度图像样本alfpicture[xctbc+x][yctbc+y]的推导过程如下:[0352]alfpicture[xctbc+x][yctbc+y]=clip3(0,(1<<bitdepthc)–1,sum)。[0353]vtm‑3.0的三个级联环路滤波器(deblocking、sao、alf)的当前行缓冲区要求对于亮度分量推导为11.25行,对于色度分量推导为6.25行(见图8)。众所周知,适应硬件芯片上增加的行缓冲区要求是值得关注的,因为行缓冲区需要存储在片上存储器上,从而需要增加硬件芯片面积。因此,本发明解决了降低环路滤波级中vtm‑3.0的行缓冲区要求的问题。该特定发明主要涉及“alf块分类”的行缓冲区缩减和“alf滤波”方法。[0354]为了降低vtm‑3.0的行缓冲区要求,[0355]alf块分类用于确保alf块分类不需要在虚拟边界(virtualboundary,vb)上方或下方的任何像素。虚拟边界(virtualboundary,vb)是向上移动了n个像素的水平ctu边界。对于每个ctu,sao和alf可以在下ctu到来之前处理vb上方的样本,但是不能在下ctu到来之前处理vb下方的样本,这主要是由于垂直去块滤波的延迟造成的。[0356]vtm‑3.0中,n可以为大于等于4的正整数值。具体地,本发明在n=4和n=6时提供了更多细节。[0357]为了降低行缓冲区要求,本发明主要使用alf块分类的方式,以再次使用原来用于块分类的样本子集。[0358]本发明还对alf块分类窗口大小(p×p)不是n的整数倍的情况使用网格移位方法。在当前的vtm‑3.0中,对4×4块执行alf块分类。因此,在vtm‑3.0中,p设置为4。网格移位方法主要将alf块分类窗口移动整数个样本,使得给定的p×p块分类窗口永远不会跨越虚拟边界。因此,对于图像中的初始样本(相当于“p‑n”),alf块分类仅通过使用2×2块窗口完成,或者前“p‑n”行重复使用紧接着(“p‑n”+1)开始的4×4块的块分类决策。[0359]alf滤波用于通过使用填补或通过将未使用的滤波器系数添加到中心系数中,将失真版本的滤波器用于亮度分量和色度分量。这样,alf滤波不需要附加的行缓冲区。[0360]本发明的核心是使用原始alf块分类的修改版本,使得块分类不需要任何附加的行缓冲区。此外,alf滤波也被修改成不需要任何附加的缓冲区。块分类的修改版本只使用原始块分类中原来使用的样本子集。[0361]如图8所示,当虚拟边界考虑为ctu边界上方的4行时,vvc的亮度行缓冲区要求为11.25亮度行。[0362]行缓冲区要求的说明如下:由于决策和滤波需要第一ctu的行k、l、m、m和下ctu的行o、p……,因此不能执行与ctu边缘重叠的水平边缘的去块。因此,与ctu边界重叠的水平边缘的去块被延迟,直到下ctu到来。因此,作为重建亮度样本的行k、l、m、n必须存储在行缓冲区(4行)中。然后对行a至行j进行sao滤波。由于去块不会改变行k的样本,所以行j可以进行sao滤波。对于行k的sao滤波,边缘偏移分类决策仅存储在行缓冲区(其为0.25亮度行)中。alf滤波只能对行a‑f进行滤波。如图1所示,对每个4×4块进行alf分类。每个4×4块分类需要一个大小为8×8的活动窗口,而活动窗口又需要一个9×9窗口来计算一维拉普拉斯,以确定梯度。[0363]因此,对于行g、h、i、j的块分类,需要在虚拟边界下方的sao滤波样本。样本分类还需要行d、e、f的sao滤波样本。行g的alf滤波还需要上述三个sao滤波行d、e、f。因此,总的行缓冲区要求如下:[0364]·行k‑n(水平df像素):4[0365]·行d‑j(sao滤波像素):7[0366]·行j与行k之间的sao边缘偏移分类器值:0.25[0367]·因此,亮度行的总数为7+4+0.25=11.25[0368]虚拟边界为4行时的修改后的块分类[0369]图9示出了如何对虚拟边界上方和下方的行执行alf块分类。[0370]解决方案一(非对称截断alf块分类)[0371]如图9a和图18a所示,对于紧邻虚拟边界上方的4×4块,仅使用块边界上方的样本进行块分类。[0372]如图9b所示,对于紧邻虚拟边界下方的4×4块的块分类,仅使用虚拟边界下方的样本。[0373]在图9a、图22a中(当4×4块在vb上方时的情况),以行g开始的块的块分类使用行d、e、f、f、h、j、j。由于属于行j的样本的梯度计算需要行j下方的另外一行,因此将行j填补到行k。[0374]此外,修改所使用的活动计算为:avgvar[x][y]=vartab[clip3(0,15,(sumofhv[x>>2][y>>2]*ac)>>(3+bitdepthy))],其中,虚拟边界附近的块的ac值为96,其它块的ac值为64。[0375]或者,对于以行g开始的块的块分类,仅使用行d、e、f、g。行i可以进一步用于分类,但是vtm3.0中alf块分类的当前实现方式为每2行一组计算梯度,这使得将行i包括在分类中变得麻烦。[0376]第二种解决方案是使用简单的填补。将行j填补到行k、l、m,然后从d开始直至m的行就可以用于进行块分类。[0377]在图9b、图22b和图18b中(当4×4块在vb下方时的情况),以行k开始的块的块分类使用行k、l、m、n、o、p、q。由于属于行k的样本的梯度计算需要行k上方的另外一行,因此将行k填补到行j。此外,修改所使用的活动计算为:avgvar[x][y]=vartab[clip3(0,15,(sumofhv[x>>2][y>>2]*ac)>>(3+bitdepthy))],其中,虚拟边界附近的块的ac值为96,其它块的ac值为64。[0378]或者,对于以行k开始的块的块分类,仅使用行m、n、o、p、q。行l可以进一步用于分类,但是vtm3.0中alf块分类的当前实现方式为每组2行计算梯度,这使得将行l包括在分类中变得麻烦。[0379]第二种解决方案是使用简单的填补。将行k填补到行j、i、h,然后从h到q的行可用于块分类。[0380]解决方案二(对称截断alf块分类)[0381]如图10所示,对称截断alf块分类仅使用内部4个样本(a、b、c、d)来分类给定块。在图10a中,对于以行g开始的块,在梯度计算中仅使用属于行g和行i的样本(样本a、b、c、d)。在这种情况下,不需要附加的填补。类似地,在图10b中,对于以行k开始的块,在梯度计算中仅使用属于行l和m的样本(样本a、b、c、d)。在这种情况下,也不需要附加的填补。该解决方案具有使用对称块形状计算梯度的优点,该对称块形状可以有利于主观图像质量,特别是当图像内容在给定局部窗口内频繁变化时。此外,该解决方案在计算梯度时也比较简单,因为它只使用4个样本(a、b、c、d)。[0382]图11示出了一种特殊情况,即alf块分类可以使用额外的两行行缓冲区来存储sao滤波样本。在这种情况下,alf块分类可以使用分别从行g和行k开始的块的虚拟边界上方和下方的另外两行。[0383]虚拟边界为4行时的修改后的alf滤波[0384]图12示出了修改后的alf滤波以避免alf亮度行缓冲区。对于行h、j、i(在虚拟边界上方)和行k、l、m(在虚拟边界下方)的滤波,使用失真版本的7×7亮度滤波器。[0385]提出了两个解决方案。滤波器以对称方式丢弃位于虚拟边界上方和下方的系数。例如,对于行m的滤波,系数c0位于虚拟边界上方,对于行h的滤波,反之亦然。因此,在这种情况下,对于解决方案1,丢弃的系数c0被添加到接近垂直的相邻系数。因此,2′=c2+c0。在解决方案2中,丢弃的系数被添加到中心系数中,得到c12′=c12+2*c0。[0386]类似地,对于行l和行i的滤波,修改后的系数值用于解决方案1:[0387]c5′=c5+c1[0388]c6′=c6+c2+c0[0389]c7′=c7+c3[0390]对于解决方案2:c12′=c12+2*c0+2*c1+2*c2+2*c3[0391]类似地,对于行j和行k的滤波,修改后的系数值用于解决方案1:[0392]c10′=c10+c4+c8[0393]c11′=c11+c5+c7+c1+c3[0394]c12′=c12+2*c6+2*c2+2*c0[0395]该解决方案也可以被视为如图21所示的对称填补。如图21a所示,对于行m的滤波,行k填补到行j,行j填补到行k。[0396]如图21b所示,对于行l的滤波,行k填补到行j和行i。类似地,对于行i的滤波,行j填补到行k和行l。[0397]如图21c所示,对于行k的滤波,行k填补到行j、i和h。类似地,对于行j的滤波,行j填补到行k、l和m。[0398]对色度alf滤波也执行上述类似的过程。[0399]解决方案1的语法规范更改如下:[0400]2.1概述[0401]该过程的输入是自适应环路滤波器recpicturel、recpicturecb和recpicturecr之前的重建图像样本阵列。[0402]该过程的输出是自适应环路滤波器alfpicturel、alfpicturecb和alfpicturecr之后的修改后的图像样本阵列。[0403]自适应环路滤波器alfpicturel、alfpicturecb和alfpicturecr之后的修改后的重建图像样本阵列中的样本值初始设置为分别等于自适应环路滤波器recpicturel、recpicturecb和recpicturecr之前的重建图像样本阵列中的样本值。[0404]当tile_group_alf_enabled_flag的值等于1时,对于具有亮度编码树块位置(rx,ry)的每个编码树单元(其中,rx=0..picwidthinctbs–1和ry=0..picheightinctbs–1),以下适用:[0405]当alf_ctb_flag[0][rx][ry]的值等于1时,调用2.2小节所述的亮度样本的编码树块滤波过程,其中,recpicturel、alfpicturel和设置为(rx<<ctblog2sizey,ry<<ctblog2sizey)的亮度编码树块位置(xctb,yctb)作为输入,输出为修改后的滤波图像alfpicturel。[0406]当alf_ctb_flag[1][rx][ry]的值等于1时,调用2.4小节所述的色度样本编码树块滤波过程,其中,recpicture设置为recpicturecb,alfpicture设置为等于alfpicturecb,色度编码树块位置(xctbc,yctbc)设置为(rx<<(ctblog2sizey–1),ry<<(ctblog2sizey–1))作为输入,输出为修改后的滤波图像alfpicturecb。[0407]当alf_ctb_flag[2][rx][ry]的值等于1时,调用2.4小节所述的色度样本的编码树块滤波过程,其中,recpicture设置为recpicturecr,alfpicture设置为等于alfpicturecr,色度编码树块位置(xctbc,yctbc)设置为等于(rx<<(ctblog2sizey–1),ry<<(ctblog2sizey–1))作为输入,输出为修改后的滤波图像alfpicturecr。[0408]2.2亮度样本编码树块滤波过程[0409]该过程的输入为:[0410]在自适应环路滤波处理之前的重建亮度图像样本阵列recpicturel,[0411]滤波重建亮度图像样本阵列alfpicturel,[0412]表示当前亮度编码树块的左上样本相对于当前图像的左上样本的亮度位置(xctb,yctb)。[0413]该过程的输出是修改后的滤波重建亮度图像样本阵列alfpicturel。[0414]调用2.3小节的滤波器索引的推导过程,其中,位置(xctb,yctb)和重建亮度图像样本阵列recpicturel作为输入,filtidx[x][y]和transposeidx[x][y]作为输出,其中,x、y=0..ctbsizey–1。[0415]对于滤波重建亮度样本alfpicturel[x][y]的推导,如下所示对当前亮度编码树块recpicturel[x][y]内部的每个重建亮度样本进行滤波,其中,x、y=0..ctbsizey–1:[0416]其中,filtidx[x][y]指定的滤波器对应的亮度滤波器系数f[j]的阵列(其中,j=0..12)的推导过程如下:[0417]f[j]=alfcoeffl[filtidx[x][y]][j][0418]亮度滤波器系数filtercoeff根据transposeidx[x][y]推导,如下所示:[0419]如果transposeindex[x][y]==1,[0420]则filtercoeff[]={f[9],f[4],f[10],f[8],f[1],f[5],f[11],f[7],f[3],f[0],f[2],f[6],f[12]}[0421]否则,如果transposeindex[x][y]==2,[0422]则filtercoeff[]={f[0],f[3],f[2],f[1],f[8],f[7],f[6],f[5],f[4],f[9],f[10],f[11],f[12]}[0423]否则,如果transposeindex[x][y]==3,[0424]则filtercoeff[]={f[9],f[8],f[10],f[4],f[3],f[7],f[11],f[5],f[1],f[0],f[2],f[6],f[12]}[0425]否则,[0426]filtercoeff[]={f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8],f[9],f[10],f[11],f[12]}[0427]给定亮度样本的阵列recpicture内的每个对应的亮度样本(x,y)的位置(hx,vy)的推导过程如下:[0428]hx=clip3(0,pic_width_in_luma_samples–1,xctb+x)[0429]vy=y[0430]滤波器输入样本位置偏移r=0...6根据亮度样本位置y推导,如下表2‑2a所示[0431]表2‑2a‑根据亮度样本位置y的滤波器输入样本位置偏移r=0..6的规范[0432][0433][0434]变量sum的推导过程如下:[0435]sum=filtercoeff[0]*(recpicturel[hx,vy+r5]+recpicturel[hx,vy–r6])+[0436]filtercoeff[1]*(recpicturel[hx+1,vy+r3]+recpicturel[hx–1,vy–r4])+[0437]filtercoeff[2]*(recpicturel[hx,vy+r3]+recpicturel[hx,vy–r4])+[0438]filtercoeff[3]*(recpicturel[hx–1,vy+r3]+recpicturel[hx+1,vy–r4])+[0439]filtercoeff[4]*(recpicturel[hx+2,vy+r1]+recpicturel[hx–2,vy–r2])+[0440]filtercoeff[5]*(recpicturel[hx+1,vy+r1]+recpicturel[hx–1,vy–r2])+[0441]filtercoeff[6]*(recpicturel[hx,vy+r1]+recpicturel[hx,vy–r2])+(8‑1155)[0442]filtercoeff[7]*(recpicturel[hx–1,vy+r1]+recpicturel[hx+1,vy–r2])+[0443]filtercoeff[8]*(recpicturel[hx–2,vy+r1]+recpicturel[hx+2,vy–r2])+[0444]filtercoeff[9]*(recpicturel[hx+3,vy]+recpicturel[hx–3,vy])+[0445]filtercoeff[10]*(recpicturel[hx+2,vy]+recpicturel[hx–2,vy])+[0446]filtercoeff[11]*(recpicturel[hx+1,vy]+recpicturel[hx–1,vy])+[0447]filtercoeff[12]*recpicturel[hx,vy][0448]sum=(sum+64)>>7[0449]修改后的滤波重建亮度图像样本alfpicturel[xctb+x][yctb+y]的推导过程如下:[0450]alfpicturel[xctb+x][yctb+y]=clip3(0,(1<<bitdepthy)–1,sum)。[0451]2.3亮度样本的alf转置和滤波器索引的推导过程[0452]该过程的输入为:[0453]表示当前亮度编码树块的左上样本相对于当前图像的左上样本的亮度位置(xctb,yctb),[0454]在自适应环路滤波处理之前的重建亮度图像样本阵列recpicturel。[0455]该过程的输出为:[0456]分类滤波器索引阵列filtidx[x][y],其中,x、y=0..ctbsizey–1,[0457]转置索引阵列transposeidx[x][y],其中,x、y=0..ctbsizey–1。[0458]给定亮度样本的阵列recpicture内的每个对应的亮度样本(x,y)的位置(hx,vy)的推导过程如下:[0459]hx=clip3(0,pic_width_in_luma_samples–1,x)[0460]如果yctb+ctbsizey>=pic_height_in_luma_samples,[0461]则vy=clip3(0,pic_height_in_luma_samples–1,y)[0462]否则,如果y<(ctbsizey–4),[0463]vy=clip3(0,yctb+ctbsizey–5,yctb+y)[0464]否则,[0465]vy=clip3(yctb+ctbsizey–4,pic_height_in_luma_samples–1,yctb+y)[0466]分类滤波器索引阵列filtidx和转置索引阵列transposidx通过以下顺序步骤推导:[0467]变量filth[x][y]、filtv[x][y]、filtd0[x][y]和filtd1[x][y](其中,x、y=–2..ctbsizey+1)的推导过程如下:[0468]如果x和y均为偶数,或x和y均为奇数,则以下适用:[0469]filth[x][y]=abs((recpicture[hxctb+x,vyctb+y]<<1)–recpicture[hxctb+x–1,vyctb+y]–recpicture[hxctb+x+1,vyctb+y])[0470]filtv[x][y]=abs((recpicture[hxctb+x,vyctb+y]<<1)–recpicture[hxctb+x,vyctb+y–1]–recpicture[hxctb+x,vyctb+y+1])[0471]filtd0[x][y]=abs((recpicture[hxctb+x,vyctb+y]<<1)–recpicture[hxctb+x–1,vyctb+y–1]–recpicture[hxctb+x+1,vyctb+y+1])[0472]filtd1[x][y]=abs((recpicture[hxctb+x,vyctb+y]<<1)–recpicture[hxctb+x+1,vyctb+y–1]–recpicture[hxctb+x–1,vyctb+y+1])[0473]否则,filth[x][y]、filtv[x][y]、filtd0[x][y]和filtd1[x][y]设置为0。[0474]变量vartemph1[x][y]、vartempv1[x][y]、vartempd01[x][y]、vartempd11[x][y]和vartemp[x][y](其中,x、y=0..(ctbsizey–1)>>2)的推导过程如下:[0475]如果(y<<2)==ctbsizey–8且yctb+ctbsizey<pic_height_in_luma_samples–1,则[0476]sumh[x][y]=σiσjfilth[(x<<2)+i][(y<<2)+j],其中,i=–2..5且j=–2..3[0477]sumv[x][y]=σiσjfiltv[(x<<2)+i][(y<<2)+j],其中,i=–2..5且j=–2..3[0478]sumd0[x][y]=σiσjfiltd0[(x<<2)+i][(y<<2)+j],其中,i=–2..5且j=–2..3[0479]sumd1[x][y]=σiσjfiltd1[(x<<2)+i][(y<<2)+j],其中,i=–2..5且j=–2..3[0480]变量ac设置为96[0481]否则,如果(y<<2)==ctbsizey‑4且yctb+ctbsizey<pic_height_in_luma_samples–1,则[0482]sumh[x][y]=σiσjfilth[(x<<2)+i][(y<<2)+j],其中,i=–2..5且j=0..5[0483]sumv[x][y]=σiσjfiltv[(x<<2)+i][(y<<2)+j],其中,i=–2..5且j=0..5[0484]sumd0[x][y]=σiσjfiltd0[(x<<2)+i][(y<<2)+j],其中,i=–2..5且j=0..5[0485]sumd1[x][y]=σiσjfiltd1[(x<<2)+i][(y<<2)+j],其中,i=–2..5且j=0..5[0486]变量ac设置为96[0487]否则[0488]sumh[x][y]=σiσjfilth[(x<<2)+i][(y<<2)+j],其中,i、j=–2..5[0489]sumv[x][y]=σiσjfiltv[(x<<2)+i][(y<<2)+j],其中,i、j=–2..5[0490]sumd0[x][y]=σiσjfiltd0[(x<<2)+i][(y<<2)+j],其中,i、j=–2..5[0491]sumd1[x][y]=σiσjfiltd1[(x<<2)+i][(y<<2)+j],其中,i、j=–2..5[0492]sumofhv[x][y]=sumh[x][y]+sumv[x][y](8‑1168)[0493]变量ac设置为64[0494]变量dir1[x][y]、dir2[x][y]和dirs[x][y](其中,x、y=0..ctbsizey–1)的推导过程如下:[0495]变量hv1、hv0和dirhv的推导过程如下:[0496]如果sumv[x>>2][y>>2]大于sumh[x>>2][y>>2],则以下适用:[0497]hv1=sumv[x>>2][y>>2][0498]hv0=sumh[x>>2][y>>2][0499]dirhv=1;[0500]否则,以下适用:[0501]hv1=sumh[x>>2][y>>2][0502]hv0=sumv[x>>2][y>>2][0503]dirhv=3。[0504]变量d1、d0和dird的推导过程如下:[0505]如果sumd0[x>>2][y>>2]大于sumd1[x>>2][y>>2],则以下适用:[0506]d1=sumd0[x>>2][y>>2][0507]d0=sumd1[x>>2][y>>2][0508]dird=0;[0509]否则,以下适用:[0510]d1=sumd1[x>>2][y>>2][0511]d0=sumd0[x>>2][y>>2][0512]dird=2。[0513]变量hvd1、hvd0的推导过程如下:[0514]hvd1=(d1*hv0>hv1*d0)?d1:hv1[0515]hvd0=(d1*hv0>hv1*d0)?d0:hv0。[0516]变量dirs[x][y]、dir1[x][y]和dir2[x][y]的推导过程如下:[0517]dir1[x][y]=(d1*hv0>hv1*d0)?dird:dirhv[0518]dir2[x][y]=(d1*hv0>hv1*d0)?dirhv:dird[0519]dirs[x][y]=(hvd1>2*hvd0)?1:((hvd1*2>9*hvd0)?2:0)。[0520]变量avgvar[x][y](其中,x、y=0..ctbsizey–1)的推导过程如下:[0521]vartab[]={0,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4}[0522]avgvar[x][y]=vartab[clip3(0,15,(sumofhv[x>>2][y>>2]*ac)>>(3+bitdepthy))]。[0523]分类滤波器索引阵列filtidx[x][y]和转置索引阵列transposeidx[x][y](其中,x=y=0..ctbsizey–1)的ctbsizey–1推导过程如下:[0524]transposetable[]={0,1,0,2,2,3,1,3}[0525]transposeidx[x][y]=transposetable[dir1[x][y]*2+(dir2[x][y]>>1)][0526]filtidx[x][y]=avgvar[x][y][0527]当dirs[x][y]不等于0时,filtidx[x][y]修改如下:[0528]filtidx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirs[x][y])*5。[0529]2.4色度样本的编码树块滤波过程[0530]该过程的输入为:[0531]在自适应环路滤波处理之前的重建色度图像样本阵列recpicture,[0532]滤波重建色度图像样本阵列alfpicture,[0533]表示当前色度编码树块的左上样本相对于当前图像的左上样本的色度位置(xctbc,yctbc)。[0534]该过程的输出是修改后的滤波重建色度图像样本阵列alfpicture。[0535]当前色度编码树块的大小ctbsizec的推导过程如下:[0536]ctbsizec=ctbsizey/subwidthc.[0537]对于滤波重建色度样本alfpicture[x][y]的推导,如下所示对当前色度编码树块recpicture[x][y]内的每个重建色度样本进行滤波,其中,x、y=0..ctbsizec–1:[0538]给定色度样本的阵列recpicture内的每个对应的色度样本(x,y)的位置(hx,vy)的推导过程如下:[0539]hx=clip3(0,pic_width_in_luma_samples/subwidthc–1,xctbc+x)[0540]vy=y[0541]滤波器输入样本位置偏移r=0...4根据色度样本位置y推导,如下表2.4所示[0542]表2.4b‑根据色度样本位置y的滤波器输入样本位置偏移r=0..4的规范[0543]yr1r2r3r4y==ctbsizec–2(或)ctbsizec–30000y==ctbsizec–1(或)ctbsizec–41111y==ctbsizey–7(或)ctbsizey–21122yctb+y==(pic_height_in_luma_samples/subheightc–1)‑10102yctb+y==(pic_height_in_luma_samples/subheightc–1)‑21112yctb+y==01020yctb+y==11121其它情况1122[0544]变量sum的推导过程如下:[0545]sum=alfcoeffc[0]*(recpicture[hx,vy+r3]+recpicture[hx,vy–r4])+[0546]alfcoeffc[1]*(recpicture[hx+1,vy+r1]+recpicture[hx–1,vy–r2])+[0547]alfcoeffc[2]*(recpicture[hx,vy+r1]+recpicture[hx,vy–r2])+[0548]alfcoeffc[3]*(recpicture[hx–1,vy+r1]+recpicture[hx+1,vy–r2])+[0549]alfcoeffc[4]*(recpicture[hx+2,vy]+recpicture[hx–2,vy])+[0550]alfcoeffc[5]*(recpicture[hx+1,vy]+recpicture[hx–1,vy])+[0551]alfcoeffc[6]*recpicture[hx,vy][0552]sum=(sum+64)>>7[0553]修改后的滤波重建色度图像样本alfpicture[xctbc+x][yctbc+y]的推导过程如下:[0554]alfpicture[xctbc+x][yctbc+y]=clip3(0,(1<<bitdepthc)–1,sum)。[0555]对于解决方案2:[0556]c12′=c12+2*c0+2*c1+2*c2+2*c3+2*c4+2*c5+2*c6+2*c7+2*c8[0557]图12c中示出的附加的解决方案(解决方案3)也可以用于对行h、j、i(在虚拟边界上方)和行k、l、m(在虚拟边界下方)进行滤波。根据给定块的主边缘方向,对alf滤波器进行了改进。[0558]必须注意的是,可以使用任何能够推导给定块的主边缘方向的算法,并且不限于下面解释的算法。给定块的主边缘方向可以使用为给定块计算的梯度值来计算,即,使用在alf块分类期间计算的梯度值gv,ghgd1和gd2和方向性值d。如果方向性值d为0、1、2,则如图12c的子图c所示,选择解决方案1(垂直地增加系数)。如果方向性值d为3或4(块的方向性具有强对角边缘(strongdiagonaledge)时的情况),则检查以下其它条件:gd1大于或等于gd2。如果为真,则135度梯度被选择为主边缘方向,因此,如图12c的子图b所示,修改后的滤波的执行过程如下:[0559]对于行m和行h,c3′=c3+c0[0560]对于行l和行i,c6′=c6+c1[0561]c7′=c7+c2[0562]c8′=c3+c8+c0[0563]对于行j和行k:[0564]c9′=c9+c8+c3+c0[0565]c10′=c10+c7+c2[0566]c11′=c1+c6+c11+c4[0567]c12′=c12+2*c5[0568]另一方面,如果gd2大于gd1,则如图12c的子图a所示,修改后的滤波的执行过程如下:[0569]对于行m和行h,c1′=c1+c0[0570]对于行l和行i,c4′=c1+c4+c0[0571]c5′=c5+c2[0572]c6′=c6+c3[0573]对于行j和行k:[0574]c9′=c9+c4+c1+c0[0575]c10′=c10+c5+c2[0576]c11′=c8+c7+c6+c3+c11[0577]c12′=c12+2*c7[0578]必须注意的是,如果给定的滤波器如表1中给出的那样进行变换,则仍然可以使用上述所有解决方案。上述解决方案中的方程是在没有应用变换的情况下给出的。对于变换后的滤波器,可以分别根据方程17、18、19替换方程中的系数。[0579]在图19a和19b中所示的附加的解决方案(解决方案4)中,当填补系数的绝对和大于非填补系数的绝对和的阈值(threshold,t)倍时,不进行滤波。例如,对于[0580]行m和行h,如果(2*abs(c0)>(t*(2*(abs(c1)+abs(c2)+abs(c3)+abs(c4)+abs(c5)+abs(c6)+abs(c7)+abs(c8)+abs(c9)+abs(c10)+abs(c11))+abs(c12))),则不进行alf滤波。[0581]类似地,对于行l和行i,如果(2*(abs(c0)+abs(c1)+abs(c2)+abs(c3))>(t*(2*(abs(c4)+abs(c5)+abs(c6)+abs(c7)+abs(c8)+abs(c9)+abs(c10)+abs(c11))+abs(c12))),则不对行l和行i进行alf滤波。[0582]类似地,对于行j和行k,如果(2*(abs(c0)+abs(c1)+abs(c2)+abs(c3)+abs(c4)+abs(c5)+abs(c6)+abs(c7)+abs(c8))>(t*(2*(abs(c9)+abs(c10)+abs(c11))+abs(c12))),则不对行j和行k进行alf滤波。[0583]其中,t通常是一个阈值,可以取0和1之间的小数值。例如,t值可以为0.5、0.6或0.7。[0584]类似地,对于色度,如图20所示,对于行n和k,如果(2*abs(c0)>(t*(2*(abs(c1)+abs(c2)+abs(c3)+abs(c4)+abs(c5))+abs(c6)))),则不对行n和行k进行alf滤波。[0585]对于行m和行l,如果((2*(abs(c0)+abs(c1)+abs(c2)+abs(c3))>(t*(2*(abs(c4)+abs(c5))+abs(c6)))),则不对行m和行l进行alf滤波。[0586]函数abs(x)定义如下:[0587][0588]根据替代解决方案,如果滤波操作是基于所确定的几何变换和滤波像素样本到虚拟边界的水平接近度,则不进行该滤波操作。换句话说,假设待滤波像素样本为虚拟边界上方或下方的n个样本(到水平边界的水平距离为n),且确定的几何滤波器变换为transformation_x。如果满足以下条件,不对像素样本进行滤波操作:[0589]·如果n小于预定阈值,即thr,且[0590]·如果transformation_x在码流中预定或表示的变换集中。[0591]根据一个特定示例,thr等于1(表示位于虚拟边界上方和下方一行的样本行)。根据另一个示例,变换集包括无变换、对角变换、垂直翻转变换、旋转变换中的至少一个。根据另一个示例,thr等于1,变换集包括无变换、对角变换、垂直翻转变换、旋转变换中的至少一个。在另一个示例中,变换集包括对角变换和旋转变换。[0592]需要说明的是,变换集是所有可能的滤波器变换的子集。根据文档jvet1001_v7《通用视频编码(草案3)》文档(可公开访问http://phenix.it‑sudparis.eu/jvet/),有4种可能的筛选器变换。在本文档中,滤波器变换根据小节“8.5.4.3alf转置和亮度样本的滤波器索引”确定,并且所确定的变换由变量transposeidx表示。其中,transposeidx可以假设的值为0、1、2、3。[0593]根据一个示例,如果transposeidx被确定为等于预定值,则不对像素样本进行滤波操作。需要说明的是,预定值的集合包括0和3之间的至少一个值。还需要说明的是,预定值的集合不包括所有可能值(0、1、2和3中的全部)。[0594]在另一个示例中,如果待滤波像素是虚拟边界上方或下方的一个样本,且所确定的滤波变换在预定值的集合中,则不进行滤波操作。[0595]色度样本的行缓冲区要求:[0596]图13示出了色度样本的行缓冲区要求。由于去块只使用2个样本,且最多修改1个样本,所以色度alf行缓冲区要求下降到6.25行。由于没有对色度样本执行显式块分类,因此只需要在虚拟边界(virtualboundary,vb)处修改滤波。图14示出了通过使用填补(解决方案1)或通过将丢弃的系数添加到中心系数(解决方案2)生成的失真版本的滤波器。[0597]虚拟边界为6行时的修改后的块分类[0598]图15示出了当去块效应滤波器使用6行行缓冲区时,alf的行缓冲区要求。因此,虚拟边界是在ctu边界上方的6行。在这种情况下,总环路滤波器行缓冲区要求增加到15.25行。[0599]为了降低行缓冲区要求,图16示出了一个解决方案,其解释如下:[0600]从c行开始的4×4块的块分类是通过将行h填补到行i来实现的,以确保块分类不需要虚拟边界下方的任何行。[0601]行g、h重复使用块c、d、e、f的块分类决策。行i、j重复使用行k、l、m、n的块分类决策,或行i、j、k、l可以看作一个4×4块段,对这4行进行分类,然后m、n行重复使用块k、l、m、n的块分类决策。[0602]图17使用网格移位方法,其中,对顶部图像边界处的前两行和底部图像边界处的后两行分别进行分类和滤波,因此alf分类和滤波网格在y轴上向下移2个样本。此解决方案的优点是给定的4×4块从不与虚拟边界重叠或跨越虚拟边界。通常,当虚拟边界大小不是4的倍数(alf块分类大小)时,alf滤波网格可以使用以下公式进行移位:[0603]((虚拟边界大小)/4)–4。对于实际的滤波本身,可以使用图12a、12b和12c中解释的失真版本的滤波器。[0604]尽管本发明的实施例已经主要根据视频译码进行描述,但需要说明的是,译码系统10、编码器20和解码器30(以及相应地系统10)的实施例以及本文描述的其它实施例也可以用于静止图像处理或译码,即独立于视频译码中任何前面或连续的图像的处理或译码。通常,在图像处理译码限于单个图像17的情况下,只有帧间预测单元244(编码器)和344(解码器)可能不可用。视频编码器20和视频解码器30的所有其它功能(也称为工具或技术)可以同样用于静止图像处理,例如残差计算204/304,变换206,量化208,反量化210/310,(逆)变换212/312,分割262/362,帧内预测254/354和/或环路滤波220、320,熵译码270和熵解码304。[0605]编码器20和解码器30等的实施例,以及本文描述的与编码器20和解码器30等有关的功能可以以硬件、软件、固件或其任何组合来实现。如果以软件实现,则功能可以存储在计算机可读介质中或作为一个或多个指令或代码通过通信介质传输,并由基于硬件的处理单元执行。计算机可读介质可以包括计算机可读存储介质,对应数据存储介质等有形介质,或包括便于例如根据通信协议将计算机程序从一个地方传输到另一个地方的任何介质的通信介质。在这种方式中,计算机可读介质通常可以对应(1)非瞬时性的有形计算机可读存储介质或(2)通信介质,例如信号或载波。数据存储介质可以是任何可用介质,可由一个或多个计算机或一个或多个处理器访问以检索用于实现本发明所描述的技术的指令、代码和/或数据结构。计算机程序产品可以包括计算机可读介质。[0606]编码器20和/或解码器30可以包括处理电路46,用于执行本文描述的各种操作和方法。处理电路46可以包括硬件和软件。硬件可以包括模拟电路或数字电路,或模拟电路和数字电路两者。数字电路可以包括专用集成电路(application‑specificintegratedcircuit,asic)、现场可编程阵列(field‑programmablearray,fpga)、数字信号处理器(digitalsignalprocessor,dsp)或通用处理器等组件。特别地,本文中提到的滤波器可以硬件或软件或硬件和软件的组合实现。在一个实施例中,处理电路包括一个或多个处理器以及与一个或多个处理器连接的非瞬时性存储器。非瞬时性存储器可以携带可执行程序代码,当该可执行程序代码由一个或多个处理器执行时,使编码器20和/或解码器30执行本文描述的操作或方法。[0607]作为示例而非限制,此类计算机可读存储介质可以包括ram、rom、eeprom、cd‑rom或其它光盘存储器、磁盘存储器或其它磁性存储设备、闪存,或可以用于存储指令或数据结构形式的所需程序代码并且可由计算机访问的任何其它介质。此外,任何连接都可以称为计算机可读介质。例如,如果指令是从网站、服务器或其它远程源通过同轴电缆、光纤电缆、双绞线、数字用户线(digitalsubscriberline,dsl)或无线技术(例如红外、无线电、微波等)发送的,则介质的定义包括同轴电缆、光纤电缆、双绞线、dsl或无线技术(例如红外、无线电和微波等)。但是,应理解,计算机可读存储介质和数据存储介质不包括连接、载波、信号或其它瞬时介质,而是指非瞬时有形存储介质。本文使用的磁盘和光盘包括压缩光盘(compactdisc,cd)、激光光盘、光盘、数字通用光盘(digitalversatiledisc,dvd)、软盘和蓝光光盘,盘通常磁性地再现数据,而光盘则用激光光学地再现数据。上述的组合也应包括在计算机可读介质的范围内。[0608]指令可以由一个或多个处理器执行,例如一个或多个数字信号处理器(digitalsignalprocessor,dsp)、通用微处理器、专用集成电路(application‑specificintegratedcircuit,asic)、现场可编程逻辑阵列(fieldprogrammablelogicarray,fpga)或其它等效的集成或分立逻辑电路。因此,本文使用的术语“处理器”可以指任何上述结构或任何适合于实现本文所描述的技术的任何其它结构。另外,在一些方面中,本文所描述的功能可以在用于编码和解码的专用硬件和/或软件模块中提供,或者结合在组合编解码器中。另外,这些技术可以在一个或多个电路或逻辑元件中完全实现。[0609]本发明的技术可以在多种设备或装置中实现,包括无线手持电话、集成电路(integratedcircuit,ic)或一组ic(例如芯片组)。本发明描述各种组件、模块或单元以强调用于执行所公开技术的设备的功能方面,但这些组件、模块或单元不一定要求通过不同的硬件单元实现。相反,如上所述,各种单元可以组合在编解码器硬件单元中,或者由包括如上所述的一个或多个处理器的互操作硬件单元的集合结合合适的软件和/或固件来提供。[0610]作为参考,定义如下逻辑运算符:[0611]x&&yx和y的布尔逻辑“与”操作[0612]x||yx和y的布尔逻辑“或”操作[0613]!布尔逻辑“非”[0614]x?y:z如果x为真或不等于0,则等于y的值;否则,等于z的值。[0615]作为参考,定义如下关系运算符:[0616]>大于[0617]>=大于等于[0618]<小于[0619]<=小于等于[0620]==等于[0621]!=不等于[0622]当关系运算符用于一个已赋值为“na”(不适用)的语法元素或变量时,则将值“na”视为该语法元素或变量的唯一值。值“na”不等于任何其它值。[0623]作为参考,定义如下按位操作符:[0624]&按位“与”。对整数参数进行运算时,对整数值的二的补码表示进行运算。当对二进制参数进行运算时,如果它包括的位比另一个参数少,则通过添加等于0的更多有效位来扩展较短的参数。[0625]|按位“或”。对整数参数进行运算时,对整数值的二的补码表示进行运算。当对二进制参数进行运算时,如果它包括的位比另一个参数少,则通过添加等于0的更多有效位来扩展较短的参数。[0626]^按位“异或”。对整数参数进行运算时,对整数值的二的补码表示进行运算。当对二进制参数进行运算时,如果它包括的位比另一个参数少,则通过添加等于0的更多有效位来扩展较短的参数。[0627]x>>y将x的二的补码整数表示算法右移y个二进制数字。该函数仅针对y的非负整数值定义。右移的结果是移到最高有效位(mostsignificantbit,msb)的位的值等于移位操作前的x的msb。[0628]x<<y将x的二的补码整数表示算法左移y个二进制数字。该函数仅针对y的非负整数值定义。左移的结果是移到最低有效位(leastsignificantbit,lsb)的位的值等于0。[0629]总之,本发明提供了一种对图像的样本值进行滤波的方法,所述图像包括第一块和第二块,所述第一块和所述第二块在块边界上相邻,其中,所述图像至少包括排列成n行m列的n×m(n乘m)个样本p(i,j),其中,i是从1至n的行索引,j是从1至m的列索引,其中,i从1至k的样本p(i,j)属于所述第一块,i从k+1至n的样本属于所述第二块,其中,k为小于n的整数,其中,对于小于k的整数q,以及在1至m的范围内的整数j,所述方法包括:通过对整数i在1至k–q–1的范围内的所述样本p(i,j)的值应用滤波器来生成滤波样本值,其中,所述滤波器由滤波器支持样本集合支持,其中,所述滤波器支持样本集合包括所述样本p(i,j)和一个或多个其它样本,其中,所述滤波器支持样本集合不包括行索引i'大于k–q–1的任何样本p(i',j'),和/或通过对整数i在k–q至k的范围内的所述样本p(i,j)的值应用滤波器来生成滤波样本值,其中,所述滤波器由滤波器支持样本集合支持,其中,所述滤波器支持样本集合包括所述样本p(i,j)和一个或多个其它样本,其中,所述滤波器支持样本集合不包括行索引i'小于k–q的任何样本p(i',j')。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1