用于样点自适应补偿的方法及装置、设备和介质与流程

文档序号:25731052发布日期:2021-07-02 21:19阅读:103来源:国知局
用于样点自适应补偿的方法及装置、设备和介质与流程

本公开涉及视频处理技术领域,尤其涉及视频编解码技术领域,具体涉及一种用于样点自适应补偿的方法、装置、电子设备、计算机可读存储介质和计算机程序产品。



背景技术:

相关技术中,视频编码过程可以对视频帧进行预测、变换、量化、反量化、反变换、重建、熵编码等处理,视频解码过程可以对视频帧进行熵解码、反量化、反变换等处理。对于视频帧中像素值剧烈变化的边界区,由于高频分量在编码过程中丢失,会使重建帧在边界区产生波纹现象,这种失真称为振铃效应。

样点自适应补偿算法(sampleadaptiveoffset,简称“sao”)可以对重建帧进行补偿,用以减缓甚至去除重建帧中出现的波纹现象。为了减缓甚至去除重建帧中出现的波纹现象,在编码端可以进行反量化、反变换、重建得到重建帧。可以将重建帧划分为多个图像块,基于重建帧和原始的视频帧可以确定每个图像块分别相应的sao信息。编码端可以对每个图像块的sao信息进行熵编码,通过编码流发送至解码端,以使得解码端可以对接收到的编码流进行熵解码,得到sao信息,从而能够对重建帧中对应的图像块进行补偿,以减缓甚至去除重建帧中出现的波纹现象。

在此部分中描述的方法不一定是之前已经设想到或采用的方法。除非另有指明,否则不应假定此部分中描述的任何方法仅因其包括在此部分中就被认为是现有技术。类似地,除非另有指明,否则此部分中提及的问题不应认为在任何现有技术中已被公认。



技术实现要素:

本公开提供了一种用于样点自适应补偿的方法、装置、电子设备、计算机可读存储介质和计算机程序产品。

根据本公开的一方面,提供了一种用于样点自适应补偿的方法,包括:获取目标图像中每一像素的边带值和残差;从所述目标图像中选取相邻的多个目标像素;以及针对所述相邻的多个目标像素,执行以下边带信息计算操作:获取所述多个目标像素的最大边带值和最小边带值;基于所述最大边带值和最小边带值,确定多个预设边带值;以及对于所述多个预设边带值中的每一个预设边带值,基于所述多个目标像素的边带值和残差,计算针对该预设边带值的边带信息。

根据本公开的另一方面,还提供一种用于样点自适应补偿的装置,包括:获取单元,被配置用于获取目标图像中每一像素的边带值和残差;选取单元,被配置用于从所述目标图像中选取相邻的多个目标像素;以及边带信息计算单元,被配置用于针对所述相邻的多个目标像素,执行以下边带信息计算操作:获取所述多个目标像素的最大边带值和最小边带值;基于所述最大边带值和最小边带值,确定多个预设边带值;以及基于所述多个目标像素的边带值和残差,计算所述多个预设边带值中每一预设边带值的带信息。

根据本公开的另一方面,还提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中所述存储器存储有计算机程序,所述计算机程序在被所述至少一个处理器执行时实现根据上述的方法。

根据本公开的另一方面,还提供一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被处理器执行时实现根据上述的方法。

根据本公开的另一方面,还提供一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被处理器执行时实现根据上述的方法。

根据本公开的一个或多个实施例,通过确定相邻的多个像素的最大边带值和最小边带值,并基于最大边带值和最小边带值确定多个预设边带值,从而只需统计针对多个预设边带值的边带信息,无需统计针对所有边带值的边带信息,大大减少计算复杂度,显著提升算法效率。

应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。

附图说明

附图示例性地示出了实施例并且构成说明书的一部分,与说明书的文字描述一起用于讲解实施例的示例性实施方式。所示出的实施例仅出于例示的目的,并不限制权利要求的范围。在所有附图中,相同的附图标记指代类似但不一定相同的要素。

图1a示出了根据本公开的实施例的编码端的结构示意图;

图1b示出了根据本公开的实施例的解码端的结构示意图;

图2a示出了根据本公开的实施例的待编码视频帧的示意图;

图2b示出了根据本公开的实施例的重构帧的一个图像块的示意图;

图2c示出了计算得到的图2b中的图像块中每一像素的边带值;

图2d示出了根据本公开的实施例的重构帧的另一个图像块的示意图;

图2e示出了计算得到的图2d中的图像块中每一像素的边带值;

图3示出了根据本公开的实施例的用于样点自适应补偿的方法的流程图;

图4示出了根据本公开的实施例的获取多个目标像素的最大边带值和最小边带值的方法流程图;

图5示出了根据本公开的实施例的获取多个目标像素的最大边带值和最小边带值的原理示意图;

图6示出了根据本公开的实施例的针对预设边带值的边带信息的计算方法流程图;

图7示出了根据本公开的实施例的确定边带掩模的原理示意图;

图8示出了根据本公开的实施例的针对预设边带值的残差累加和的计算原理示意图;

图9a示出了根据本公开的实施例的残差累加矩阵的示意图;

图9b示出了根据本公开的实施例的数量累加矩阵的示意图;

图10示出了根据本公开的实施例的样点自适应补偿方法的流程图;

图11示出了根据本公开的实施例的用于样点自适应补偿装置的方法的结构框图;

图12示出了能够用于实现本公开的实施例的示例性电子设备的结构框图。

具体实施方式

以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

在本公开中,除非另有说明,否则使用术语“第一”、“第二”等来描述各种要素不意图限定这些要素的位置关系、时序关系或重要性关系,这种术语只是用于将一个元件与另一元件区分开。在一些示例中,第一要素和第二要素可以指向该要素的同一实例,而在某些情况下,基于上下文的描述,它们也可以指代不同实例。

在本公开中对各种所述示例的描述中所使用的术语只是为了描述特定示例的目的,而并非旨在进行限制。除非上下文另外明确地表明,如果不特意限定要素的数量,则该要素可以是一个也可以是多个。此外,本公开中所使用的术语“和/或”涵盖所列出的项目中的任何一个以及全部可能的组合方式。

下面将结合附图详细描述本公开的实施例。

为了便于理解,首先对视频编码过程进行简单介绍。

视频编码过程大致如下:原始的视频帧被切分成多个图像块,以图像块为编码单元进行编码。图像块例如可以是16×16、32×32、64×64大小的正方形图像,也可以为矩形图像。如图1a所示,编码端可以对原始的视频帧进行预测、变换、量化、熵编码、反量化、反变换、重建、滤波等处理。相应地,编码端可以包括编码帧内预测模块、编码帧间预测模块、变换模块、量化模块、熵编码模块、反量化模块、反变换模块、重建模块、滤波模块、参考图像缓冲模块。

编码帧内预测模块和编码帧间预测模块可以分别确定帧内预测数据、帧内预测相关信息、帧间预测数据、帧间预测相关信息。可以通过开关选择使用编码帧内预测模块或编码帧间预测模块,被选择的预测模块输出的预测数据作为加法器的其中一个输入,原始的视频帧作为加法器的另一个输入,加法器输出预测残差。预测残差经过变换、量化处理,得到量化系数。量化系数、帧内预测相关信息和帧间预测相关信息等输入至熵编码模块,经过熵编码后得到编码流以发送至解码端。编码端的重建模块可以将预测残差加回至相应的帧内预测数据或帧间预测数据,以得到重建帧。

需要说明的是,此处的预测残差是基于预测帧和原始的视频帧计算得到,不同于下面内容中基于重建帧和原始的视频帧计算得到的残差。

视频解码过程大致如下:如图1b所示,首先对接收到的编码流进行熵解码,得到量化系数(例如可以包括图1b中的预测残差)、帧间预测相关信息、帧内预测相关信息等。量化系数经过反量化、反变换处理之后,恢复预测残差。重建模块将预测残差加回至相应的帧内预测数据或帧间预测数据。可以通过开关选择使用帧内预测数据或帧间预测数据,以得到重建帧。相应地,解码端可以包括解码帧内预测模块、解码帧间预测模块、熵解码模块、反量化模块、反变换模块、重建模块、滤波模块、参考图像缓存模块、视频播放缓存模块。

由于在解码端进行变换和量化的过程中会存在丢失高频分量的问题,从而导致重建帧因振铃效应出现波纹现象。

为了解决上述技术问题,如图1a所示,编码端可以对重建帧进行滤波处理,滤波处理可以包括去块滤波(deblockingfilter,简称“df”)处理、样点自适应补偿(sampleadaptiveoffset,简称“sao”)处理,sao处理用于获取sao信息,sao信息经过熵编码后发送至解码端。相应地,编码端还可以包括df模块和sao补偿模块。解码端可以对所接收的编码流进行熵解码,得到sao信息。

sao可以对重建帧进行补偿,用以减缓甚至去除重建帧中出现的波纹现象。为了减缓甚至去除重建帧中出现的波纹现象,在编码端将重建帧划分为多个图像块,可以依次确定每个图像块对应的sao信息。编码端可以向解码端发送每个图像块的sao信息,以使得解码端可以根据对应的sao信息分别对重建帧中的每一图像块进行补偿,从而减缓甚至去除重建帧中出现的波纹现象。

对于任一视频帧,可以由三种不同的分量构成,例如yuv视频帧,由亮度分量(y)、第一色度分量(u)和第二色度分量(v)构成。因此,sao信息也可以包括三种不同的分量信息,例如,亮度分量信息、第一色度分量信息和第二色度分量信息。

视频帧可以包括不同分量的多个图像块,例如,yuv视频帧可以包括亮度图像块、第一色度图像块和第二色度图像块。可以通过sao处理对重建帧中不同分量的图像块均进行补偿。

sao可以但不限于适用于高性能视频编解码(highefficientvideocoding,简称“hevc”)中。hevc相较之前几代编码技术能够提供更高的压缩效率。hevc能够用比h.264少一半的码率提供相同清晰度的视频,可以节省大量的存储空间、视频传输带宽。

sao可以包括边带补偿(bandoffset,简称“bo补偿”)。bo补偿的大致过程可以为:根据像素值进行归类,将像素值范围等分为多条边带。例如,以8比特图像为例,像素值范围为[0,255],可以设定每条边带包含8个像素值,第k条边带的像素值范围为[8k,8k+7],类似于一种量化技术。在编码过程中,需要统计当前图像块(ctb)中0~31边带的残差和像素点的数量。对于bo补偿,sao信息具体为边带信息,可以包括当前图像块中0~31边带的残差和像素点的数量。

由于bo补偿中存在32个边带,超出了矢量寄存器的个数,相关技术中,可以基于c语言来统计当前图像块(ctb)中0~31边带的残差和像素点的数量,具体可以为:针对当前图像块,定义两个临时数组stats[32]和count[32],初始值为0;计算当前像素的边带值bt,比如,针对8比特像素,重建像素值为15,则,bt=15/8=1;计算当前重建像素和原始像素的差,也就是残差diff;累加残差和像素数量,stats[bt]+=diff;count[bt]++。由此可见,针对每个像素都需要分别计算残差并将该残差累加至相应的边带值的残差累加和,并且将相应的边带值的像素数量加1,计算复杂度非常高。

基于此,经过研究发明人发现,针对每个图像块,对于相邻的多个重建像素的像素值虽然大多不同,但大部分属于同一边带,但又不完全属于同一边带。对于一些特殊区域,比如平坦区域,相邻的多个重建像素大多处于连续的几个边带内。

以8比特图像为例,图2a为本公开的实施例的待编码视频帧;图2b为图2a中虚线框201所限定的亮度ctb的重建像素的像素值,为了便于展示,图2b中仅示出一个16×16的区域;图2c为图2b所示意的亮度ctb中每一重建像素的边带值。

从图2b可以看出,虚线框201所限定的亮度ctb中重建像素的像素值(例如,亮度分量)大多不同。但是,从图2c中可以看出,相邻的多个重建像素大部分属于同一边带,但又不完全属于同一边带。例如,第2行、第3行重建像素大部分属于同一边带26,但又不完全属于同一边带。

图2d为图2a中虚线框202所限定的亮度ctb的重建像素的像素值,同样地,为了便于展示,图2d中仅示出一个16×16的区域;图2e为图2d所示意的亮度ctb中每一重建像素的边带值。

从图2e可以看出,虚线框201所限定的亮度ctb中相邻的多个重建像素的大多处于连续的几个边带内。

上述仅是以重建帧的亮度分量为例来说明相邻的多个重建像素的边带值的分布特点,容易理解的是,重建帧的其它分量(例如第一色度分量、第二色度分量)的边带值也具有上述分布特点。

基于此发现,本公开提供一种用于样点自适应补偿的改进方法。该方法从目标图像中选取相邻的多个目标像素,获取多个目标像素的最大边带值和最小边带值,并基于最大边带值和最小边带值确定多个预设边带值,针对每一个预设边带值,计算该预设边带值的边带信息。由此,通过确定相邻的多个像素的最大边带值和最小边带值,并基于最大边带值和最小边带值确定多个预设边带值,从而只需统计针对多个预设边带值的边带信息,无需统计针对所有边带值的边带信息,大大减少计算复杂度,显著提升算法效率。视频帧即为图像,本公开实施例中视频帧和图像可以混合使用。本公开实施例中的目标图像可以是整个视频帧,也可以是视频帧的一部分。

下面将结合附图具体描述本公开实施例中的用于样点自适应补偿的方法。

对于用于样点自适应补偿的方法,该方法本身不一定是在做自适应补偿,但是是用于自适应补偿,例如可以是自适应补偿的准备工作。

图3示出了根据本公开的实施例的用于样点自适应补偿的方法的流程图。如图3所示,该方法可以包括:步骤s301、获取目标图像中每一像素的边带值和残差;步骤s302、从所述目标图像中选取相邻的多个目标像素;以及针对所述相邻的多个目标像素,执行以下边带信息计算操作:步骤s303、获取所述多个目标像素的最大边带值和最小边带值;步骤s304、基于所述最大边带值和最小边带值,确定多个预设边带值;以及步骤s305、对于所述多个预设边带值中的每一个预设边带值,基于所述多个目标像素的边带值和残差,计算针对该预设边带值的边带信息。由此,通过确定相邻的多个像素的最大边带值和最小边带值,并基于最大边带值和最小边带值确定多个预设边带值,从而只需统计针对多个预设边带值的边带信息,无需统计针对所有边带值的边带信息,大大减少计算复杂度,显著提升算法效率。

目标图像可以但不限于为视频帧的一个图像块。目标图像例如可以为视频帧的亮度图像块,也可以为其它分量的图像块,例如,针对yuv视频帧,目标图像也可以为第一色度图像块或第二色度图像块。

目标图像可以为编码端进行重建所得到的重建帧中的一个图像块,可以基于重建帧和原始的视频帧计算目标图像中每一目标像素的残差。重建帧和原始的视频帧的大小相同,两者所包括的像素数量相同。重建帧中像素的值为原始的视频帧中位置对应的像素的重建像素值,具体的重建过程已在上面内容中描述。

为了便于描述和理解,本公开实施例中将重建帧和原始的视频帧中位置对应的两个像素称为同一像素。

像素的残差可以为重建帧中该像素的重建像素值和原始视频帧中该像素的原始像素值之间的差值。像素的残差可以为正数,也可以为0或负数。

以8比特图像为例,像素值范围为[0,255],可以设定每条边带包含8个像素值,第k条边带的像素值范围为[8k,8k+7]。可以将像素值除以8并取整,例如,像素值为15,该像素的边带值为2。需要说明的是,在此只是举例说明如何计算像素的边带值,并不限定边带的划分方式仅局限于上述一种,可以根据实际需求,基于像素值范围来设定像素值范围划分方式,以确定像素的边带值。

根据一些实施例,步骤s302可以包括:将所述目标图像的像素划分为多个像素组,每一像素组包括相邻的多个目标像素。由此,通过将目标图像预先划分为多个像素组,能够以像素组为单位细化目标图像的边带值区间,提升算法效率。进一步地,可以对每一像素组所包括的相邻的多个目标像素均执行边带信息计算操作。

示例性的,可以但不限于将目标图像中每一行的多个像素划分为至少一个像素组,即每一像素组所包括的多个目标像素位于同一行中。可以理解的是,每一像素组所包括的多个目标像素也可以分布在目标图像的多行像素(包括两行像素)中。每一像素组所包括的多个目标像素例如可以呈矩阵分布。以图2d示意的重建帧的一个图像块为例,例如可以将每一行的多个像素中确定为一个像素组,则每一像素组包括位于同一行的16个像素。也可以将图2d中的图像块划分成多个呈2*8矩阵分布的多个像素组,即每一像素组包括两行像素,每一行像素包括8个像素。在此不限定目标图像划分为多个像素组的具体方式,可以根据实际需求进行划分。

根据一些实施例,该方法还可以包括:基于所述多个像素组各自相应的多个边带信息确定所述目标图像的边带信息;以及对所述目标图像的边带信息进行编码,以用于发送至解码端。由此,以像素组为单位细化目标图像的边带信息的计算过程,而利用本公开的技术方案能够简化每一像素组的边带信息的计算复杂度,从而能够简化目标图像的计算复杂度。对于如何基于多个像素组各自相应的多个边带信息来确定目标图像的边带信息,具体的实现方案将在下面内容中详细描述。

在选定相邻的多个目标像素(可以为目标图像的一个像素组)之后,可以针对多个目标像素,执行以下边带信息计算操作。

根据一些实施例,步骤s302中所选取的相邻的多个目标像素的个数可以为偶数。在这种情况下,如图4所示,步骤s303、获取所述多个目标像素的最大边带值和最小边带值可以包括:步骤s401、将所述多个目标像素等分为第一部分和第二部分;步骤s402、将所述第一部分中的每个目标像素和所述第二部分中的相应的目标像素之间执行取最大值运算,得到多个第一像素值;步骤s403、将所述第一部分中的每个目标像素和所述第二部分中的相应的目标像素之间执行取最小值运算,得到多个第二像素值;步骤s404、基于所述多个第一像素值,确定所述多个目标像素的最大边带值;以及步骤s405、基于所述多个第二像素值,确定所述多个目标像素的最小边带值。由此,通过将多个目标像素等分为两部分,并对等分得到的两部分中相应的两个目标像素分别执行取最大值运算和取最小值运算,从而能够实现基于减半的像素数量获取最大边带值和最小边带值,减少获取最大边带值和最小边带值的计算量,进而能够快速确定相邻的多个目标像素的最大边带值和最小边带值,进一步提升算法效率。

例如,以相邻的多个目标像素位于同一行中为例,可以将多个目标像素的前半部分作为第一部分,而将后半部分作为第二部分。在图5示意的实施例中,相邻的多个目标像素500为图2e中的最后一行像素,获取多个目标像素500的最大边带值和最小边带值的过程可以为:对多个目标像素进行等分,得到第一部分501和第二部分502;将第一部分501中的每个目标像素和第二部分502中相应的目标像素之间执行取最大值运算,得到8个第一像素值26、27、28、27、27、26、26和26;将第一部分501中的每个目标像素和第二部分502中相应的目标像素之间执行取最小值运算,得到8个第二像素值19、24、27、26、26、26、26和26;基于8个第一像素值,确定多个目标像素的最大边带值max为28;以及基于8个第二像素值,确定多个目标像素的最小边带值min为19。

可以理解的,并不限定相邻的多个目标像素的个数必须为偶数,也可以为奇数。示例性的,在相邻的多个目标像素的个数为奇数的情况下,获取多个目标像素的最大边带值和最小边带值的方法与上述类似,例如可以为:将相邻的多个目标像素划分为第一部分和第二部分,第一部分的像素数量和第二部分的像素数量之间的差值可以但不限于为1。同样地,可以将第一部分中的每个目标像素和所述第二部分中的相应的目标像素之间执行取最大值运算,得到多个第一像素值,并且将所述第一部分中的每个目标像素和所述第二部分中的相应的目标像素之间执行取最小值运算,得到多个第二像素值。与上述不同的是,可以基于多个第一像素值,以及第一部分中多余的一个目标像素(该目标像素在第二部分中没有相应的目标像素),确定所述多个目标像素的最大边带值,并且基于所述多个第二像素值,以及第一部分中多余的一个目标像素,确定所述多个目标像素的最小边带值。

在确定相邻的多个目标像素的最大边带值和最小边带值之后,可以执行步骤s304、基于最大边带值和最小边带值确定多个预设边带值。

根据一些实施例,步骤304中所确定的多个预设边带值可以包括多个目标像素的最大边带值max和最小边带值min,以及位于最大边带值max和最小边带值min之间的一个或多个边带值。例如,多个预设边带值可以包括[min,max]这个区间内的所有整数。

在基于相邻的多个目标像素的最大边带值和最小边带值确定多个预设边带值之后,可以执行步骤s305,以计算针对多个预设边带值中每一预设边带值的边带信息。

根据一些实施例,如图6所示,步骤s305、对于所述多个预设边带值中的每一个预设边带值,基于所述多个目标像素的边带值和残差,计算针对该预设边带值的边带信息可以包括:步骤s601、确定所述多个目标像素的与该预设边带值对应的边带掩模,所述边带掩模能够表征所述多个目标像素中边带值为所述预设边带值的目标像素的位置;以及步骤s602、基于所述多个目标像素和与该预设边带值对应的所述边带掩模,对该预设边带值和所述多个目标像素进行计算,以得到针对该预设边带值的边带信息。由此,基于预设边带值对应的边带掩模能够实现同时对预设边带值和多个目标像素进行计算,实现指令集优化,相对于相关技术中针对每一像素均独立进行计算,能够大大减少内存存取的次数和计算复杂度,显著提升算法效率。

示例性的,每一预设边带值对应的边带掩模所包括的多个掩模像素可以与相邻的多个目标像素一一对应,并且边带掩模的与多个目标像素中边带值为该预设边带值的目标像素对应的掩模像素的值为设定值,并且与多个目标像素中边带值不为该设定边带值的目标像素对应的掩模像素的值为零。所述设定值例如可以但不限于为1,以简化边带信息的计算,参见图7中的边带掩模701。

根据一些实施例,相邻的多个目标像素可以呈矩阵分布,在这种情况下,步骤s601、确定所述多个目标像素的与该预设边带值对应的边带掩模可以包括:构建与所述多个目标像素的矩阵大小相同的带矩阵,所述带矩阵的元素的值均为该预设边带值;以及基于所述多个目标像素的边带值和所述带矩阵的相应的元素的比较结果,确定所述边带掩模。由此,通过构建元素值均为预设边带值的带矩阵,并且将所述多个目标像素的值与带矩阵中对应的元素的值进行比较,从而能够确定是否具有边带值为预设边带值的目标像素,并且能够同时确定边带值为预设边带值的至少一个目标像素的位置,进而能够快速确定预设边带值对应的边带掩模,提升算法效率。

示例性的,基于上述方案得到的边带掩模可以呈矩阵分布,并且可以与多个目标像素的矩阵大小相同,以便于计算,具体原理将在下面内容中描述。

仍以图5示意的实施例为例,相邻的多个目标像素为图2e中的最后一行像素,在确定多个目标像素的最大边带值28和最小边带值19(具体的方法参见上面内容)之后,可以确定多个预设边带值为[19,28]这个区间内的所有整数19、20、21、…、26、27、28。

在图7示意的示例中,以预设边带值26为例,可以构建带矩阵700,带矩阵700为行矩阵,包括16个元素并且16个元素的值均为预设边带值26,带矩阵700与多个目标像素500的矩阵大小相同。将多个目标像素500的边带值(为了便于描述和理解,在图7中仍用附图标记500示意)和带矩阵700的相应的元素一一进行比较,基于比较结果确定该预设边带值对应的边带掩模701的掩模像素的值。例如,当多个目标像素500中某一目标像素的边带值为26,则可以将边带掩模701的相应掩模像素的值设置为设定值(例如,1);而当多个目标像素500中另一目标像素的边带值不为26,则可以将边带掩模700的相应掩模像素的值设置为0。边带掩模701也可以呈行矩阵分布,包括16个元素,每一元素的值为掩模像素的值。

示例性的,针对每一预设边带值的边带信息可以包括残差累加和以及像素数量。目标图像可以为编码端得到的重建帧中的一个图像块。目标图像中目标像素的值为重建像素值,原始的视频帧中像素的值和目标图像中目标像素的值之间的差值即为残差。

根据一些实施例,在边带信息包括残差累加和以及像素数量的情况下,步骤s602、对于所述多个预设边带值中的每一个预设边带值,基于所述多个目标像素的边带值和残差,计算针对该预设边带值的边带信息可以包括:基于所述多个目标像素的残差和对应的边带掩模,对该预设边带值和所述多个目标像素进行计算,以得到针对该预设边带值的残差累加和。由于边带掩模能够表征多个目标像素中边带值为该预设边带值的目标像素的位置,从而能够实现指令集优化,同时对多个目标像素进行计算,以得到针对该预设边带值的残差累加和,简化计算复杂度,提升算法效率。

在一个示例性实施例中,对该预设边带值和所述多个目标像素进行计算,以得到针对该预设边带值的残差累加和可以包括:构建残差矩阵;对所述多个目标像素中每一个目标像素的残差与对应的边带掩模中与该目标像素位置对应的掩模像素的像素值执行相乘计算;以及将所述计算得到的结果存入所述残差矩阵。从而能够通过残差矩阵来存储同时对多个目标像素进行计算所得到的残差,并且还能够基于残差矩阵进行残差和的累加,便于算法的实现。另外,通过相乘计算能够使得残差矩阵的元素值的二进制表示长度相对每个目标像素的残差的二进制表示长度翻倍,避免出现溢出问题。

在图8示意的示例中,相邻的16个目标像素呈行矩阵分布,即位于同一行中。为了便于计算,可以设置预设边带值对应的边带掩模701也呈行矩阵分布,元素的值为1表示多个目标像素中相应的目标像素的边带值为该预设边带值,元素的值为0表示多个目标像素中相应的目标像素的边带值不为该预设边带值。对多个目标像素中每一个目标像素的残差diff与对应的边带掩模701中与该目标像素位置对应的掩模像素的像素值执行相乘计算,以得到残差矩阵801中相应的元素的值。由于边带掩模701中与边带值不为该预设边带值的目标像素相应的元素的值为0,因此边带掩模701中该元素的值与该目标像素的残差diff相乘为0,不被计入针对该预设边带值的残差累加和。另外,由于边带掩模701中与边带值为该预设边带值的目标像素相应的元素的值为1,因此边带掩模701中该元素的值与该目标像素的残差diff相乘仍为diff,能够将该目标像素的残差累加至针对该预设边带值的残差累加和。

可以理解的,步骤s602并不局限于采用上述一种方式来计算多个目标像素的针对预设边带值的残差累加。例如,也可以不构建残差矩阵,而是直接述多个目标像素中每一个目标像素的残差与对应的边带掩模中与该目标像素位置对应的掩模像素的像素值执行相乘计算,然后对多个目标像素通过所述相乘计算所得到的多个乘积进行求和,得到多个目标像素的针对预设边带值的残差累加和。

根据一些实施例,如图8所示,相邻的多个目标像素的个数可以为偶数,并且将所述计算得到的结果存入所述残差矩阵可以包括:针对所述多个目标像素中每两个相邻的目标像素,对其中一个目标像素的通过所述相乘计算得到的乘积和另一个目标像素的通过所述相乘计算得到的乘积进行求和,以得到多个求和值;将得到的多个求和值存入所述残差矩阵。由此,通过求和计算能够减少残差矩阵的元素的数量,减少占用内存。

可以理解的,相邻的多个目标像素的个数也可以为奇数,在这种情况下,例如可以将第一个目标像素或最后一个目标像素的像素值直接存入残差矩阵,剩余的数量为偶数的目标像素可以采用上述技术方案进行求和,以减少占用内存。

根据一些实施例,在将目标图像的像素划分为多个像素组并且每一像素组包括相邻的多个目标像素的情况下,可以累加多个像素组中相同预设边带值所对应的残差累加和,即对多个像素组中相同预设边带值所对应的残差累加和进行求和,以得到目标图像的针对每一预设边带值的残差累加和,从而能够减少目标图像的边带信息的计算复杂度。

在一个示例性实施例中,当通过构建残差来得到预设边带值的残差累加和的情况下,可以通过累加多个像素组中的相同预设边带值所对应的残差矩阵的元素的值,来累加所述多个像素组中所述相同预设边带值所对应的残差和。由于通过残差矩阵能够存储同时对多个目标像素进行计算所得到的残差,并且还能够基于残差矩阵进行残差和的累加,从而能够便于算法的实现,减少目标图像的边带信息的计算复杂度。

示例性的,参见图9a所示,可以构建多个边带值对应的残差累加矩阵,残差累加矩阵可以与残差矩阵的大小相同,并且残差累加矩阵的元素的初始值均为0。针对每一像素组,在计算得到相应的多个预设边带值中每一预设边带值对应的残差矩阵之后,可以将残差矩阵的每一元素的值累加至该预设边带值对应的残差累加矩阵中相应的元素,即,该预设边带值对应的残差累加矩阵中某一元素的值为针对多个像素组所确定的该预设边带值对应的残差矩阵中相应的元素的值之和。在统计完成多个像素组的针对相应的多个预设边带值的残差累加和之后,可以对每一预设边带值对应的残差累加矩阵的所有元素的值进行求和,以得到目标图像的针对该预设边带值的残差累加和。

可以依次基于每一像素组的最大边带值和最小边带值构建多个预设边带值对应的残差累加矩阵,从而能够根据实际需要构建所需的残差累加矩阵。

以上内容介绍了如何基于对应的边带掩模计算针对预设边带值的残差累加和,同样地,也可以基于对应的边带掩模计算针对预设边带值的像素数量。

根据一些实施例,步骤s602、对于所述多个预设边带值中的每一个预设边带值,基于所述多个目标像素的边带值和残差,计算针对该预设边带值的边带信息可以包括:基于对应的边带掩模,计算针对该预设边带值的像素数量。由于边带掩模能够表征所述多个目标像素中边带值为所述预设边带值的目标像素的位置,从而能够基于对应的边带掩模计算针对预设边带值的像素数量。

示例性的,每一预设边带值对应的边带掩模所包括的多个掩模像素可以与相邻的多个目标像素一一对应,并且边带掩模的与多个目标像素中边带值为该预设边带值的目标像素对应的掩模像素的值为设定值,并且与多个目标像素中边带值不为该设定边带值的目标像素对应的掩模像素的值为零。所述设定值例如可以但不限于为1,以简化边带信息的计算。当相邻的多个目标像素包括至少一个目标像素的边带值为该预设边带值,可以对边带掩模所包括的多个掩模像素的值进行求和,以得到所述至少一个目标像素的数量(即多个目标像素的针对该预设边带值的像素数量)。可以理解的,若相邻的多个目标像素不包括边带值为该预设边带值的目标像素,则该预设边带值对应的边带掩模的元素的值均为0,并且针对该预设边界值的像素数量为0。

可以理解的,步骤s602并不局限于采用上述一种方式来计算多个目标像素的针对预设边带值的像素数量。例如,也可以设置一初始值为0的变量i,并依次判断多个目标像素中每一个目标像素的边带值是否等于该预设边带值,若是,则执行i++,若否,则继续执行判断下一个目标像素边带值是否等于该预设边带值,直至完成多个目标像素的判断,并将最终的i值作为个目标像素的针对预设边带值的像素数量。

根据一些实施例,在所述目标图像的像素被划分为多个像素组并且每一像素组包括所述相邻的多个目标像素的情况下,所述方法还可以包括:累加所述多个像素组中相同预设边带值所对应的像素数量,以得到所述目标图像的边带信息,从而能够减少目标图像的边带信息的计算复杂度。

示例性的,可以通过累加多个像素组中的相同预设边带值所对应的边带掩模的多个掩模像素的像素值,来累加所述多个像素组中所述相同预设边带值所对应的总像素数量。

参见图9b所示,在多个目标像素呈矩阵分布的情况下,可以构建多个边带值对应的数量累加矩阵,数量累加矩阵可以与多个目标像素的矩阵大小相同,并且数量累加矩阵的元素的初始值均为0。针对每一像素组,在计算得到多个预设边带值中每一预设边带值对应的边带掩模之后,可以将边带掩模中的每一元素的值累加至该预设边带值对应的数量累加矩阵中相应的元素,即,该预设边带值对应的数量累加矩阵中某一元素的值为针对多个像素组所得到的该预设边带值对应的边带掩模中相应的掩模像素的值之和。在统计完成多个像素组的针对相应的多个预设边带值的像素数量之后,可以对每一预设边带值对应的数量累加矩阵的所有元素的值进行求和,以得到目标图像的针对该预设边带值的像素数量。

可以依次基于每一像素组的最大边带值和最小边带值构建多个预设边带值对应的数量累加矩阵,从而能够根据实际需要构建所需的数量累加矩阵

如图10所示,下面将结合示例性实施例来具体描述样点自适应补偿方法的过程,具体可以如下:

步骤s1001、将重建帧中的每一图像块划分为多个像素组,针对每一像素组,获取该像素组所包括的多个目标像素中每一目标像素的目标像素值、边带值和残差;

步骤s1002、确定该像素组所包括的多个目标像素的最大边带值max和最小边带值min;

步骤s1003、确定位于多个预设边带值的取值区间为[min,max];

步骤s1004、计算该像素组的针对预设边带值min的边带信息;

步骤s1005、预设边带值+1;

步骤s1006、确定预设边带值是否不大于max,若否,则结束,若是,则执行步骤s1007;

步骤s1007、计算该像素组的针对预设边带值的边带信息,并循环执行步骤s1005-步骤s1006,直至预设边带值大于max。

本公开的技术方案可以但不限于应用于直播或点播的视频编码。

对于视频编码,考虑到一般相邻的多个重建像素都属于相近的边带,本公开的技术方案基于最大边带值和最小边带值缩小边带范围,通过指令集优化,能够同时处理16或者32个或者更多个像素,从而能够大大减少边带信息统计过程中的内存读写和数值计算。无论是移动设备的android/ios或者pc机等,内存读写操作都是非常耗时和耗电的。经过实验统计,通过采用本公开的技术方案能够使边带信息统计的计算量减少40%。现有技术中边带信息统计在编解码中占整个编解码的10%左右的耗时,通过采用本公开的技术方案能够直接让直播和点播视频编码加速4%左右,从而能够降低功耗。因此,本公开的技术方案非常具有实际价值。

根据本公开的另一方面,还提供一种用于样点自适应补偿的装置。如图11所示,该装置1100可以包括:获取单元1101,被配置用于获取目标图像中每一像素的边带值和残差;选取单元1102,被配置用于从所述目标图像中选取相邻的多个目标像素;以及边带信息计算单元1103,被配置用于针对所述相邻的多个目标像素,执行以下边带信息计算操作:获取所述多个目标像素的最大边带值和最小边带值;基于所述最大边带值和最小边带值,确定多个预设边带值;以及基于所述多个目标像素的边带值和残差,计算所述多个预设边带值中每一预设边带值的带信息。

根据本公开的另一方面,还提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中所述存储器存储有计算机程序,所述计算机程序在被所述至少一个处理器执行时实现根据上述的方法。

根据本公开的另一方面,还提供一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被处理器执行时实现根据上述的方法。

根据本公开的另一方面,还提供一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被处理器执行时实现根据上述的方法。

参考图12,现将描述可以作为本公开的服务器或客户端的电子设备1200的结构框图,其是可以应用于本公开的各方面的硬件设备的示例。电子设备旨在表示各种形式的数字电子的计算机设备,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。

如图12所示,设备1200包括计算单元1201,其可以根据存储在只读存储器(rom)1202中的计算机程序或者从存储单元1208加载到随机访问存储器(ram)1203中的计算机程序,来执行各种适当的动作和处理。在ram1203中,还可存储设备1200操作所需的各种程序和数据。计算单元1201、rom1202以及ram1203通过总线1204彼此相连。输入/输出(i/o)接口1205也连接至总线1204。

设备1200中的多个部件连接至i/o接口1205,包括:输入单元1206、输出单元1207、存储单元1208以及通信单元1209。输入单元1206可以是能向设备1200输入信息的任何类型的设备,输入单元1206可以接收输入的数字或字符信息,以及产生与电子设备的用户设置和/或功能控制有关的键信号输入,并且可以包括但不限于鼠标、键盘、触摸屏、轨迹板、轨迹球、操作杆、麦克风和/或遥控器。输出单元1207可以是能呈现信息的任何类型的设备,并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。存储单元1208可以包括但不限于磁盘、光盘。通信单元1209允许设备1200通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据,并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信收发机和/或芯片组,例如蓝牙tm设备、1302.11设备、wifi设备、wimax设备、蜂窝通信设备和/或类似物。

计算单元1201可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1201的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元1201执行上文所描述的各个方法和处理,例如图3中的步骤s301-步骤s305。例如,在一些实施例中,样点自适应补偿方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1208。在一些实施例中,计算机程序的部分或者全部可以经由rom1202和/或通信单元1209而被载入和/或安装到设备1200上。当计算机程序加载到ram1203并由计算单元1201执行时,可以执行上文描述的样点自适应补偿方法的一个或多个步骤。备选地,在其他实施例中,计算单元1201可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行样点自适应补偿方法。

本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。

用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。

在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。

为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。

可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。

计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。

应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行、也可以顺序地或以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。

虽然已经参照附图描述了本公开的实施例或示例,但应理解,上述的方法、系统和设备仅仅是示例性的实施例或示例,本发明的范围并不由这些实施例或示例限制,而是仅由授权后的权利要求书及其等同范围来限定。实施例或示例中的各种要素可以被省略或者可由其等同要素替代。此外,可以通过不同于本公开中描述的次序来执行各步骤。进一步地,可以以各种方式组合实施例或示例中的各种要素。重要的是随着技术的演进,在此描述的很多要素可以由本公开之后出现的等同要素进行替换。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1