用于采样自适应偏移代码化和/或信号通知的设备和方法与流程

文档序号:12294394阅读:305来源:国知局
用于采样自适应偏移代码化和/或信号通知的设备和方法与流程
本公开总体涉及视频代码化的领域,并且更特别地,涉及用于采样自适应偏移(SAO)代码化和/或信号通知的系统、设备和方法。相关申请的交叉引用本申请要求于2011年11月8日提交的名为“CodingandSelectionofSAOParameters”的美国临时专利申请No.61/557,409、于2011年11月14日提交的名为“CodingandSelectionofSAOParameters”的美国临时专利申请No.61/559,714、以及于2012年4月25日提交的名为“SAOTypeCodingSyntax”的美国临时专利申请No.61/638,480的权益,其全部内容通过引用合并于此。

背景技术:
视频压缩使用块处理用于很多操作。在块处理中,相邻像素的块被分组为代码化单元,并且压缩操作将该组像素视为一个单元,以利用代码化单元内的相邻像素当中的相关性。基于块的处理通常包括预测代码化和变换代码化。利用量化的变换代码化是一种类型的数据压缩,当从源图片取得的变换块的量化通常丢弃与源图片中的变换块相关联的数据时,该变换代码化通常是“有损耗的”,由此降低其带宽需求,但是通常在从源图片再现原始变换块时还导致质量损失。还被已知为H.264的MPEG-4AVC是在块处理中使用变换代码化的所建立的视频压缩标准。在H.264中,图片被划分为16x16像素的宏块(MB)。每个MB通常被进一步划分为较小块。使用图片内/图片间预测来预测尺寸等于或小于MB的块,并且空间变换以及量化被应用至预测残差。残差的量化后的变换系数通常使用熵代码化方法(例如,可变长度代码化或算术代码化)被编码。上下文自适应二进制算术代码化(CABAC)被引入H.264中,以通过组合自适应二进制算术代码化技术与一组上下文模型,提供基本无损压缩效率。上下文模型选择在CABAC中扮演提供适应度和冗余度缩减的角色。H.264指定在2D块上的两种类型的扫描样式。之字形扫描被用于通过渐进视频压缩技术代码化的图片,并且替代扫描用于利用隔行视频压缩技术代码化的图片。继之以H.264开发的国际视频代码化标准HEVC(高效视频代码化)将变换块尺寸扩展至16x16和32x32像素,以有益于高清晰度(HD)视频代码化。附图说明关于其结构和操作的本公开的详情可以部分地通过研究附图来理解,在附图中,相同附图标记指示相同部件。附图不一定按比例绘制,而是重点在于说明本公开的原理。图1A是可以使用本公开的多种实施例的视频系统;图1B是可以实现本公开的实施例的计算机系统。图2A、图2B、图3A和图3B图示了根据本公开的实施例的特定视频编码原理;图4A和图4B示出了根据本公开的实施例的用于编码器和解码器的可能架构;图5A和图5B进一步图示了根据本公开的实施例的视频代码化原理;图6示出了根据本公开的实施例的边缘偏移/频带偏移(EO/BO)采样自适应偏移(SAO)类型的示例性可变长度代码化(VLC)信号通知;图7示出了根据本公开的实施例的EO/BOSAO类型的示例性CABAC信号通知;图8示出了根据本公开的实施例的示例频带偏移规范;以及图9示出了根据本公开的实施例的用于偏移的代码化的示例架构。

技术实现要素:
从而,在此提供一种通过在采样自适应偏移(SAO)处理中选择、代码化和用信号通知来改进视频质量的系统和方法。在此描述的方法和系统通常关于诸如视频编码器和解码器的视频处理。在第一方面中,提供一种用于解码具有多个图片的视频比特流的方法,比特流由视频代码化系统利用采样自适应偏移(SAO)生成,该方法包括以下步骤:(a)接收视频比特流;(b)从比特流导出处理视频数据;(c)将处理视频数据划分为块,其中,每个所述块等于或小于图片;(d)从视频比特流导出SAO类型,用于每个所述块,其中,SAO类型选自由一个或多个边缘偏移(EO)类型和单个合并频带偏移(BO)类型构成的组;(e)确定与SAO类型相关联的SAO子类,用于每个所述块中的每个所述像素;(f)从视频比特流导出强度偏移,用于与SAO类型相关联的子类;以及(g)将SAO补偿应用至处理视频块中的每个所述像素,其中,SAO补偿基于步骤(f)的强度偏移。在第一方面的实施例中,单个合并BO类型具有由视频代码化系统指定的值的范围。在第一方面的实施例中,由视频编码系统指定的值的范围至少部分地基于视频块中的数据。在第一方面的实施例中,值的范围至少部分地基于比率失真考虑。在第一方面的实施例中,值的范围由起始值和结束值指定。在第一方面的实施例中,值的范围被划分为多个子类。在第一方面的实施例中,值的范围被均匀地划分为多个子类,每个子类具有相等宽度。在第一方面的实施例中,值的范围由起始值、子类的数目、以及子类的宽度指定,其中,子类具有相等宽度。在第一方面的实施例中,一个或多个指定的值用信号通知至解码器。在第一方面的实施例中,一个或多个指定的值被解码器先前知晓。在第一方面的实施例中,子类的数目是4。在第一方面的实施例中,单个合并BO类型覆盖由两个或更多BO类型正常覆盖的值的范围或值的子集。在第一方面的实施例中,如果最后的类超过值的范围中的结束值,则最后的类可以终止于结束值或者绕回到零。在第一方面的实施例中,仅用于具有像素强度值的子类的偏移值被编码。在第一方面的实施例中,仅用于具有像素强度值的子类的偏移值被编码,继之以对转义码或偏移结束码编码,以不再用信号通知偏移值。在第一方面的实施例中,转义码包括大于所使用的最大偏移值的值。在第一方面的实施例中,该方法在具有处理器和耦合至处理器的存储器的计算机上实现,其中,使用所述处理器执行步骤(a)至(g)中的至少一些。在第二方面中,提供一种用于解码具有多个图片的视频比特流的装置,比特流由视频代码化系统利用采样自适应偏移(SAO)生成,该装置包括视频解码器,被配置成:(a)接收视频比特流;(b)从比特流导出处理视频数据;(c)将处理视频数据划分为块,其中,每个所述块都等于或小于图片;(d)从视频比特流导出SAO类型,用于每个所述块,其中,SAO类型选自由一个或多个边缘偏移(EO)类型和单个合并频带偏移(BO)类型构成的组;(e)确定与SAO类型相关联的SAO子类,用于每个所述块中的每个所述像素;(f)从视频比特流导出强度偏移,用于与SAO类型相关联的子类;以及(g)将SAO补偿应用至处理视频块中的每个所述像素,其中,SAO补偿基于步骤(f)的强度偏移。在第二方面的实施例中,该装置包括以下至少之一:集成电路;微型处理器;以及无线通信设备,该无线通信设备包括视频解码器。在第二方面的实施例中,单个合并BO类型具有由视频代码化系统指定的值的范围。在第二方面的实施例中,值的范围由起始值、子类的数目、以及子类的宽度指定,其中,子类具有相同宽度。在第二方面的实施例中,一个或多个指定的值用信号通知至解码器。在第三方面中,提供一种使用采样自适应偏移(SAO)对具有多个图片的视频数据编码的方法,该方法包括以下步骤:(a)将视频数据划分为块,其中,每个所述块等于或小于图片;(b)选择用于视频数据的SAO类型用于每个所述块,其中,SAO类型选自由一个或多个边缘偏移(EO)类型和单个合并频带偏移(BO)类型构成的组;(c)选择与SAO类型相关联的SAO子类,用于每个所述块中的每个所述像素;(d)确定用于视频数据的强度偏移,用于与SAO类型相关联的子类;以及(e)将SAO补偿应用至处理视频块中的每个所述像素,其中,SAO补偿基于步骤(d)的强度偏移。在第三方面的实施例中,该方法在具有处理器和耦合至处理器的存储器的计算机上实现,其中,使用处理器执行步骤(a)至(e)中的至少一些。具体实施方式在本公开中,术语“代码化”是指在编码器处发生的编码或者在解码器处发生的解码。类似地,术语代码化器是指编码器、解码器或组合的编码器/解码器(CODEC)。术语代码化器、编码器、解码器和CODEC均是指被指定用于符合本公开的视频数据的代码化(编码和/或解码)的特定机器。本论述开始于数字图像压缩领域中已知的一些术语和技术的非常简短概述。该概述不意味着在任何详细方面教导已知技术。本领域技术人员知晓如何发现教科书中和相关标准中的更多详情。现在将描述可以使用本公开的实施例的视频系统的实例。将理解,被描述为图中的功能框的元件可以被实现为硬件、软件、或其组合。而且,本公开的实施例还可以在其他系统上被采用,诸如,在个人计算机、智能手机或平板计算机上。参考图1A,通常标记为10的视频系统可以包括有线电视网络的头端100。头端100可以被配置成将视频内容传递到邻居129、130和131。头端100可以在头端的层级内操作,层级较高的头端通常具有更大功能。头端100可以可通信地链接至卫星接收圆盘112,并且从其接收用于非本地编程的视频信号。头端100还可以可通信地链接至将本地编程传递至头端100的本地站点114。头端100可以包括解码从卫星接收圆盘112接收到的视频信号的解码器104、从本地站点114接收本地编程(localprogramming)的离播接收器106、在头端100的多种组件当中路由数据业务的切换器102、对视频信号编码用于传递到客户的编码器116、调制信号用于传递到客户的调制器118、以及将多种信号组合到单个多信道传输的组合器120。头端100还可以可通信地链接至混合光纤电缆(HFC)网络122。HFC网络122可以可通信地链接至多个节点124、126和128。节点124、126和128中的每个都可以通过同轴电缆链接至邻居129、130和131之一,并且将有线电视信号传递至邻居。更详细地示出图1A的邻居130之一。邻居130可以包括多个住处,包括图1A中所示的住宅132。在住宅132里可以是可通信地链接至视频显示器136的机顶盒134。机顶盒134可以包括解码器138和解码器140。解码器138和解码器140可以可通信地链接至用户接口142和大容量存储设备144。用户接口142可以可通信地链接至视频显示器136。在操作期间,头端100可以从卫星接收圆盘112和本地站点114接收本地和非本地编程视频信号。非本地编程视频信号可以以数字视频流的形式被接收,而本地编程视频信号可以被接收为模拟视频流。在一些实施例中,本地编程还可以被接收为数字视频流。数字视频流可以由解码器104解码并且响应于客户请求被发送至切换器102。头端100还可以包括可通信地链接至大容量存储设备110的服务器108。大容量存储设备110可以存储多种类型的视频内容,包括视频点播(VOD),服务器108可以重新检索视频内容并且将其提供给切换器102。切换器102可以将本地编程直接路由至调制器118,调制器118调制本地编程,并且将非本地编程(包括任何VOD)路由至编码器116。编码器116可以数字编码非本地编程。然后,编码后的非本地编程可以被发射至调制器118。组合器120可以被配置成接收调制后的模拟视频数据和调制后的数字视频数据,组合视频数据,并且经由多个射频(RF)信道将其发送至HFC网络122。HFC网络122可以将组合的视频数据发射至节点124、126和128,节点124、126和128可以将数据重新发射至它们相应的邻居129、130和131。住宅132可以在机顶盒134处,更特别地在第一解码器138和第二解码器140处,接收该视频数据。第一和第二解码器138和140可以解码视频数据的数字部分,并且将解码后的数据提供给用户接口142,用户接口142然后可以将解码后的数据提供给视频显示器136。图1A(以及在此描述的所有其他步骤和功能)的编码器116和解码器138和140可以被实现为包括计算机可读指令的计算机代码,计算机可读指令存储在诸如存储器或另一种类型的存储设备的计算机可读存储设备上。计算机代码可以由诸如专用集成电路(ASIC)或其他类型的电路的处理器在计算机系统上被执行。例如,用于实现编码器116的计算机代码可以在驻留在头端100中的计算机系统(诸如,服务器)上被执行。另一方面,用于解码器138和140的计算机代码可以在构成一种类型的计算机系统的机顶盒134上被执行。代码可以作为由为源代码、目标代码、可执行代码或其他格式的程序构成的软件程序存在。应该想到,用于图1A中所示的多种组件的计算机代码可以驻留在被确定为期望或有利的系统10中的任何位置或其他位置(诸如,在云网络中)。而且,计算机代码可以位于一个或多个组件中,只要指令可以由一个或多个组件有效地执行。图1B示出可以在其上执行用于编码器116和解码器138和140的计算机代码的计算机系统的实例。通常标记为400的计算机系统包括处理器401、或处理电路,其可以实现或实行执行在此描述的一些或所有方法、功能和其他步骤的软件指令。例如,来自处理器401的命令和数据可以在通信总线403上通信。计算机系统400还可以包括计算机可读存储设备402,诸如,随机存取存储器(RAM),其中,用于处理器401的软件和数据可以驻留于运行时间期间。存储设备402还可以包括非易失性数据储存器。计算机系统400可以包括用于连接至网络的网络接口404。其他已知电子组件可以被添加或替换在计算机系统400中描述的组件。计算机系统400可以驻留在头端100中并且执行编码器116,并且还可以在机顶盒134中被具体化,以执行解码器138和140。另外,计算机系统400可以驻留在除了头端100和机顶盒134之外的位置,并且可以被最小化,以便被集成到智能电话或平板计算机中。视频编码系统通过去除视频数据中的冗余,例如,通过去除可以被丢弃而没有不利地影响再现保真度的那些元素,来实现压缩。因为视频信号发生在时间和空间中,所以大多数视频编码系统利用这些信号中存在的时间和空间冗余两者。通常,在连续帧之间存在高时间相关性。在用于相互接近的像素的空间域中也一样。从而,高压缩增益通过小心地利用这些空间-时间相关性被实现。现在将提供本公开的实施例中的视频数据如何由编码器116和解码器138和140编码和解码的高级说明。在本实施例中,编码器和解码器根据高效视频代码化(HEVC)方法操作。HEVC是基于块的混合空间和时间预测代码化方法。在HEVC中,输入图片首先被划分为被称为LCU(最大代码化单元)或CTU(代码化树单元)的空间块,如图2A中所示。不像基本代码化单元是16x16像素的宏块的其他视频代码化标准,在HEVC中,LCU可以与128x128像素一样大。LCU可以被划分为被称为CU(代码化单元)的四个正方形块,它们是LCU的尺寸的四分之一。每个CU都可以进一步被划分为四个较小CU,它们是原始CU的尺寸的四分之一。可以重复划分处理,直到满足特定准则为止。图3A示出被划分为CU的LCU的实例。特定LCU如何被划分为CU可以由四叉树表示。在四叉树的每个节点处,如果节点被进一步划分为子节点,则标记被设置为“1”。另外,标记不被设置为“0”。例如,图3A的LCU划分可以由图3B的四叉树表示。这些“划分标记”可以与视频比特流中的其他标记联合代码化,其他标记包括跳过模式标记、合并模式标记、以及预测单元(PU)模式标记等。在图3B的四叉树的情况下,划分标记10100可以与其他标记一起被代码化为开销。用于给定CU的语法信息可以被递归地限定,并且可以取决于CU是否被划分为子CU。不被划分的CU(例如,与终端相对应的CU、或在给定四叉树中的“叶子”节点)可以包括一个或多个预测单元(PU)。通常,PU表示所有或一部分对应的CU,并且包括用于检索用于PU的参考采样的数据,以用于执行用于CU的预测的目的。从而,在四叉树的每个叶子处,2Nx2N的最终CU可以拥有四个可能样式(NxN、Nx2N、2NxN和2Nx2N)之一,如图2B中所示。虽然被示出用于2Nx2NCU,但是可以使用具有不同尺寸和对应样式(例如,正方形或矩形)的其他PU。CU可以在空间上或时间上被预测地代码化。如果CU在帧内模式下被代码化,则CU的每个PU都可以具有其自己的空间预测方向。如果CU在帧间模式下被代码化,则CU的每个PU都可以具有其自己的运动矢量和关联参考图片。限定运动矢量的数据可以描述例如运动矢量的水平分量、运动矢量的垂直分量、用于运动矢量的分辨率(例如,四分之一像素精度或八分之一像素精度)、运动矢量所指向的参考帧、和/或用于运动矢量的参考列表(例如,列表0或列表1)。用于限定CU的一个或多个PU的CU的数据还可以描述例如CU到一个或多个PU的划分。划分模式可以在CU是未被代码化、被帧内预测模式编码、还是被帧间预测模式编码之间不同。通常,在帧内预测编码中,在帧中的相邻块之间存在高等级空间相关性。从而,可以从邻近编码和重构的块预测块,使发生帧内预测。在一些实施例中,预测可以通过位于当前块之上并且在当前块左边的先前编码采样的加权平均形成。编码器可以选择最小化原始和预测之间的差或成本的模式,并且在控制数据中用信号通知该选择。通常,在帧间预测编码中,视频序列具有帧之间的高时间相关性,使得能够通过已知为参考帧的先前代码化帧中的区域准确地描述当前帧中的块。帧间预测利用先前编码和重构的参考帧,以使用基于块的运动估计和补偿技术来改进预测。在产生预测数据和残差数据的帧内预测或帧间预测编码之后,并且在产生变换系数的任何变换(诸如,在H.264/AVC中使用的4x4或8x8整数变换或离散余弦变换(DCT))之后,可以执行变换系数的量化。量化通常是指变换系数被量化以可能减小用于表示系数的数据的量的处理,例如,通过将高精度变换系数转换为有限数目的可能值。以下将更详细地论述这些步骤。每个CU还可以通过块变换操作的应用被划分为变换单元(TU)。块变换操作倾向于解相关块内的像素,并且将块能量压缩到低阶系数的变换块。在一些实施例中,可以应用8x8或4x4的一个变换。在其他实施例中,不同尺寸的块变换集合可以应用至CU,如图5A中所示,其中,左边块是划分为PU的CU,并且右边块是变换单元(TU)的关联集合。通过被称为RQT的单独四叉树描述CU内的每个块变换的尺寸和位置。图5B示出图5A的实例中的用于CU的TU的四叉树表示。在该实例中,11000被代码化并且发射为开销的一部分。任何给定CU的TU和PU都可以用于不同目的。TU通常被用于变换、量化和代码化操作,而PU通常被用于空间和时间预测。在用于给定CU的PU的数目和TU的数目之间不一定存在直接关系。视频块可以包括像素域中的像素数据的块、或者变换域中的变换系数的块,例如,变换到用于给定视频块的残差数据的以下应用,所述变换诸如离散余弦变换(DCT)、整数变换、小波变换、或概念类似变换,其中,残差数据表示用于块的视频数据和被生成用于块的预测数据之间的像素差。在一些情况下,视频块可以包括变换域中的量化后的变换系数的块,其中,变换到用于给定视频块的残差数据的以下应用,还量化所得到的变换系数。在视频编码中,量化是引入损失的步骤,使得可以建立比特率和重构质量之间的平衡。以下将进一步论述这些步骤。块划分在基于块的视频代码化技术中用作重要目的。使用较小块对视频数据进行代码化可以得到数据的更好预测,用于包括高级详情的视频帧的位置,并且因此可以减小表示为残差数据的所得到误差(例如,预测数据与源视频数据的偏离)。通常,预测通过对多种尺寸的采样块之间的相关性建模,利用视频序列中的空间或时间冗余,使得仅需要对实际和预测信号之间的小差编码。从已被编码的采样创建用于当前块的预测。虽然可能减少残差数据,然而这样的技术要求附加语法信息来指示较小块相对于视频帧如何被划分,并且可能导致增加的代码化视频比特率。从而,在一些技术中,块划分可能取决于剩余数据的理想减少与由于附加语法信息导致的代码化视频数据的比特率的增加的平衡。通常,块及其多种划分(例如,子块)可以被认为是视频块。另外,片段(slice)可以被认为是多个视频块(例如,宏块或代码化单元)、和/或子块(宏块的划分、或子代码化单元)。每个片段都可以是视频帧的独立可解码单元。可替换地,帧本身可以是可解码单元,或者帧的其他部分可以被限定为可解码单元。而且,还被称为一组图片的GOP可以被限定为可解码单元。根据本公开的实施例,编码器116(图1A)可以由多个功能模块构成,如图4A中所示。这些模块可以被实现为硬件、软件、或两者的任何组合。给出当前PU,x,可以首先通过空间预测或时间预测获得预测PU,x’。可以分别通过空间预测模块129或时间预测模块130执行该空间或时间预测。存在空间预测模块129可以每PU执行的多个可能空间预测方向,包括水平、垂直、45度对角、135度对角、DC、平面等。包括亮度帧内模式,被称为IntraFromLuma的附加模式可以被用于色度帧内预测模式。语法指示每PU的空间预测方向。编码器116(图1A)可以通过运动估计操作执行时间预测。特别是,时间预测模块130(图4A)可以通过参考图片搜索用于当前PU的最佳匹配预测。最佳匹配预测可以由运动矢量(MV)和关联参考图片(refIdx)描述。通常,B图片中的PU可以具有多达两个MV。MV和refIdx两者在比特流中可以是语法的一部分。然后,从当前PU减去预测PU,得到残差PU,e。然后可以一次一个变换单元(TU)地由变换模块117变换残差PU,e,得到变换域E中的残差PU。为了实现该任务,变换模块117可以使用例如正方形或非正方形块变换。返回参考图4A,然后可以通过量化器模块118量化变换系数E,将高精度变换系数转换为有限数目的可能值。量化处理可以减小与一些或所有系数相关联的比特深度。例如,在量化期间,n比特值可以被四舍五入为m比特值,其中,n大于m。在一些实施例中,外部边界条件被用于产生修改后的一个或多个变换系数。例如,较低范围或值可以在确定变换系数是否被给予非零值或仅被归零中使用。如应该想到的,量化是有损操作,并且由量化导致的损失通常不能被恢复。然后,由熵代码化模块120熵代码化量化系数,得到最终压缩比特。以下将更详细地论述由熵代码化模块120执行的特定步骤。为了便于时间和空间预测,编码器116还可以采取量化变换系数E,并且通过去量化器模块122反量化它们,得到反量化变换系数E’。然后,由逆变换模块124对反量化的变换系数进行逆变换,得到重构的残差PU,e’。然后,在空间或时间上将重构的残差PU,e’添加到对应的预测x’,以形成重构PU,x”。将仍然参考图4A,可以首先对重构PU,x”执行解块滤波(DBF)操作,以减少区块效应。在用于解码后图片的解块滤波处理完成之后,可以有条件地执行采样自适应偏移(SAO)处理,其补偿重构像素和原始像素之间的像素值偏移。在一些实施例中,DBF操作和SAO操作两者通过自适应环路滤波器功能实现,这可以通过重构PU由环路滤波器模块126有条件地执行。在一些实施例中,自适应环路滤波器功能最小化输入图片和输出图片之间的代码化失真。在一些实施例中,环路滤波器模块126在图片间预测循环期间操作。如果重构图片是参考图片,则它们可以被存储在参考缓冲器128中用于未来的时间预测。HEVC指定通过首先应用的去块滤波器(DBF)和之后应用的采样自适应偏移(SAO)滤波器顺序应用的两个环路滤波器。DBF类似于由H.264/MPEG-4AVC使用的滤波器,但是是用于并行处理的更简单设计和更好支持。在HEVC中,DBF仅应用至8x8采样栅格,同时通过H.264/MPEG-4AVC,DBF应用至4x4采样栅格。DBF使用8x8采样栅格,这是由于因为DBF不再导致与其他操作的级联交互,其不造成明显恶化并且显著改进并行处理。另一个改变在于,HEVC仅允许0到2三个DBF强度。HEVC还要求DBF首先将用于垂直边缘的水平滤波应用至图片,并且仅在这样做之后,其将用于水平边缘的垂直滤波应用至图片。这允许多个并行线程将被用于DBF。SAO滤波器处理在DBF之后被应用,并且被作出以允许用于通过使用例如包括基于由编码器作出的直方图分析的一些参数的查找表,更好地重构原始信号幅度。SAO滤波器具有两种基本类型,它们是边缘偏移(EO)类型和频带偏移(BO)类型。一种SAO类型可以每代码化树块(CTB)被应用。边缘偏移(EO)类型具有与沿着四个可能方向(例如,水平、垂直、135度、以及45度)的处理相对应的四个子类型。对于给定EO子类型,边缘偏移(EO)处理通过使用四个不同梯度样式之一,比较像素的值与其两个邻居来操作。偏移被应用至四个梯度样式中的每个中的像素。对于不在梯度样式之一中的像素值,不应用偏移。频带偏移(BO)处理直接基于被划分为32个频带的采样幅度。偏移被应用至32个频带中的16个中的像素,其中,一组16个频带对应于BO子类型。SAO滤波处理被设计成,通过将偏移添加到采样值,与原始信号相比,减少失真。这可以增加边缘清晰度,并且减少振铃和冲击伪像。以下将参考图6至图9论述关于SAO处理的进一步详情。在本公开的实施例中,帧内图片(诸如,I图片)和帧间图片(诸如,P图片或B图片)由编码器116(图1A)支持。可以在不参考其他图片的情况下,对帧内图片进行代码化。因此,空间预测可以用于帧内图片内的CU/PU。帧内图片提供解码可以开始的可能点。另一方面,帧间图片通常目标在于高压缩。帧间图片支持帧内预测和帧间预测两者。帧间图片中的CU/PU在空间上或时间上被预测地代码化。时间参考是先前代码化的帧内或帧间图片。现在将更详细地描述根据实施例的熵代码化模块120(图4A)的操作。熵代码化模块120采取从量化器模块118接收到的量化系数矩阵,并且使用其生成表示所有量化系数的符号的符号矩阵并且生成重要性地图。重要性地图可以是每个元素指定非零量化系数在量化系数矩阵内的位置的矩阵。特别是,给定量化后的2D变换矩阵,如果位置(y,x)处的量化系数的值是非零,则其可以被认为显著,并且“1”被指配用于关联重要性地图中的位置(y,x)。另外,“0”被指配给重要性地图中的位置(y,x)。一旦熵代码化模块120创建重要性地图,则其可以对重要性地图进行代码化。在一个实施例中,这通过使用基于上下文的自适应二进制算术代码化(CABAC)技术实现。在这种情况下,熵代码化模块120沿着扫描线扫描重要性地图,并且对于重要性地图中的每个条目,代码化模块选择上下文模型用于该条目。熵代码化模块120然后基于所选上下文模型对条目进行代码化。即,每个条目都基于正被使用的上下文模型(数学概率模型)被值配一概率。概率被累积,直到整个重要性地图已经被编码为止。由熵代码化模块120输出的值以及熵编码符号、重要性地图和非零系数可以由编码器116(图1A)被插入到比特流中。比特流可以通过HFC网络122被发送到解码器138和140。应该注意,根据规定的代码化标准,上述预测、变换和量化可以被执行用于视频数据的任何块,例如,CU的PU和/或TU,或者宏块。当解码器138和140(图1A)接收比特流时,它们执行例如图4B中所示的功能。解码器145的熵解码块146可以解码符号值、重要性地图和非零系数,以重新创建量化和变换后的系数。在解码重要性地图时,熵解码模块146可以执行结合熵代码化模块120描述的过程的反过程——沿着由扫描线构成的扫描样式解码重要性地图。熵解码模块146然后可以给去量化器模块147提供系数,其对系数的矩阵进行反量化,得到E’。去量化器模块147可以给逆变换模块149提供反量化后的系数。逆变换模块149可以对系数执行逆变换操作,得到e’。可以以结合图4A描述的方式应用过滤和空间预测。采样自适应偏移(SAO)在SAO处理中,偏移被添加至每个像素,以相对于原始像素减少重构像素的失真。在一个实施例中,对于亮度或色度分量中的分隔,编码器将像素分类到六个可能类型之一(类型和子类型两者在此被统称为类型):四个边缘偏移(EO)类型E0、E1、E2、E3和两个频带偏移(BO)类型B0、B1。对于EO类型,基于沿着EO类型方向的本地行为,像素被进一步子分类为五个可能子类之一。对于BO类型,基于强度,像素被进一步子分类到十六个可能子类之一。在一些实施例中,对于SAO类型内的像素的给定子类,应用相同偏移。例如,如果用于子类i的偏移是oi,则与输入pi相对应的SAO输出将为pi+oi。编码器通常选择每子类的SAO类型,以最小化成本函数。例如,如果用于给定类型t和偏移集合ot,i的失真是Dt,i并且对应的比特率是Rt,i,则成本函数可以是Jt,i=Dt,i+λ*Rt,i,其中,λ是加权因数。编码器可以将每分隔的SAO类型和每子类的对应偏移用信号通知至解码器,并且解码器可以执行用于SAO类型的分类,并且将每子类的偏移应用至每个像素。SAO类型可以每颜色分量被用信号通知,或者给定类型可以被用信号通知并且被用于多于一个颜色分量。在一些实施例中,编码器还可以不使用或关掉SAO,并且这还可以用信号通知至解码器。SAO类型的代码化对于SAO类型的代码化,通常存在两种代码化方法:高效(HE)和低复杂性(LC)。在LC中,可变长度码字(VLC)或二元码字被指配给SAO类型;而在HE中,通常被指配给该类型的二元码字按照基于上下文的自适应二进制算术代码化(CABAC)。对于HE情况,编码器可以使用一元代码用信号通知SAO类型,例如(0和1可以互换)如表1中所示:表1SAO类型代码关闭0E010E1110E21110E311110B0111110B11111110在表1中,当SAO类型被关闭时,不应用SAO,并且对应的码字是0。其他码字对应于其他EO和BO类型。注意,码字内的单元或数字对于LC可以称为“比特”并且对于HE称为“二进制文件(bin)”。术语的不同是在HE方法中将CABAC应用到码字的结果。如在此使用的,“单元”包括码字中的二进制文件和比特两者。注意,对于表1的代码指配,可以去除代码中的最后一个0,以用于代码111111的SAOB1,这是因为已知其是最后可能SAO类型。另外,因为用于BO类型的更长码字,频带偏移类型(B0和B1)在最佳类型的比率失真(RD)选择中被不公平地偏置。该偏置可以是具有比另一种偏移类型更长的码字长度的特定偏移类型的结果。从而,在一些实施例中,在表2中示出用于用信号通知SAO类型的替代代码值配:表2SAO类型代码关闭0E01000E11001E21010E31011B0110B1111在表2中,如果码字的二进制化中的第一个二进制数字或二进制文件是0,则SAO类型被关闭,并且不应用SAO。另外,第一个二进制文件是1并且EO或BO被用信号通知。如果第二个二进制文件是0,则EO类型被用信号通知;另外,第二个二进制文件是1,并且BO类型被用信号通知。对于EO的情况,两个以上二进制文件被用信号通知,以指示四个EO类型之一,并且对于BO的情况,一个以上二进制文件被用信号通知,以指示两个BO类型之一。该代码指配给予用于不同SAO类型的更公平比特加权,这是因为EO和BO类型内的码字长度是均匀的,意味着代码化方案在不同SAO类型之间不被偏置。而且,该码字二进制化允许用于关闭、EO和BO类型的更好概率建模。对于低复杂性(LC)情况,编码器可以使用指数-Goloumb代码用信号通知SAO类型,例如(0和1可以互换)如表3中所示:表3SAO类型代码关闭1E0010E1011E200100E300101B000110B100111在表4中示出将相同码字长度给予所有EO类型(E0、E1、E2、E3)的替代代码:表4SAO类型代码关闭1E000100E100101E200110E300111B0010B1011注意,用于EO类型(或BO类型)的码字可以被互换。还可以通过使用如表5中所示的关于HE情况的类似代码,实现比表4中所示的更有效代码。表5SAO类型代码关闭1E00000E10001E20010E30011B0010B1011可替换地,在一些实施例中,HE中的相同代码可以用于LC。例如,除了每个码字中的第一比特已经被互换之外,表5类似于表2。在表5中,如果第一比特是1,则SAO类型是关闭(Off),并且不应用SAO。另外,第一比特是0并且EO或BO被用信号通知。如果第二比特是0,则EO类型被用信号通知;另外,第二比特是1并且BO类型被用信号通知。对于EO的情况,两个以上比特被用信号通知,以指示四个EO类型之一,并且对于BO的情况,一个以上比特被用信号通知,以指示两个BO类型之一。除了在HE和LC中使用相同码字之外,可以使用CABAC(如在HE中)或不使用CABAC(如在LC中)处理码字中的一些二进制数字。在一些实施例中,一个比特可以用于用信号通知EO和BO类型之间的差(例如,比特=0用信号通知EO类型,并且比特=1用信号通知BO类型),如在表2-5中的实例中所示。在一些实施例中,存在更多或更少数目的EO和/或BO类型,如以上表中所示。例如,对于四个EO类型和一个BO类型的情况,对于LC,这可以如图6中所示被用信号通知。图6图示了在用信号通知SAO不被关闭之后的比特的序列。该比特的序列可以被用信号通知用于每个颜色分量,或者类型可以被用于多于一个颜色分量(例如,亮度或第一色度或第二色度分量)。在图6中,如果第一比特是1,则BO被用信号通知。另外,第一比特是0,并且使用两个附加比特用信号通知四个EO类型之一。当信号通知用于颜色分量时,对于三个颜色分量中的每个可以重复(可能地)该信号通知。可替换地,相同参数可以用于多于一个颜色分量。在还有的其他实施例中,可以使用sao_band标记(例如,1比特)用信号通知EO/BO类型,其中,当sao_band等于1时,SAO类型是BO,并且当sao_band等于0时,SAO类型是EO。可以使用sao_edge_type(例如,2比特)用信号通知SAOEO类型。对于CABAC代码化,还可以使用其本身专用的上下文(例如,每颜色分量),使用sao_band标记用信号通知EO/BO类型,并且可以通过一个上下文(例如,每颜色分量)使用一元二进制化对EO类型进行代码化。该实例在图7中示出。在一些实施例中,可以使用VLC(LC)和CABAC(HE)指定用于sao_band和sao_edge_type的语法,如表6和表7中所示:表6表7如在表6和表7中呈现的,语法元素sao_band[cIdc][rx][ry]等于1指定了频带偏移(BO)采样自适应偏移处理在位置rx和ry处被应用至当前代码化树块,以用于颜色分量cIdx。相反,语法元素sao_band[cIdc][rx][ry]等于0指定了边缘偏移(EO)采样自适应偏移处理在位置rx和ry处被应用至当前代码化树块,以用于颜色分量cIdx。在一些实施例中,sao_edge_idx[cIdc][rx][ry]指示在位置rx和ry处的当前SAO单元的四个EO方向之一(子类型或分类),以用于颜色分量cIdx。在表6和表7中,u()表示一元二进制化处理,并且ae()表示CABAC算术代码化处理。在一些实施例中,VLC(LC)和CABAC(HE)的组合可以用于对语法元素进行代码化。在一些实施例中,诸如sao_band和sao_edge_idx的SAO参数可以从相邻CTUSAO参数推导,诸如,从当前CTU之上或左侧的邻居。标记可以被用信号通知,以指示从特定邻居推导参数。在一些实施例中,可以使用CABAC对sao_band和sao_edge_idx进行代码化并用信号通知到解码器。如在此公开的,可以使用用于提供用于更有效信号通知的编码和解码SAO类型的码字,实现对于SAO参数的代码化的改进,例如,参见表2至表5。附加改进可以包括:可以更好地匹配一些偏移分布的偏移的量化、如何指定单个频带偏移类型、如何有效地编码当存在多个空子类时有益的偏移、以及偏移的比率失真优化。偏移的量化例如,如上所述,SAO类型/参数的选择允许偏移被应用至每个像素,以便改进重构图像的质量。当前,每子类的偏移被确定为每像素的平均失真。即,每子类的总失真d除以分类中的像素的数目n,或d/n。使用给定比特深度精度指定失真,并且偏移值d/n被取整,例如,偏移值o=round(d/n)。偏移值o然后可以被修整到最小和最大值,例如,[-min,max]。在一些实施例中,修改可以包括对偏移值o删余,而不是取整,例如,o=int(d/n),其中,o保留整数值。在其他实施例中,修改可以包括量化偏移值o。通常,可以使用非线性量化,所述非线性量化在存在较大偏移出现的地方附近分布偏移值(x)。在一个实施例中,在确定偏移等级时可以使用线性量化,例如,x=round(o/比例),其中,比例(scale)是控制量化的等级的参数,并且round()是到最接近整数的取整操作。偏移等级x可以被用信号通知至解码器,并且解码器可以执行反按比例缩放,以生成重构偏移值o’=比例*x。如果比例大于1,则对于给定数目的重构等级,与当比例小于或等于1时相比,可以生成重构偏移值的更大范围。可替换地,这可以允许使用更小数目的偏移等级覆盖给定范围的偏移,并且要求更少比特来对偏移进行编码。如想到的,量化是有损操作,导致精度降低。虽然偏移的精度被减小,但是偏移值的量化可能与数据的统计信息和范围更匹配。例如,对于代码化大量损耗的更大代码化QP值(例如,低比特率),大于1的比例值可能是有益的,这是因为可以使用更大偏移值来校正像素值中的更大误差。在一些实施例中,实现偏移的有效量化的另一种方式是使用x=round(d/(n*比例))。在此,用于量化的比例值可以用信号通知至解码器,并且可以例如按分类、类型、分隔、LCU、片段(或其他单元)、图片、图片组、或序列确定用于量化的比例值。最大比例值(或偏移)可以被发送或者与编码器和解码器一致,以用于代码化效率目的和/或误差复原目的。而且,标记可以用于指示在某个等级(例如,LCU、片段、或图片)处,比例值是否为1,并且如果不为1,则其可以被发射。如以上解释的,偏移的量化可以更好地匹配偏移数据的分布并且改进比率失真(RD)性能。在偏移的线性量化中,诸如如上所述,可以通过x=round(d/n*比例)计算偏移等级,其中,d是子类中的总失真,n是子类中的像素的数目,并且比例是控制量化的步长的参数。偏移等级x可以在编码器处被修整,并且重构偏移值在编码器和解码器两者处被计算为o’=x*比例。对于偏移的非均匀或非线性量化,量化偏移值之间的间隔不需要是均匀的。例如,可以通过x=f(d,n,比例,...)计算偏移等级,其中,f()是某函数,并且重构偏移值可以通过o’=g(x,比例,...)计算,其中,g()是某函数。特别地,使x’=round(d/(n*比例))是输入偏移值。当比例=1时,如果bi<=x’<=Bi,则重构偏移等级x可以被设置为x=i,其中,Imin<=i<=Imax,并且重构偏移值o’可以被确定为o’=g(x=i)=vi。值bi和Bi表示用于重构偏移等级i的下量化边界和上量化边界,并且vi表示重构偏移值。在bi、Bi之间和vi之间的间隔不需要是均匀的。在一个实例中,当Imax=-Imin=6时,当x’>=0时,b0=0,B0=0,b1=1,B1=1,b2=2,B2=2,b3=3,B3=5,b4=6,B4=11,b5=12,Bs=23,b6=24,B6=255,并且当x’<0时,b-6=-255,B-6=-24,b-5=-23,B-5=-12,b-4=-11,B-4=-6,b-3=-5,B-3=-3,b-2=-2,B-2=-2,b-1=-1,B-1=-1。对于该情况,当i=0时,重构偏移值幅度可以被设置为vo=0,并且当i>0时,vi=2∧(i-1)。对于偏移等级的负值,i重构偏移值具有与等级|i|相对应的相同幅度,并且重构偏移值的符号与偏移等级i的符号相同。表8和表9图示了用于该实例的重构偏移等级i、量化边界bi和Bi、以及重构偏移值vi。表8i0123456bi012361224Bi01251123255vi012481632表9i-6-5-4-3-2-1bi-255-23-11-5-2-1Bi-24-12-6-3-2-1vi-32-16-8-4-2-1因为以上段落提供一实例,将想到存在可以选择的量化参数值bi、Bi和vi的组合。对于给定数目的偏移等级,非均匀分布可以提供更好比率失真折衷以用于偏移的范围。不同值可以用于不同序列、质量等级、比特率等。而且,量化参数对于多种SAO类型可以不同。例如,对于EO类型,可以使用均匀量化,而对于BO类型,非均匀量化可能是合适的。另外,不同量化值可以被选择用于偏移值的不同范围。例如,小(幅度)偏移值可以使用具有给定比例值的均匀量化,而较大偏移值可以使用非均匀量化或具有另一个比例值的均匀量化。B0和B1的合并在一些实施例中,SAO使用两种固定频带类型,B0和B1,覆盖整个强度范围,其中每个频带进一步将相应的强度范围划分为16个相等子类。对于每个子类,可以用信号通知偏移。因为给定图片的统计信息可能不精确地落入两个现有频带类型B0和B1之一,所以可以优选组合或合并频带。在一些实施例中,可以使用一个频带类型,其中,可以指定应用偏移的值的范围,并且例如使用均匀子分隔可以指定用于该范围的子类的数目。在图8中图示了使用单个频带类型的这样的分隔的实例。在一些实施例中,可以基于数据并且基于比率失真考虑确定应用偏移的值的范围。偏移通常可以被应用至可以减小失真的值。在一些实施例中,诸如,当存在单个频带类型和没有其他SAO类型时,不需要执行SAO选择类型。在这样的情况下,在没有与SAO选择相关联的附加步骤的情况下,使用单个频带类型。如图8中所示,频带的开始由bs指定,并且可以使用宽度ws的Ns个子类。图8示出一个实施例,其中,相等宽度(ws)的四个(Ns=4)彼此子类相邻,其中,第一子类开始于bs。在该情况下,四个偏移可以用信号通知至解码器以用于四个子类。在一个实例中,如果最后子类超过最大强度范围,则最后子类可以结束于最大值或者绕回到零。可替换地,bs、Ns和/或ws的值的固定集合可以被指定并且与编码器和/或解码器一致。在这样的实施例中,仅一些参数(例如,未指定的值)可能需要从编码器发射到解码器。例如,这些参数可以用信号通知至解码器,并且可以按例如每分隔、LCU、片段(或其他单元)、图片、图片组、序列等被确定。在其他实施例中,通过重复用于指定单个频带的一些处理,可以指定多于一个频带。在一些实施例中,bs从编码器被发射至解码器。在一些实施例中,Ns从编码器被发射至解码器。在一些实施例中,ws从编码器被发射至解码器。偏移的代码化在一些实施例中,对于现有B0和B1频带偏移类型和/或对于单个合并频带偏移类型,可能存在在相应的强度范围内没有像素的很多子类(例如,还被已知为空子类)。虽然可以通过零偏移对这些子类编码,但是在一些实施例中,仅编码和用信号通知用于具有像素强度值的那些分类的偏移值。可以通过另外编码转义码或偏移结束码来实现具有像素强度值的子类的这样的编码,以不再用信号通知更多偏移值。该转义码可以例如是大于所使用的最大偏移值的值。当存在很多空子类时,该方法可以是有益;然而,在不存在很多空子类的情况下,可以实现仅对具有强度像素值的子类编码并且通过零偏移对子类编码的组合。该方法可以用于用信号通知频带偏移和边缘偏移类型中的偏移。对于边缘偏移类型的情况,空子类对应于不存在具有相应梯度样式的像素的情况。如想到的,在一个实施例中,解码器接收关于频带偏移指定类型的信息,诸如图8中所示。解码器根据它们的强度,将重构像素值分类为子类。当解码器接收到偏移值的序列时,其可以根据子类中存在像素强度,将偏移指配给每个子类。在一些实施例中,不具有像素强度的子类将不具有用信号通知的偏移。图9将其图示为一个实例。图9示出具有八个子类0-7的BO的实例。可以使用先前描述的方法,将八个子类的位置或像素幅度的范围用信号通知至解码器。在该实例中,仅在子类1和6中存在像素强度,而在子类0、2、3、4、5和7中不存在像素强度。后面分类是空的,并且因此不需要用信号通知偏移。可以用信号通知用于子类1的偏移值2和用于子类6的值-1,之后可选转义值不再用信号通知偏移值。如果不用信号通知转义值,则假设解码器在解析偏移值之前,执行将像素分类到子类。在解码器接收到使用诸如先前描述的方法指定BO子类的信息之后,可以对像素强度分类。在对像素强度分类之后,解码器将第一偏移值2指配给第一非空子类1,并且将第二偏移值-1指配给第二非空子类6。偏移的比率失真优化如上所述,如果用于给定类型t的原始和重构数据与分类i的偏移(ot,i)之间的失真是Dt,i,并且要求发射ot,i的对应比特是Rt,i,则对失真和比特两者加权的对应成本函数可以是Jt,i=Dt,i+λ*Rt,i,其中,λ是拉格朗日加权因数。对于给定类型t和子类i,可以选择最佳偏移ot,i最小化成本Jt,i。可以通过计算用于不同可能偏移的成本函数并且选择具有最小成本值Jt,i的偏移来确定用于给定类型和子类的该最佳偏移。在一些实施例中,可以选择初始偏移,并且然后可以搜索该初始偏移周围的偏移的范围用于最小成本。例如,初始偏移可以被设置为仅最小化失真的偏移,并且然后附加偏移可以被检验用于最小化成本。在一些实施例中,被搜索的偏移的范围包括小于初始偏移的那些偏移。应该想到,可以对偏移值或偏移等级作出最小化成本的搜索,并且给定偏移等级对应于偏移值。如上所述,存在四个可能EO类型或分类,并且每个类型五个可能子类。如在此使用的,EO类型或分类是指沿着像素将被处理的方向,并且子类是指根据沿着EO类型或分类方向的梯度样式的像素值的分类。在一些实施例中,EO子类的数目可以扩展至总计九个子类,其中,根据其是小于、等于还是大于沿着由EO类型或分类指定的方向的两个邻近像素来分类每个像素。应该想到,虽然EO子类的数目被描述为包括九个,但是可以使用任何合适的增大数目(例如,大于5)。因为附加数目的子类,所以可能需要将更多偏移发送到解码器。虽然可能需要发送更多偏移以用于附加子类,但是失真的减少可以降低总成本并且改进性能。如在此描述的,用于SAO参数的代码化和选择的一些改进包括用信号通知EO和BO类型、偏移的量化、BO参数的指定、以及偏移的代码化和比率失真优化。提供所公开的实施例的以上说明,以使本领域技术人员能够制造或使用本公开。对这些实施例的多种修改对于本领域技术人员来说将是容易显而易见的,并且在此描述的一般原理可以被应用至其他实施例,而不脱离本公开的精神或范围。从而,将理解,在此呈现的说明书和附图表示本公开的示例性实施例,并且因此表示由本公开广泛预期的主题。进一步理解,本公开的范围完全包括其他实施例,并且本公开的范围从而仅由所附权利要求限制。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1