Video decoding method and device and storage medium
本申请是分案申请,原申请的申请号是202210612716.1,原申请日是2022年05月31日,原申请的全部内容通过引用结合在本申请中。 附图说明 图1为本申请实施例提供的编解码系统的系统架构图; 图2为本申请实施例提供的视频编码器的结构示意图; 图3为本申请实施例提供的视频解码器的结构示意图; 图4为本申请实施例提供的一种视频解码的流程示意图; 图5为本申请实施例提供的视频解码器结构示意图; 图6为本申请实施例提供的一种视频译码方法的流程图; 图7为本申请实施例提供的一种计算角度梯度的示意图; 图8为本申请实施例提供的一种计算角度梯度的示意图; 图9为本申请实施例提供的一种计算角度梯度的示意图; 图10为本申请实施例提供的一种划分图像块并计算角度梯度的示意图; 图11为本申请实施例提供的一种计算角度梯度的示意图; 图12a为本申请实施例提供的一种参考量化参数与复杂度和缓冲区域状态的函数图像; 图12b为本申请实施例提供的一种参考量化参数与缓冲区域状态的函数图像; 图12c为本申请实施例提供的一种参考量化参数与复杂度的函数图像; 图13a为本申请实施例提供的一种图像边界示意图; 图13b为本申请实施例提供的一种条带示意图; 图14a为本申请实施例提供的一种码流分组方法的流程示意图; 图14b为本申请实施例提供的一种码流分组方法的流程示意图; 图15为本申请实施例提供的一种基于码流分组方法chunk的交织示意图; 图16a为本申请实施例提供的一种码流分组方法的流程示意图; 图16b为本申请实施例提供的一种码流分组方法的流程示意图; 图17为本申请实施例提供的一种基于码流分组方法chunk的交织示意图; 图18为本申请实施例提供的一种视频译码装置的组成示意图。 技术领域 本申请涉及视频译码技术领域,尤其涉及一种视频译码方法、装置及存储介质。 具体实施方式 在本申请的描述中,除非另有说明,“/”表示“或”的意思,例如,A/B可以表示A或B。本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。此外,“至少一个”是指一个或多个,“多个”是指两个或两个以上。“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。 需要说明的是,本申请中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。 首先,对本申请实施例涉及的技术术语进行介绍: 1、视频译码技术 视频译码技术包括视频编码技术和视频解码技术,也可以统称为视频编解码技术。 其中,视频序列存在空间冗余、时间冗余、视觉冗余、信息熵冗余、结构冗余、知识冗余、重要性冗余等一系列的冗余信息。为了尽可能的去除视频序列中的冗余信息,减少表征视频的数据量,提出了视频编码技术,以达到减小存储空间和节省传输带宽的效果。视频编码技术也称为视频压缩技术。 为了获取基于上述视频压缩技术的存储或传输的数据,相应地,需要视频解码技术来实现。 在国际通用范围内,视频压缩编码标准用于规范视频编解码方法,例如:由运动图像专家组(Motion Picture Experts Group,MPEG)制定的MPEG-2和MPEG-4标准中第10部分的高级视频编解码(Advanced Video Coding,AVC),由国际电信联盟电信标准化部门(International Telecommunication Uion-Telecommunication StandardizationSector,ITU-T)制定的H.263、H.264和H.265(又称高效率视频编解码(High EfficiencyVideo Coding standard,HEVC))。 需要说明的是,在基于混合编码架构的编码算法中,上述压缩编码方式可以被混合使用。 视频编解码过程中的基本处理单位是图像块,该图像块是编码端将一帧/幅图像进行划分得到的。针对划分后的图像块,通常采用逐行逐个的方式进行处理。其中,将正在处理的图像块称为当前块,已处理的图像块称为已编码图像块,或已解码图像块,或已译码图像块。以HEVC为例,HEVC定义了编码树单元(Coding Tree Unit,CTU)、编码单元(CodingUnit,CU)、预测单元(Prediction Unit,PU)和变换单元(Transform Unit,TU)。CTU、CU、PU和TU均可作为划分后得到的图像块。其中PU和TU均基于CU进行划分。 2、视频采样 像素为视频或图像最小的完整采样,因此,对图像块进行数据处理是以像素为单位。其中,每个像素记录颜色信息。一种采样方式为通过RGB表示颜色,其中,包括三个图像通道,R表示红色red,G表示绿色green,B表示蓝色blue。另一种采样方式为通过YUV表示颜色,其中,包括三个图像通道,Y表示亮度(luminance),U表示第一色度Cb,V表示第二色度Cr。由于人们对亮度的敏感程度强于对色度的敏感程度,因此,可以通过多存储亮度,少存储色度实现减少存储空间。具体地,在视频编解码中,通常采用YUV格式进行视频采样,包括420采样格式、422采样格式等。该采样格式基于亮度的取样数量,确定两个色度的取样数量,例如,假设一个CU有4×2个像素,格式如下: [Y0,U0,V0][Y1,U1,V1][Y2,U2,V2][Y3,U3,V3]; [Y4,U4,V4][Y5,U5,V5][Y6,U6,V6][Y7,U7,V7]; 420采样格式表示YUV以4:2:0的格式进行采样,即亮度与第一色度或第二色度以4:2的比例进行选取,其中第一色度与第二色度隔行选取。则上述CU采样选取第一行的亮度Y0-Y3,以及第一色度U0和U2,选取第二行的亮度Y4-Y7,以及第二色度V4和V6。该CU经采样由亮度编码单元及色度编码单元构成,其中,亮度编码单元为: [Y0][Y1][Y2][Y3]; [Y4][Y5][Y6][Y7]; 第一色度编码单元为: [U0][U2]; 第二色度编码单元为: [V4][V6]; 可以看出,经上述采样格式采样后的图像块大小发生了变化。其中亮度编码单元块大小不变,仍为4×2,而第一色度编码单元块大小变为2×1,第二色度编码单元块大小也变为2×1。因此,若假设CU大小为X×Y,则基于420采样格式采样后的色度编码单元块大小为 类似地,422采样格式表示YUV以4:2:2的格式进行采样,即亮度与第一色度和第二色度以4:2:2的比例进行选取。则上述CU经采样的亮度编码单元为: [Y0][Y1][Y2][Y3]; [Y4][Y5][Y6][Y7]; 第一色度编码单元为: [U0][U2]; [U4][U6]; 第二色度编码单元为: [V1][V3]; [V5][V7]; 其中,亮度编码单元块大小不变,仍为4×2,而第一色度编码单元块大小变为2×2,第二色度编码单元块大小也变为2×2。因此,若假设CU大小为X×Y,则基于422采样格式采样后的色度编码单元块大小为 上述经采样得到的亮度编码单元、第一色度编码单元和第二色度编码单元作为后续针对当前块进行处理的各通道的数据单元。 本申请提供的译码方法适用于视频编解码系统。该视频编解码系统也可以称为视频译码系统。图1示出了视频编解码系统的结构。 如图1所示,视频编解码系统包含源装置10和目的装置11。源装置10产生经过编码后的视频数据,源装置10也可以被称为视频编码装置或视频编码设备,目的装置11可以对源装置10产生的经过编码后的视频数据进行解码,目的装置11也可以被称为视频解码装置或视频解码设备。源装置10和/或目的装置11可包含至少一个处理器以及耦合到所述至少一个处理器的存储器。所述存储器可包含但不限于只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、带电可擦可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、快闪存储器或可用于以可由计算机存取的指令或数据结构的形式存储所要的程序代码的任何其它媒体,本申请对此不作具体限定。 源装置10和目的装置11可以包括各种装置,包含桌上型计算机、移动计算装置、笔记本(例如,膝上型)计算机、平板计算机、机顶盒、例如所谓的“智能”电话等电话手持机、电视机、相机、显示装置、数字媒体播放器、视频游戏控制台、车载计算机或其类似者等电子设备。 目的装置11可经由链路12从源装置10接收经编码视频数据。链路12可包括能够将经编码视频数据从源装置10移动到目的装置11的一个或多个媒体和/或装置。在一个实例中,链路12可包括使得源装置10能够实时地将编码后的视频数据直接发射到目的装置11的一个或多个通信媒体。在此实例中,源装置10可根据通信标准(例如:无线通信协议)来调制编码后的视频数据,并且可以将调制后的视频数据发射到目的装置11。上述一个或多个通信媒体可包含无线和/或有线通信媒体,例如:射频(Radio Frequency,RF)频谱、一个或多个物理传输线。上述一个或多个通信媒体可形成基于分组的网络的一部分,基于分组的网络例如为局域网、广域网或全球网络(例如,因特网)等。上述一个或多个通信媒体可以包含路由器、交换器、基站,或者实现从源装置10到目的装置11的通信的其它设备。 在另一实例中,可将编码后的视频数据从输出接口103输出到存储装置13。类似地,可通过输入接口113从存储装置13存取编码后的视频数据。存储装置13可包含多种本地存取式数据存储媒体,例如蓝光光盘、高密度数字视频光盘(Digital Video Disc,DVD)、只读光盘(Compact Disc Read-Only Memory,CD-ROM)、快闪存储器,或用于存储经编码视频数据的其它合适数字存储媒体。 在另一实例中,存储装置13可对应于文件服务器或存储由源装置10产生的编码后的视频数据的另一中间存储装置。在此实例中,目的装置11可经由流式传输或下载从存储装置13获取其存储的视频数据。文件服务器可为任何类型的能够存储经编码的视频数据并且将经编码的视频数据发射到目的装置11的服务器。例如,文件服务器可以包含全球广域网(World Wide Web,Web)服务器(例如,用于网站)、文件传送协议(File TransferProtocol,FTP)服务器、网络附加存储(Network Attached Storage,NAS)装置以及本地磁盘驱动器。 目的装置11可通过任何标准数据连接(例如,因特网连接)存取编码后的视频数据。数据连接的实例类型包含适合于存取存储于文件服务器上的编码后的视频数据的无线信道、有线连接(例如,缆线调制解调器等),或两者的组合。编码后的视频数据从文件服务器发射的方式可为流式传输、下载传输或两者的组合。 本申请的译码方法不限于无线应用场景,示例性的,本申请的译码方法可以应用于支持以下多种多媒体应用的视频编解码:空中电视广播、有线电视发射、卫星电视发射、流式传输视频发射(例如,经由因特网)、存储于数据存储媒体上的视频数据的编码、存储于数据存储媒体上的视频数据的解码,或其它应用。在一些实例中,视频编解码系统可经配置,以支持单向或双向视频发射,以支持例如视频流式传输、视频播放、视频广播及/或视频电话等应用。 需要说明的是,图1示出的视频编解码系统仅仅是视频编解码系统的示例,并不是对本申请中视频编解码系统的限定。本申请提供的译码方法还可适用于编码装置与解码装置之间无数据通信的场景。在其它实例中,待编码视频数据或编码后的视频数据可以从本地存储器检索,也可以在网络上流式传输等。视频编码装置可对待编码视频数据进行编码并且将编码后的视频数据存储到存储器,视频解码装置也可从存储器中获取编码后的视频数据并且对该编码后的视频数据进行解码。 在图1中,源装置10包含视频源101、视频编码器102和输出接口103。在一些实例中,输出接口103可包含调制器/解调器(调制解调器)和/或发射器。视频源101可包括视频捕获装置(例如,摄像机)、含有先前捕获的视频数据的视频存档、用以从视频内容提供者接收视频数据的视频输入接口,和/或用于产生视频数据的计算机图形系统,或视频数据的此些来源的组合。 视频编码器102可对来自视频源101的视频数据进行编码。在一些实例中,源装置10经由输出接口103将编码后的视频数据直接发射到目的装置11。在其它实例中,编码后的视频数据还可存储到存储装置13上,供目的装置11稍后存取来用于解码和/或播放。 在图1的实例中,目的装置11包含显示装置111、视频解码器112以及输入接口113。在一些实例中,输入接口113包含接收器和/或调制解调器。输入接口113可经由链路12和/或从存储装置13接收编码后的视频数据。显示装置111可与目的装置11集成或可在目的装置11外部。一般来说,显示装置111显示解码后的视频数据。显示装置111可包括多种显示装置,例如,液晶显示器、等离子显示器、有机发光二极管显示器或其它类型的显示装置。 可选的,视频编码器102和视频解码器112可各自与音频编码器和解码器集成,且可包含适当的多路复用器-多路分用器单元或其它硬件和软件,以处理共同数据流或单独数据流中的音频和视频两者的编码。 视频编码器102和视频解码器112可以包括至少一个微处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application-Specific IntegratedCircuit,ASIC)、现场可编程门阵列(Field Programmable Gate Array,FPGA)、离散逻辑、硬件或其任何组合。若本申请提供的译码方法采用软件实现,则可将用于软件的指令存储在合适的非易失性计算机可读存储媒体中,且可使用至少一个处理器执行所述指令从而实施本申请。 本申请中的视频编码器102和视频解码器112可以根据视频压缩标准(例如HEVC)操作,也可根据其它业界标准操作,本申请对此不作具体限定。 图2是本申请实施例中视频编码器102的一种示意性框图。视频编码器102可以在预测模块21、变换模块22、量化模块23以及熵编码模块24分别进行预测、变换、量化以及熵编码的过程。视频编码器102中还包括预处理模块20和求和器202,其中预处理模块20包括分割模块和码率控制模块。对于视频块重构建,视频编码器102也包括反量化模块25、反变换模块26、求和器201和参考图像存储器27。 如图2中所展示,视频编码器102接收视频数据,预处理模块20视频数据的输入参数。其中,该输入参数包括该视频数据中图像的分辨率、图像的采样格式、像素深度(bitsper pixel,bpp)、位宽等信息。其中,bpp是指单位像素中一个像素分量所占用的比特数。位宽是指单位像素所占用的比特数。例如,以RGB三个像素分量的值表示一个像素,若每个像素分量占用8比特(bits),则该像素的像素深度为8,并且该像素的位宽为3×8=24bits。 预处理模块20中的分割模块将图像分割成原始块。此分割也可包含分割成条带(slice)、图像块或其它较大单元,以及(例如)根据最大编码单元(Largest Coding Unit,LCU)及CU的四叉树结构进行视频块分割。示例性的,视频编码器102编码在待编码的视频条带内的视频块的组件。一般的,条带可划分成多个原始块(且可能划分成称作图像块的原始块的集合)。通常在分割模块中确定CU、PU以及TU的尺寸。此外,分割模块还用于确定码率控制单元的尺寸。该码率控制单元是指码率控制模块中的基本处理单元,例如在码率控制模块基于码率控制单元,为当前块计算复杂度信息,再根据复杂度信息计算当前块的量化参数。其中,分割模块的分割策略可以是预设的,也可以是编码过程中基于图像不断调整的。当分割策略是预设策略时,相应地,解码端中也预设相同的分割策略,从而获取相同的图像处理单元。该图像处理单元为上述任意一种图像块,且与编码侧一一对应。当分割策略在编码过程中基于图像不断调整时,该分割策略可以直接或间接地编入码流,相应地,解码端从码流中获取相应参数,得到相同的分割策略,获取相同的图像处理单元。 预处理模块20中的码率控制模块用于生成量化参数以使得量化模块23和反量化模块25进行相关计算。其中,码率控制模块在计算量化参数过程中,可以获取当前块的图像信息进行计算,例如上述输入信息;还可以获取求和器201经重构得到的重建值进行计算,本申请对此不作限制。 预测模块21可将预测块提供到求和器202以产生残差块,且将该预测块提供到求和器201经重构得到重建块,该重建块用于后续进行预测的参考像素。其中,视频编码器102通过原始块的像素值减去预测块的像素值来形成像素差值,该像素差值即为残差块,该残差块中的数据可包含亮度差及色度差。求和器201表示执行此减法运算的一个或多个组件。预测模块21还可将相关的语法元素发送至熵编码模块24用于合并至码流。 变换模块22可将残差块划分为一个或多个TU进行变换。变换模块22可将残差块从像素域转换到变换域(例如,频域)。例如,使用离散余弦变换(Discrete CosineTransform,DCT)或离散正弦变换(Discrete Sine Transform,DST)将残差块经变换得到变换系数。变换模块32可将所得变换系数发送到量化模块23。 量化模块23可基于量化单元进行量化。其中,量化单元可以与上述CU、TU、PU相同,也可以在分割模块中进一步地划分。量化模块23对变换系数进行量化以进一步减小码率得到量化系数。其中,量化过程可减少与系数中的一些或全部相关联的比特深度。可通过调整量化参数来修改量化的程度。在一些可行的实施方式中,量化模块23可接着执行包含经量化变换系数的矩阵的扫描。替代的,熵编码模块24可执行扫描。 在量化之后,熵编码模块24可熵编码量化系数。例如,熵编码模块24可执行上下文自适应性可变长度编码(Context-Adaptive Variable-Length Coding,CAVLC)、上下文自适应性二进制算术编码(Context-based Adaptive Binary Arithmetic Coding,CABAC)、基于语法的上下文自适应性二进制算术解码(SBAC)、概率区间分割熵(PIPE)解码或另一熵编码方法或技术。在通过熵编码模块24进行熵编码之后得到码流,可将码流传输到视频解码器112或存档以供稍后传输或由视频解码器112检索。 反量化模块25及反变换模块26分别应用反量化与反变换,求和器201将反变换后的残差块得和预测的残差块相加以产生重建块,该重建块用作后续原始块进行预测的参考像素。该重建块存储于参考图像存储器27中。 图3是本申请实施例中视频解码器112的结构示意图。如图3所示,视频解码器112包含熵解码模块30、预测模块31、反量化模块32、反变换模块33、求和器301和参考图像存储器34。其中,熵解码模块30包括解析模块和码率控制模块。在一些可行的实施方式中,视频解码器112可执行与关于来自图2的视频编码器102描述的编码流程的示例性地互逆的解码流程。 在解码过程期间,视频解码器112从视频编码器102接收经编码的视频的码流。视频解码器112的熵解码模块30中的解析模块对码流进行熵解码,以产生量化系数和语法元素。熵解码模块30将语法元素转递到预测模块31。视频解码器112可在视频条带层级和/或视频块层级处接收语法元素。 熵解码模块30中的码率控制模块根据解析模块得到的待解码图像的信息,生成量化参数以使得反量化模块32进行相关计算。码率控制模块还可以根据求和器301经重构得到的重建块,以计算量化参数。 反量化模块32对码流中所提供且通过熵解码模块30所解码的量化系数以及所生成的量化参数进行反量化(例如,解量化)。反量化过程可包含使用通过视频编码器102针对视频条带中的每一视频块所计算的量化参数确定量化的程度,且同样地确定应用的反量化的程度。反变换模块33将反变换(例如,DCT、DST等变换方法)应用于反量化后的变换系数,将反量化后的变换系数按照反变换单元在像素域中产生反变换后的残差块。其中,反变换单元的尺寸与TU的尺寸相同,反变换方法与变换方法采用同样的变换方法中相应的正变换与反变换,例如,DCT、DST的反变换为反DCT、反DST或概念上类似的反变换过程。 预测模块31生成预测块后,视频解码器112通过将来自反变换模块33的反变换后的残差块与通过与预测块求和来形成经解码视频块。求和器301表示执行此求和运算的一个或多个组件。在需要时,也可应用解块滤波器来对经解码块进行滤波以便去除块效应伪影。给定帧或图像中的经解码的图像块存储于参考图像存储器34中,作为后续进行预测的参考像素。 本申请提供一种可能的视频编/解码实现方式,如图4所示,图4为本申请提供的一种视频编/解码的流程示意图,该视频编/解码实现方式包括过程①至过程⑤,过程①至过程⑤可以由上述的源装置10、视频编码器102、目的装置11或视频解码器112中的任意一个或多个执行。 过程①:将一帧图像分成一个或多个互相不重叠的并行编码单元。该一个或多个并行编码单元间无依赖关系,可完全并行/独立编码和解码,如图4所示出的并行编码单元1和并行编码单元2。 过程②:对于每个并行编码单元,可再将其分成一个或多个互相不重叠的独立编码单元,各个独立编码单元间可相互不依赖,但可以共用一些并行编码单元头信息。 独立编码单元既可以是包括亮度Y、第一色度Cb、第二色度Cr三个分量,或RGB三个分量,也可以仅包含其中的某一个分量。若独立编码单元包含三个分量,则这三个分量的尺寸可以完全一样,也可以不一样,具体与图像的输入格式相关。该独立编码单元也可以理解为每个并行编码单元所包含N个通道形成的一个或多个处理单元。例如上述Y、Cb、Cr三个分量即为构成该并行编码单元的三个通道,其分别可以为一个独立编码单元,或者Cb和Cr可以统称为色度通道,则该并行编码单元包括亮度通道构成的独立编码单元,以及色度通道构成的独立编码单元。 过程③:对于每个独立编码单元,可再将其分成一个或多个互相不重叠的编码单元,独立编码单元内的各个编码单元可相互依赖,如多个编码单元可以进行相互参考预编解码。 若编码单元与独立编码单元尺寸相同(即独立编码单元仅分成一个编码单元),则其尺寸可为过程②所述的所有尺寸。 编码单元既可以是包括亮度Y、第一色度Cb、第二色度Cr三个分量(或RGB三分量),也可以仅包含其中的某一个分量。若包含三个分量,几个分量的尺寸可以完全一样,也可以不一样,具体与图像输入格式相关。 值得注意的是,过程③是视频编解码方法中一个可选的步骤,视频编/解码器可以对过程②获得的独立编码单元进行残差系数(或残差值)进行编/解码。 过程④:对于编码单元,可以将其可再将其分成一个或多个互相不重叠的预测组(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块的关键限值(critical limit,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位。 另外,对于某些特殊的情况,视频编码器也可以直接编码图像的原始值,而不是残差值。 上述视频编码器102以及视频解码器112也可以通过另外一种实现形态来实现,例如,采用通用的数字处理器系统实现,如图5所示的编解码装置50,该编解码装置50可以为上述视频编码器102中的部分装置,也可以为上述视频解码器112中的部分装置。 该编解码装置50可以是应用于编码侧,也可以是应用于解码侧。编解码装置50包括处理器501以及存储器502。所述处理器501与存储器502相连接(如通过总线504相互连接)。可选的,编解码装置50还可包括通信接口503,通信接口503连接处理器501和存储器502,用于接收/发送数据。 存储器502可以为随机存储记忆体(Random Access Memory,RAM)、只读存储器(Read-Only Memory,ROM)、可擦除可编程只读存储器(Erasable Programmable Read OnlyMemory,EPROM)或便携式只读存储器(Compact Disc Read-Only Memory,CD-ROM)。该存储器502用于存储相关程序代码及视频数据。 处理器501可以是一个或多个中央处理器(Central Processing Unit,CPU),例如图5中所示的CPU 0和CPU 1。在处理器501是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。 该处理器501用于读取所存储器502中存储的程序代码,执行图6所对应的任意一个实施方案及其各种可行的实施方式的操作。 以下,结合上述图1示出的视频编解码系统、图2示出的视频编码器102以及图3示出的视频解码器112对本申请提供的译码方法进行详细描述。 如图6所示,为本申请提供的一种视频译码方法的流程图。该方法包括: S601、视频译码器获取待处理图像中当前块的复杂度信息,该当前块的复杂度信息用于表征当前块的像素值的差异程度,该当前块的复杂度信息至少根据当前块的像素值计算当前块的至少一个角度梯度获取得到。 可以理解的是,图像块的信息通常以该图像块中包含的像素点来表示。当某个图像块中的各个像素点的像素值差异较小时,即复杂度较低,表示该图像块的色彩变化较小,则认为该图像块较为简单。类似地,当某个图像块的各个像素点的像素值差异较大时,即复杂度较高,表示该图像块的色彩变化较大,则认为该图像块较为复杂。 具体地,当前块的复杂度信息(complexity)至少根据当前块的像素值计算当前块的至少一个角度梯度获取得到。其中,当前块的角度梯度是指基于某个角度的梯度方向计算当前块的像素值的差异。角度梯度包含水平梯度、垂直梯度以及其他角度梯度。 当前块的水平梯度是指基于水平向左或向右的梯度方向,计算当前块第t列像素值与第t-1列像素值的差值的集合。其中,t为大于1的整数。公式如下: 水平梯度H=第t列像素值-第t-1列像素值; 如图7中的(a)图所示,以4×2的图像块为例,该图像块按照图示方向经上述公式计算,可得到3×2个差值,则该图像块的水平梯度为上述3×2个差值的集合。 通过以下公式,基于上述水平梯度,计算水平复杂度(horizontal complexity,complexity_hor): complexity_hor=水平梯度中元素的和(gradH)/元素的个数(grad_block_size); 结合上述示例,当得到3×2个差值时,当前块的complexity_hor=6个差值的和/6。 类似地,当前块的垂直梯度是指基于垂直向上或向下的梯度方向,计算当前块第s行像素值与第s-1行像素值的差值的集合。其中,s为大于1的整数。公式如下: 垂直梯度V=第s列像素值-第s-1列像素值; 如图7中的(b)图所示,以4×2的图像块为例,该图像块按照图示方向经上述公式计算,可得到4×1个差值,则该图像块的水平梯度为上述4×1个差值的集合。 通过以下公式,基于上述垂直梯度,计算垂直复杂度(vertical complexity,complexity_ver): complexity_ver=垂直梯度中元素的和(gradV)/元素的个数(grad_block_size); 结合上述示例,complexity_ver=4个差值的和/4。 类似地,当前块的其他角度梯度包括45°梯度、125°梯度、225°梯度或315°梯度。分别如图8中的(a)图至(d)图所示。 通过上述方式,基于当前块的像素值计算当前块的复杂度信息,有利于为该当前块确定更准确的译码参数,例如量化参数,从而提升图像的译码效率。 上述方案中,当前块的梯度所包含的元素个数小于当前块的像素个数。考虑到更精确的当前块的复杂度的计算方式,视频译码器还可以参考当前块译码的像素值的重建值,确定当前块的复杂度信息。 可选的,视频译码器基于当前块的像素值和当前块边缘像素值的重建值,计算当前块的至少一个角度梯度;根据当前块的至少一个角度梯度,获取当前块的复杂度信息。如图9中的(a)图至(f)图所示,其中,空白部分表示原始像素,即当前块的像素值;阴影部分表示重建像素,即当前块已译码的像素值的重建值。(a)图为当前块的边缘像素值基于梯度方向的重建值,逐行计算梯度的示意图,如此以来,当前块的各个梯度所包含的元素个数与当前块的像素个数相等,从而有助于获取更精确的当前块的复杂度信息。 可选的,视频译码器基于当前块的像素值,以及待处理图像中与当前块相邻的像素值,计算当前块的复杂度信息。可以理解的是,与上述基于当前块边缘像素值的重建值计算复杂度信息的方法类似。仍如图9所示,其中,重建像素为相邻像素,表示与当前块的像素值相邻的像素值。 例如,当以图9中的(e)图进行水平梯度计算时,此时当前块包括16×2个像素,基于当前块第一列像素值的重建值,或当前块前一列的像素值计算得到的水平梯度包括16×2个差值,则当前块的complexity_hor=32个差值的和/32。 需要说明的是,以上可选的方式仅作为示例。事实上,重建像素与相邻像素的选取可以为多个。例如,重建像素为当前块的前n行或前n列或前n个重建值的平均值,相邻像素为当前块的前n行或前n列或前n个像素值的平均值,本申请对此不作限制。 可选的,当前块的复杂度信息根据当前块的至少一个角度梯度获取得到,包括以下三种可能的实现方式。 第一种可能的实现方式,视频译码器将至少一个角度梯度得到的复杂度信息中的最小值,作为该当前块的复杂度信息。也就是说,将基于某个角度梯度所计算得到的当前块像素值差异最小,则将该最小的复杂度信息作为当前块的复杂度信息。 可选的,在视频译码过程中,对待处理图像进行多通道采样,因此,当前块由多个通道图像块构成。上述第一种可能的实现方式中,视频译码器确定N个通道图像块的复杂度信息,并将N个通道图像块的复杂度信息中的最小值确定为当前块的复杂度信息。 第二种可能的实现方式,视频译码器将构成当前块的多个通道图像块中的每个通道图像块进行划分,基于划分后的子块确定当前块的复杂度信息。具体地,视频译码器将每个通道图像块划分为至少两个子块,获取每个通道图像块的至少两个子块的复杂度信息,基于每个通道图像块的至少两个子块的复杂度信息,确定每个通道图像块中,相应的通道图像块复杂度信息。 示例性的,如图10所示,将当前块某个4×2通道图像块划分为8×2的图像块再计算角度梯度,以获取当前块复杂度信息。 可选的,视频译码器将每个通道图像块的至少两个子块的复杂度信息中的最小值,确定为相应的通道图像块复杂度信息。 需要说明的是,各个通道图像块针对上述子块的划分规则可以相同或不同。其中,由于图像的采样格式可能导致各个通道图像块的大小不同。如上述采用YUV格式基于420采样格式进行采样时,亮度、第一色度和第二色度采样后的块大小不同。因此,可以将相对较大的通道图像块进行分割再确定该通道图像块的复杂度信息,有助于提升确定复杂度信息的准确性。 不限于以上两种实现方式,本申请的多通道不限于前述的RGB三通道,也可以有更多通道,比如当图像传感器为四通道传感器时,对应的待处理图像包括四通道的图像信息,比如当图像传感器为五通道传感器时,对应的待处理图像包括五通道的图像信息。 本申请中的多个通道可以包括如下通道中的至少一种或几种:Y通道、U通道、V通道、Co通道、Cg通道、R通道、G通道、B通道、alpha通道、IR通道、D通道、W通道。比如说,多个通道包括Y通道、U通道、V通道,或者,多个通道包括R通道、G通道、B通道,或者,多个通道包括、R通道、G通道、B通道、alpha通道,或者,多个通道可以包括R通道、G通道、B通道、IR通道,或者,多个通道包括R通道、G通道、B通道、W通道,或者,多个通道包括R通道、G通道、B通道、IR通道、W通道,或者,多个通道包括R通道、G通道、B通道、D通道,或者,多个通道可以包括R通道、G通道、B通道、D通道、W通道。其中,除了RGB彩色感光通道,也可能有IR通道(红外或近红外感光通道),D通道(暗光通道,主要通过红外光或近红外光),W通道(全色感光通道),针对不同的传感器有不同的通道,比如说,传感器类型可以是RGB传感器,RGBIR传感器,RGBW传感器,RGBIRW传感器,RGBD传感器,RGBDW传感器等。 第三种可能的实现方式,视频译码器获取当前块的角度预测模式所采用的预测角度,基于预测角度计算角度梯度以获取相应的复杂度信息,将该相应的复杂度信息作为当前块的复杂度信息。 其中,角度预测模式是一种常见的预测模式,用于根据指定的角度,确定当前块的像素值与重建值的残差。预测角度也可以称为预测方向,该预测角度与上述其他角度梯度类似,例如45°预测,135°预测,等等。 通过上述方式,将当前块的预测模式与复杂度信息的计算建立关联关系,从而使得当前块的处理更具针对性。 可选的,预测模式还包括均值(DC)预测模式、平面(Planar)预测模式等多种预测模式。视频译码器为当前块预设多个复杂度信息,用于根据预测模式确定当前块的复杂度信息。其中,该预设的多个复杂度信息可以根据上述多个角度梯度计算得到,也可以预设于视频译码器中。其中预设的多个复杂度信息与预测模式具有对应关系,例如多个复杂度信息包括第一复杂度信息和第二复杂度信息,第一复杂度信息对应角度预测模式(可以包括一个或多个角度预测模式),第二复杂度信息对应DC预测模式和Planar预测模式。针对当前块进行预测时,可能会基于多种预测模式得到多个预测结果,基于率失真(Rate-Distortion Optimized,RDO)代价确定最优的预测模式作为当前块的预测模式。而当前块的复杂度信息可以根据该RDO代价确定预测模式与预设复杂度信息的对应关系获取得到。结合上述示例,若基于RDO代价确定当前块的预测模式为DC预测模式,根据上述对应关系,该当前块的复杂度信息应当为第二复杂度信息。 可选的,上述预测模式划分为多种类别,其中,每个类别可以分别对应一个复杂度信息。该多种类别包括帧内模式、点预测模式、屏幕内容编码(Screen Content Coding,SCC)模式、原始值模式和回退(fallback)模式。例如,角度预测模式属于帧内模式类别。另外,上述多种类别还可以根据是否进行变换,进一步划分。例如,帧内模式划分为帧内模式+变换,以及帧内模式+不变换。复杂度信息与类别的对应关系类似于上述第一复杂度信息对应一种或多种预测模式。当确定当前块的预测模式所属的类别时,采用相应的复杂度信息计算量化参数。 可选的,上述第一种和第二种可能的实现方式中,视频译码器根据当前块的N通道图像块的至少一个角度梯度确定当前块的复杂度信息通过以下步骤S11-S12实现。 S11、视频译码器基于所述N通道图像块中每个通道图像块的像素值,获取所述每个通道图像块的复杂度信息;N为大于零的整数。 S12、视频译码器基于所述每个通道图像块的复杂度信息确定所述当前块的复杂度信息。 实现方式1,将基于各个角度梯度计算的复杂度中的最小值作为当前块的复杂度信息。 complexity=min(complexity_ver,complexity_hor,complexity_45,complexity_135,complexity_225,complexity_315) 其中,complexity_45为基于45°角度梯度计算的复杂度,complexity_225为基于225°角度梯度计算的复杂度,complexity_135为基于135°角度梯度计算的复杂度,complexity_315为基于315°角度梯度计算的复杂度。 实现方式2、将基于各个角度梯度计算的复杂度中的加权值作为当前块的复杂度信息。 complexity=complexity_ver×a+complexity_hor×b+complexity_225×c+complexity_315×d 其中0≤a,b,c,d≤1且a+b+c+d=1。 实现方式3、计算各通道原始图像块的复杂度等级(complexity_level),基于各通道原始图像块的complexity_level确定当前块的complexity_level。包括以下步骤S21-S23。 步骤S21、视频译码器根据各通道图像块的complexity,确定各通道图像块的complexity_level。 情况1、考虑人眼主观模型分级设置A-1个绝对阈值,将图像块从简单到复杂分为A个级别。 例如,对于bpp为8bit,采样格式为YUV444的图像块,各通道的complexity_level基于以下方式划分,包括:complexity≤4属于级别1,4<complexity<16属于级别2,complexity≥16属于级别3。又如,对于bpp为10bit,采样格式为YUV444的图像块,各通道的complexity_level基于以下方式划分,包括:complexity≤8属于级别1,8<complexity<64属于级别2,complexity≥64属于级别3。再如,对于bpp为12bit,采样格式为YUV444的图像块,各通道的complexity_level基于以下方式划分,包括:complexity≤16属于级别1,16<complexity<256属于级别2,complexity≥256属于级别3。 情况2、考虑人眼主观模型分级设置B-1个绝对阈值,然后再设置C个随着图像块更新的相对阈值,共将图像块分为B+C个级别。 如图11所示,为一种动态阈值与绝对阈值的关系示意图。其中,绝对阈值1为4,绝对阈值2为16,则0<动态阈值(thread)1<4,4<thread2<16。假设complexity≤thread1属于级别1,thread1<complexity≤4属于级别2,4<complexity≤thread2属于级别3,thread2<complexity≤16属于级别4,complexity>16属于级别5。其中,上述动态阈值随块更新,若当前块复杂度信息比之前若干个块复杂度信息加权小,则动态阈值变小;若当前块复杂度信息与之前若干个块复杂度信息加权相等,则动态阈值不变,若当前块复杂度信息比之前若干个块复杂度信息加权大,则动态阈值变大。 步骤S22、视频译码器基于各通道图像块的complexity_level,确定当前块的复杂度等级(block_complexity_level)。 对于人眼敏感的通道赋予较大权重,反之较小权重,各通道复杂度等级加权后得到当前块的复杂度等级。 block_complexity_level=complexity_level1×w1+complexity_level2×w2+complexity_level3×w3 其中,w可以为0。例如对于采样格式为YUV444的图像块,将Y通道系数赋予较大权重,w1=2,w2=w3=1。 步骤S23、视频译码器基于block_complexity_level表示当前块的复杂度信息。 针对实现方式3,视频译码器也可以不执行上述步骤S21,直接根据各通道图像块的complexity,确定当前块的复杂度信息(block_complexity)。即下述实现方式4。 实现方式4、视频译码器对各通道图像块的complexity直接加权,得到当前块的复杂度信息。 block_complexity=complexity1×w4+complexity2×w5+complexity3×w6 其中,w表示权重和人眼主观模型有关,对人眼敏感通道赋予较大权重,且w可以为0。再采用上述步骤S22,对block_complexity分级得到block_complexity_level。 需要说明的是,若N通道图像块划分为至少两个子块时,视频译码器仍可以采用上述方式确定N通道图像块的复杂度信息,再确定当前块的复杂度信息。 具体地,以一个通道图像块划分两个子块为例,该两个子块的复杂度信息分别为sub_complexity1,sub_complexity2,则基于两个子块的复杂度信息确定该通道图像块的复杂度信息(complexity1)时,包括以下实现方式5-实现方式7。 实现方式5、将各个子块复杂度中的最小值作为该通道图像块的复杂度信息。 complexity=min(sub_complexity1,sub_complexity2)。 实现方式6、将各个子块复杂度加权后得到该通道图像块的复杂度信息。 complexity=sub_complexity1×w1+sub_complexity2×w2,0≤w1≤1,0≤w2≤1。 实现方式7、计算各个子块复杂度等级(sub_complexity_level),基于各个子块复杂度等级确定该通道图像块的复杂度等级(complexity_level 1)。 其中,sub_complexity_level的确定方式如上述步骤S21的描述。 将各个子块的sub_complexity_level加权后得到complexity_level 1,或者将各个子块的sub_complexity_level中的最小值作为complexity_level 1。 S 602、视频译码器根据当前块的复杂度信息确定当前块的量化参数。 可选的,视频译码器根据复杂度信息确定当前块的量化参数包括以下步骤S31-S32。 S31、视频译码器根据当前块的复杂度信息,确定当前块的参考量化参数(ref_qp)。 S32、根据当前块的参考量化参数,确定当前块的量化参数。 其中,参考量化参数用于指导量化参数的生成。 可选的,视频译码器获取待处理图像的缓冲区域状态,以及缓冲区域状态和当前块的复杂度信息的对应关系,根据缓冲区域状态和复杂度信息的对应关系,确定当前块的参考量化参数。 在视频编码过程中,由于不同图像块的编码速率不同,使得输出的码流产生波动,影响传输稳定性。对此,在传输码流前,视频编码器中还包括缓冲模块,该缓冲模块中的缓冲区域用于控制码流匀速输出。可以理解的是,码流匀速输出是指码流所占比特的匀速输出,则表示该缓冲区域将编码后非匀速流入的码流,以匀速的形式流出,实现稳定输出。此外,该缓冲区域不允许出现溢出,其中溢出包括上溢和下溢,超过缓冲区域状态的最大值(max_buffer)为上溢,低于缓冲区域状态的最小值(0)为下溢。 上述缓冲区域状态用于表征针对待处理图像中完成编码的图像块在缓冲区域中占用的比特数。可以理解的是,该缓冲区域状态是随块更新的。例如,某一图像块编码后以每秒100bit的速度流入缓冲区域,而预设缓冲区域以每秒50bit匀速流出,则此时缓冲区域状态中的比特数应为100-50=50bit。 上述缓冲区域状态也可以称为物理缓冲状态(physical_buffer)。 具体地,视频译码器获取待处理图像的缓冲区域状态与当前块的复杂度信息的对应关系可通过以下步骤S41-S42实现。 S41、视频译码器根据缓冲区域状态确定满度(fullness)。 满度是指是缓冲区域状态的分段线性映射,表示缓冲区域的充盈程度。参考以下公式: fullness=physical_buffer×a+b; 其中,a和b是fullness基于physical_buffer分段线性映射参数,a表示针对physical_buffer的缩放比例,b表示针对physical_buffer的偏移程度。该参数可根据缓冲区域状态、图像信息和复杂度信息进行调整。 情况1、根据图像信息确定参数a和b。 在slice开始的若干个块,a=0.8,其中block_size表示块的尺寸大小。 可以理解的是,在slice开始的若干个块中,缓冲区域状态较小,那么可以使得fullness进一步变小,以获取较小的ref_qp,便于译码。 或者,在slice边界的块(如首行和首列),a=0,b=–bpp x block_size。 可以理解的是,边界的块没有参考像素,预测结果较差。通过确定较小的ref_qp,实现减小fullness。 情况2、根据图像信息和缓冲区域状态确定参数a和b。 根据bpp和缓冲区域状态的关系,调整参数a和b。 例如,当bpp为8,时,a=1,b=0。又如,当bpp为6,时,a=1.1,b=block_size。 可以理解的是,在低bpp下缓冲区域状态较满的时候,使得fullness进一步变大,以获取较大的ref_qp,防止缓冲区域状态超过最大值。 情况3、根据图像信息和复杂度信息确定参数a和b。 对于复杂度信息较高的图像块,a=1,b=bpp×block_size;对于复杂度信息一般的图像块,a=1,b=0;对于复杂度信息较低的图像块,a=1,b=-bpp×block_size。 可选的,复杂度信息的高低情况可以与上文复杂度信息等级对应。 情况4、根据缓冲区域状态确定参数a和b。 当时,a=0.9,b=0。当时,a=1.0,b=0。当时,a=1.2,b=0。 可以理解的是,当缓冲区域状态较空的时候,通过减小fullness从而达到减小ref_qp的效果;类似地,当缓冲区域状态较慢的时候,通过增大fullness从而达到增大ref_qp的效果。 需要说明的是,上述四种情况仅作为确定参数a和b的相关参数的示例,其中,参数取值的大小可以为其他值,对此不作限制。 S42、视频译码器根据满度计算ref_qp。 参考以下公式: ref_qp=fullness×c+d; 其中,c和d是参数,可根据缓冲区域状态、图像信息和复杂度信息进行调整。 其中,c和d是ref_qp基于fullness分段线性映射参数,c表示针对fullness的缩放比例,d表示针对fullness的偏移程度。该参数可根据图像信息、复杂度信息和满度进行调整。 情况1、根据图像信息确定参数c和d。 例如,固定参数,c=1,d=1。对于不同的位宽可以有不同的c和d。 或者,在slice边界处的块(如首行和首列)进行特殊处理,使得ref_qp相对原来变小,即使用较小的c和d。 情况2、根据满度和图像信息确定参数c和d。 例如,针对图像信息中的位宽和像素深度确定参数c和d。 对于8bpp,fullness<0.1的图像,当其为8bit图像时,c=0,d=2;当其为10bit图像时,c=0,d=4;当其为12bit图像时,c=0,d=6。对于8bpp,fullness>0.8的图像,当其为8bit图像时,c=1,d=2;当其为10bit图像时,c=1,d=4;当其为12bit图像时,c=1,d=6。其中,c和d可以随块更新。 或者,基于图像信息针对ref_qp确定给一个范围,其中,当图像信息发生变化时,其相对应的ref_qp的范围不同。具体地,该范围是最小参考量化参数(min_ref_qp)和最大参考量化参数(max_ref_qp)构成的区间。例如,对于8bpp、8bit、采样格式为YUV444的图像,当fullness<0.25时,min_ref_qp=0,max_ref_qp=8,ref_qp在(0,8)中选取;当fullness>0.85时min_ref_qp=4,max_ref_qp=56,ref_qp在(4,56)中选取;否则min_ref_qp=0,max_ref_qp=32,ref_qp在(0,32)中选取。 情况3、根据缓冲区域状态确定参数c和d。 具体地,根据physical_buffer与max_buffer的关系确定参数c和d。 当时,a=0.5,b=0,时,a=1.0,b=0,时,a=1.3,b=0。 情况4、根据复杂度信息和满度确定参数c和d。 对于复杂度信息较高的块,在不同满度的映射结果不同。例如,在fullness=0.5时,对于复杂的块ref_qp经过映射得到32,简单的块ref_qp经过映射得到为16。 或者,例如,简单块当fullness<0.2时,c>0,d=0即ref_qp随着fullness增大而增大,当0.2≤fullness≤0.8时,c=0,d>0,d的值会随块更新,ref_qp随着fullness增大而在一段fullness内保持恒定;当fullness>0.8时,c>0,即ref_qp随着fullness增大而增大;对于普通块和复杂块有类似操作。 情况5、根据复杂度信息确定参数c和d。 对于复杂度较高的块,c=1.1;对于复杂度较低的块,c=0.9。 情况6、根据复杂度信息、最大复杂度(max_complexity)、最大量化参数(max_qp)确定参数c和d。 ref_qp=complexity/max_complexity×max_qp×e+f,其中e和f是参数,与满度和buffer状态和图像信息有关。 上述基于复杂度信息和满度或缓冲区域状态确定参考量化参数还可以参考如图12a所示的曲线图。其中,随着缓冲区域状态增大,参考量化参数增大,而复杂度信息能够针对缓冲区域状态对参考量化参数的增长产生不同影响。例如,复杂度较高的图像块对于缓冲区域状态的增大,对参考量化参数也随之增大。而复杂度较低的图像块,对于缓冲区域状态的增大,可以相对于复杂度较高的图像块的参考量化参数所增大的幅度较小。当然,对于复杂度与缓冲区域状态对参考量化参数的影响始终是正相关的。 具体地,如图12b所示,假设在(0,max_buffer×0.15),以及(max_buffer×0.85)区间,以缓冲区域状态对于参考量化参数的影响为主,也就是说,在缓冲区域状态较空或较满时,复杂度的影响较小。而在(max_buffer×0.15,max_buffer×0.85)的区间中,复杂度影响较大进一步的考虑复杂度信息对参考量化参数的影响时,可能产生如图中所示的五种可能。当复杂度影响较小时,此时在该区间内,参考量化参数可不变,对应L3,当复杂度影响一般时,此时在该区间内,参考量化参数可缓慢增长,对应L2或L4,当复杂度影响较大时,此时在该区间内,参考量化参数可能发生突变,对应L1或L5。其中,基于复杂度变化的起点是根据复杂度信息本身确定的。 在图12b中各个区间所考虑的复杂度信息的影响,可参考图12c。 可选的,视频译码器确定当前块的复杂度的等级,根据当前块复杂度的等级确定目标比特(target_cost),根据目标比特获取当前块的参考量化参数。目标比特是指当前块经译码后的预测比特数。当前块经译码后的实际比特数可能大于或小于或等于该目标比特。其中,当前块的复杂度的等级可参考上文关于复杂度等级的实施例部分,此处不再赘述。 具体地,视频译码器根据当前块复杂度的等级确定目标比特可通过以下几种情况实现。 情况1、根据图像信息和复杂度确定target_cost。 具体地,每个复杂度信息保存一个参考比特数(ref_cost)且随块更新,ref_costt=0.75×ref_cost t-1+0.25×real_cost,其中real_cost表示当前块的预测无损消耗比特数,它与量化参数(qp)和实际编码比特数相关;用当前块复杂度等级下的ref_cost对其进行分段线性变换得到目标比特。参考以下公式: target_cost=ref_cost×g+h; 其中g和h是target_cost基于ref_cost分段线性映射参数,g表示针对target_cost的缩放比例,h表示针对ref_cost的偏移程度。该参数与图像信息相关,例如对于8bpp,8bitYUV444图像,ref_cost>1.1×平均比特数(ave_cost)时,a=1.8,b=-9;ref_cost<0.9×ave_cost时,a=1.2,b=-6。其中,g和h是为了根据ave_cost对ref_cost进行修正从而得到target_cost。 情况2、根据复杂度信息确定target_cost。 具体地,有I个复杂度信息,J类模式,共划分为I×J个类别,每种类别分别对应一个target_cost。例如,复杂度信息指示当前块简单或复杂,模式包括帧内块复制(Intrablock copy,IBC)模式和非IBC模式,则共有4个类别,包括简单IBC、简单非IBC、复杂IBC和复杂非IBC,每个类别分别对应一个target_cost。通过先估算每个类别的参考比特数:ref_cost=real_bit+qp/8,更新每个类别的预测比特数(pred_cost t)=0.75×pred_cost t-1+0.25×ref_cost;再计算系数:scale=bpp/(avg_complexity-offset),其中avg_complexity表示截止到当前块位置所有块的滑动平均复杂度,offset与图像格式和bpp相关;最终得到target_cost=scale×(pred_cost–offset)。 情况3、根据图像信息确定target_cost。图像信息包括位宽、图像采样格式或其他信息。 具体地,有K个位宽,L个图像采样格式,共划分为K×L个类别,每种类别分别对应一个target_cost。例如,有2个位宽(8bit,12bit),2个图像采样格式(YUV和RGB),共有4类target_cost,包括8bitYUV、8bitRGB、12bitYUV和12bitRGB。 情况4、获取满度,根据满度结合当前块的复杂度信息、缓冲区域状态或图像信息确定target_cost。 其中,获取满度的过程与步骤S41相同。 情况4.1、根据满度和缓冲区域状态确定target_cost。 具体地,target_cost=m×ref_cost+n×physical_buffer+o,其中m和n和o是参数。 若fullness>0.85,此时target_cost的设置以fullness为主导,即n的值相对m较大;若fullness<0.25,此时m相对n较大。 情况4.2、根据满度和图像信息和复杂度信息确定target_cost。 其中,fullness不同对应不同的最小目标比特(min_target_cost)和最大目标比特(max_target_cost),对target_cost进行限制。 例如,对于8bit YUV444图像,min_target_cost=bpp×fullness×p1+q1,max_target_cost=bpp×fullness×p2+q2;其中p1和q1在fullness<0.25时使min_target_cost更小,在fullness>0.75使min_target_cost更大;其中p2和q2在fullness<0.25时使max_target_cost更小,在fullness>0.75使max_target_cost更大。 情况4.3、根据满度和复杂度信息确定target_cost。 针对复杂度较低的简单块,当fullness<0.1时,m>0,n=0,即ref_qp随着fullness增大而增大,当0.1≤fullness≤0.9时,m=0,n>0,n的值会随块更新,ref_qp随着fullness增大而在一段fullness内保持恒定;当fullness>0.9时,m>0,即ref_qp随着fullness增大而增大;对于普通块和复杂块有类似操作。对于简单块和普通块的恒定段,当实际编码比特大于目标比特时,n的值增大,反之减小,即通过调整n使实际比特消耗小于等于target_cost;对于复杂块,通过调整n使实际比特消耗大于等于target_cost(若简单和普通块未节约比特,则复杂块无多余比特可用,要严格小于等于target_cost)。 可选的,视频译码器根据目标比特确定当前块的参考量化参数。参考下述公式: ref_qp=target_cost×u+v; 其中,u和v是参数。u和v是ref_qp基于target_cost分段线性映射参数,u表示针对target_cost的缩放比例,v表示针对target_cost的偏移程度。例如,u=8/3,v=ref_cost×8。 可选的,视频译码器根据参考量化参数确定量化参数。参考以下公式:qp=ref_qp×x+y。x和y是qp基于ref_qp分段线性映射参数,x表示针对ref_qp的缩放比例,y表示针对ref_qp的偏移程度。 具体地,视频译码器根据当参考量化参数确定量化参数可通过以下几种情况实现。 情况1、根据图像信息确定参数x与y。 当x为1,y为0时,参考量化参数为量化参数。 或者,对于YUV444图像,各通道y=0。或Y通道y=0,色度通道,x=1,y=0。 或者,ref_qp在(0,16),对Y通道y=0,对色度通道y=0;ref_qp在(17,32)时,对Y通道y=2,对色度通道y=4;ref_qp在(33,63)时,对Y通道x=1,y=0,对色度通道x=1,y=0。 情况2、根据复杂度信息确定参数x与y。 具体地,视频译码器根据当前块的复杂度信息确定加权系数,该加权系数用于根据当前块的复杂程度调整当前块的量化参数;根据加权系数与当前块的参考量化参数,确定当前块的量化参数。 x=complexity1×w1/(complexity1×w1+complexity2×w2+complexity3×w3) 其中,w表示权重,包括w1,w2,w3,0≤w≤1。complexity1、complexity2和complexity3分别表示当前块的三个通道的复杂度信息。 情况3、根据M个已译码图像块的复杂度信息和当前块的复杂度信息,确定加权系数;根据加权系数与当前块的参考量化参数,确定当前块的量化参数。 其中,window_complexity表示滑动窗口中包括的图像块的复杂度。随滑动窗口中图像块的变化,该window_complexity相应更新。具体可根据以下公式计算得到。 window_complexity z=window_complexity z-1×0.75+complexity×0.25; x=window_complexity1×w4/(window_complexity1×w4+window_complexity2×w5+window_complexity3×w6); y=0。 S 603、视频译码器基于量化参数对当前块进行译码。 可选的,当前块的量化参数为当前块的码率控制单元的量化参数,视频译码器基于当前块的量化参数对当前块进行译码,包括:根据码率控制单元的量化参数确定当前块的编码单元的量化参数;根据编码单元的量化参数对当前块进行译码。 可以理解的是,码率控制模块在确定量化参数时,是根据码率控制单元进行计算的。当码率控制单元的尺寸大于基本编码单元(量化单元)的尺寸时,则表示多个基本编码单元采用相同的量化参数。当码率控制单元的尺寸等于量化单元的尺寸时,则可以获取一一对应的量化参数。而当码率控制单元的尺寸小于量化单元的尺寸时,则表示一个量化单元对应多个量化参数,此时需要采用一定的策略为该量化单元基于该多个量化参数确定最终的量化参数。 第一种可能的实现方式,视频译码器将量化单元基于码率控制单元进行划分,即,使得多个量化参数与多个量化单元一一对应。 第二种可能的实现方式中,将多个量化参数进行加权或选取最小值,得到一个量化参数,与该一个量化单元对应。 第三种可能的实现方式中,基于复杂度信息和缓冲区域状态,将多个量化参数进行合并。示例性的,将复杂度信息相近的量化参数合并为一个,相近的复杂度信息可以为满足一定差值范围的多个复杂度信息。 上述合并方式可以为相近的量化参数加权得到一个量化参数,或者选取相近的量化参数中的最小值作为合并后的量化参数。 将合并后的一个或多个量化参数再采用上述第一种可能的实现方式,得到多个量化单元,与量化参数对应;或者,也可以再采用上述的第二种可能的实现方式,获取一个量化参数与一个量化单元对应。对此不作限制。 可以理解的是,步骤S603中,包括视频译码器基于量化参数对当前块进行编码或解码。 可选的,在编码时,视频编码器将当前块的复杂度信息编入码流,或者将当前块的量化参数编入码流。相应地,解码端获取码流中的复杂度信息计算量化参数进行解码,或者解码端获取码流中的量化参数进行解码。当然,视频编码器也可以将上述两种信息均编入码流中。 需要说明的是,当视频编码器将当前块的复杂度信息编入码流时,视频解码器相应获取复杂度信息计算量化参数,但视频解码器可以不采用该复杂度信息更新其他参数。示例性的,上述target_cost的确定方式中涉及到根据当前块的复杂度信息进行更新,但在具体实现时,根据复杂度更新可能与其本身基于历史信息(如已译码图像块所占用的比特数和已译码图像块的量化参数)更新的结果不同,此时,可以不采用复杂度信息更新该参数,仍保留原始更新参数的方式。 通过上述方法,计算当前块的复杂度信息,有利于为该当前块确定更准确的译码参数,例如量化参数,从而提升图像的译码效率。 可选的,基于上述译码方法得到的码流,在编入码流前,还可以进行以下码流分组方法。 其中,如上述针对条带的描述可知,图像可以基于图像宽度(image_width)和图像高度(image_height)划分为多个条带。image_width是用于规定图像亮度分量的宽度,即水平方向样本数,是16位无符号整数。image_width的单位应是图像每行样本数。可显示区域的左上角样本应与解码图像左上角样本对齐。ImageWidth的值等于image_width的值,ImageWidth的值不应为0并且应为16的整数倍。image_height是用于规定图像亮度分量的高度,即垂直方向扫描行数,16位无符号整数。image_height的单位应是图像样本的行数,ImageHeight的值等于image_height的值,ImageHeight的值不应为0并且应为2的整数倍。 条带是图像中的固定矩形区域,包含若干编码单元在图像内的部分,条带之间不重叠。划分方式不进行限定基于条带可进一步划分出CU。其中,基于图像划分条带时,为了划分出整数个条带,可能调整当前图像宽度或图像高度。如图13a所示,real_width、real_height为真实图像的边界,即图像可显示区域边界。为了划分条带,适应性增大图像的宽度和高度,从而得到图中的image_width和image_height。 条带具有宽度(slice_width)和高度(slice_height)。例如,可通过SliceNum X表示一副图像水平方向上slice的个数,SliceNum Y表示一幅图像垂直方向上slice的个数。如图13b示出的一种条带的示意图。 一种码流分组方法中,每个slice码流长度固定,其中前R-1个片段(chunk)长度固定,最后一个不固定。如图14a与图14b所示,分别为编码端和解码端指示该码流分组方法的流程示意图。 如图14a所示,为一种编码端的码流分组方法的流程示意图,包括步骤S1401a-S1406a。 S1401a、将图像在水平方向和垂直方向进行划分,在水平方向得到sliceNumX个矩形条带,在垂直方向得到sliceNumY个矩形条带。 S1402a、计算总资源total_resourec total_resoure是指基于每一个像素点需要的比特数计算得到该条带所占用的资源。 total_resourec=((slice_width×slice_height×目标像素深度(target_bpp)+7)>>3)<<3。 根据总资源total_resource确定chunk的数目(chunkNum), chunkNum=total_resoure/size+n, 其中,n=total_resoure%size==0?0:1,size是8的整数倍,例如size=target_bpp×32×block_num,。 其中,block_num为预设配置参数,block_num是4的整数倍。 其中,target_bpp是指编码端规定的参数,表示经过压缩后平均每一个像素点需要的比特数,例如对于10比特YUV444格式的原始图像,如果target_bpp为5,表示压缩了6倍。 S1403a、依次编码每个slice行内的sliceNumX个slice,生成sliceNumX个比特流缓冲区slicebuffer[sliceNumX],并对比特流缓冲区进行填零和字节对齐。 S1404a、将每个比特流缓冲区换分为chunkNum个chunk片段,chunksize的计算方式为:前chunkNum-1个chunk的长度chunksize=size1,最后一个chunk的长度为size2,其中size1=size,size2=total_resouce–(chunkNum-1)×size。 S1405a、对于一个slice行内的sliceNum个slice,依次编码chunkNum次,每次将每个slice的chunk片段交织在一起形成最终码流。 S1406a、slice是否编码结束,如果没有结束,返回第三步,编码下一个slice行。 如图14b所示,为一种解码端的码流分组方法的流程示意图,包括步骤S1401b-S1406b。 S1401b、与上述步骤S1402a相同。 S1402b、与上述步骤S1402b相同。 S1403b、接收码流,对于每个slice行的sliceNumX个slice,依次解析chunkNum次,每次解析slicenumX个码流片段解交织到每个slice的码流缓冲区,chunksize的计算方式为:前chunkNum-1个chunk的长度chunksize=size1,最后一个chunk的长度为size2,其中size1=size,size2=total_resouce–(chunkNum-1)×size。 S1404b、基于每个条带的比特缓冲区对每个条带进行解码。 S1405b、得到每个矩形条带的重建图像。 S1406b、slice码流解析是否结束,如果没有结束,返回第三步,依次解析下一个slice行。 如图15所示,当sliceNumX为2时,基于上述一种码流分组方法chunk片段的交织示意图。 另一种码流分组方法中,每个slice码流长度固定,其中第r个chunk长度不固定,其他r-1个chunk长度固定。如图16a与图16b所示,分别为编码端和解码端指示该码流分组方法的流程示意图。 如图16a所示,为一种编码端的码流分组方法的流程示意图,包括步骤S1601a-S1606a。 S1601a、与上述步骤S1402a相同。 S1602a、与上述步骤S1402b相同。 S1603a、依次编码每个slice行内的sliceNumX个slice,生成slicenumX个比特流缓冲区slicebuffer[sliceNumX],并对比特流缓冲区进行填零和字节对齐; S1604a、将每个比特流缓冲区换分为chunkNum个chunk片段,每个chunk的长度chunksize不固定, 其中,chunksize的计算方式为:第k个chunk的长度为size1,其它chunkNum-1个chunk的长度chunksize=size2,,其中size2=size,size1=total_resouce–(chunkNum-1)×size,k的取值范围1~chunkNum。 S1605a、对于一个slice行内的sliceNum个slice,依次编码chunkNum次,每次将每个slice的chunk片段交织在一起形成最终码流。 S1606a、slice是否编码结束,如果没有结束,返回第三步,编码下一个slice行。 如图16b所示,为一种解码端的码流分组方法的流程示意图,包括步骤S1601b-S1606b。 S1601b、与上述步骤S1402a相同。 S1602b、与上述步骤S1402b相同。 S1603b、接收码流,对于每个slice行的sliceNumX个slice,依次解析chunkNum次,每次解析slicenumX个码流片段解交织到每个slice的码流缓冲区,chunksize的计算方式为:第k个chunk的长度为size1,其它chunkNum-1个chunk的长度chunksize=size2,,其中size2=size,size1=total_resouce–(chunkNum-1)×size,k的取值范围1~chunkNum。 S1604b、基于每个条带的比特缓冲区对每个条带进行解码。 S1605b、得到每个矩形条带的重建图像。 S1606b、slice码流解析是否结束,如果没有结束,返回第三步,依次解析下一个slice行。 如图17所示,当sliceNumX为2时,基于上述另一种码流分组方法chunk片段的交织示意图。 需要说明的是,上述方案中未进行特殊说明的方案,均可在解码侧或编码侧进行。 需要说明的是,在不冲突的情况下是,上文中任意多个实施例中的部分或全部内容可以构成新的实施例。 本申请实施例提供一种视频译码装置,该视频译码装置可以为视频译码器或视频编码器或视频解码器。具体的,视频译码装置用于执行以上视频译码方法中的视频译码器所执行的步骤。本申请实施例提供的视频译码装置可以包括相应步骤所对应的模块。 本申请实施例可以根据上述方法示例对视频译码装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。 在采用对应各个功能划分各个功能模块的情况下,图18示出上述实施例中所涉及的视频译码装置的一种可能的结构示意图。如图18所示,视频译码装置180包括获取模块1801、确定模块1802和译码模块1803。 获取模块1801,用于获取待处理图像中当前块的复杂度信息,当前块的复杂度信息至少根据当前块的像素值计算当前块的至少一个角度梯度获取得到,例如上述步骤S601。 确定模块1802,用于根据当前块的复杂度信息确定当前块的量化参数;例如上述步骤S602。 译码模块1803,用于基于量化参数对当前块进行译码,例如上述步骤S603。 在一种示例中,获取模块1801,具体用于基于当前块的像素值和当前块已译码的像素值的重建值,计算当前块的至少一个角度梯度;根据当前块的至少一个角度梯度,获取当前块的复杂度信息。 在一种示例中,获取模块1801,具体用于基于当前块的像素值和待处理图像中与当前块相邻的像素值,计算当前块的至少一个角度梯度;根据当前块的至少一个角度梯度,获取当前块的复杂度信息。 在一种示例中,获取模块1801,具体用于获取当前块的角度预测模式所采用的预测角度;基于预测角度,计算角度梯度以获取相应的复杂度信息;将相应的复杂度信息作为当前块的复杂度信息。 在一种示例中,当前块为N通道图像块,获取模块1801,具体用于基于N通道图像块中每个通道图像块的像素值,获取每个通道图像块的复杂度信息;N为大于零的整数;基于每个通道图像块的复杂度信息确定当前块的复杂度信息。 在一种示例中,获取模块1801,具体用于将每个通道图像块划分为至少两个子块;确定每个通道图像块的至少两个子块的复杂度信息;基于每个通道图像块的至少两个子块的复杂度信息,确定每个通道图像块中,相应的通道图像块的复杂度信息。 在一种示例中,获取模块1801,具体用于将每个通道图像块的至少两个子块的复杂度信息中的最小值,确定为相应的通道图像块的复杂度信息。 在一种示例中,获取模块1801,具体用于将每个通道图像块的复杂度信息中的最小值确定为当前块的复杂度信息。 在一种示例中,获取模块1801,具体用于基于每个通道图像块的复杂度,确定每个通道图像块的复杂度等级;基于每个通道图像块的复杂度等级,确定当前块的复杂度信息。 在一种示例中,确定模块1802,具体用于根据当前块的复杂度,确定当前块的参考量化参数;根据当前块的参考量化参数,确定当前块的量化参数。 在一种示例中,当视频译码方法为视频编码方法时,确定模块1802,具体用于获取待处理图像的缓冲区域状态,缓冲区域状态用于表征针对待处理图像中完成编码的图像块在缓冲区域中占用的比特数,其中,缓冲区域用于控制待处理图像的码流匀速输出;根据缓冲区域状态和当前块的复杂度信息的对应关系,确定当前块的参考量化参数。 在一种示例中,确定模块1802,具体用于确定当前块的复杂度等级;根据当前块的复杂度等级确定对应的目标比特,目标比特是指当前块在码流中占用的比特数;根据目标比特获取当前块的参考量化参数。 在一种示例中,确定模块1802,具体用于根据当前块的复杂度信息确定加权系数,加权系数用于根据当前块的复杂程度调整当前块的量化参数;根据第一加权系数与当前块的参考量化参数,确定当前块的量化参数。 在一种示例中,当前块的复杂度信息是基于当前块的码率控制单元计算得到,码率控制单元是计算当前块的复杂度信息的基本处理单元;当前块的量化参数为当前块的码率控制单元的量化参数,译码模块1803,具体用于根据码率控制单元的量化参数确定当前块的译码单元的量化参数;根据译码单元的量化参数对当前块进行译码。 其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。 当然,本申请实施例提供的视频译码装置包括但不限于上述模块,例如:视频译码装置还可以包括存储模块1804。 存储模块1804可以用于存储该视频译码装置的程序代码和数据。 本申请实施例还提供了一种电子设备,该电子设备包括上述视频译码装置180,该视频译码装置180执行上文提供的任意一种视频译码器所执行的方法。 本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当该计算机程序在计算机上运行时,使得该计算机执行上文提供的任意一种视频解码器所执行的方法。 关于上述提供的任一种计算机可读存储介质中相关内容的解释及有益效果的描述,均可以参考上述对应的实施例,此处不再赘述。 本申请实施例还提供了一种芯片。该芯片中集成了用于实现上述视频译码装置100的功能的控制电路和一个或者多个端口。可选的,该芯片支持的功能可以参考上文,此处不再赘述。本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可通过程序来指令相关的硬件完成。所述的程序可以存储于一种计算机可读存储介质中。上述提到的存储介质可以是只读存储器,随机接入存储器等。上述处理单元或处理器可以是中央处理器,通用处理器、特定集成电路(application specific integrated circuit,ASIC)、微处理器(digital signal processor,DSP),现场可编程门阵列(field programmable gatearray,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。 本申请实施例还提供了一种包含指令的计算机程序产品,当该指令在计算机上运行时,使得计算机执行上述实施例中的任意一种方法。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如SSD)等。 应注意,本申请实施例提供的上述用于存储计算机指令或者计算机程序的器件,例如但不限于,上述存储器、计算机可读存储介质和通信芯片等,均具有非易失性(non-transitory)。 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digitalsubscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。 尽管在此结合各实施例对本申请进行了描述,然而,在实施所要求保护的本申请过程中,本领域技术人员通过查看附图、公开内容、以及所附权利要求书,可理解并实现公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部分或步骤,“一”或“一个”不排除多个的情况。单个处理器或其他单元可以实现权利要求中列举的若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组合起来产生良好的效果。 尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。 背景技术 视频译码技术在视频处理领域发挥着重要的作用。其中,视频译码技术包括视频编码和解码。而在视频编解码过程中,针对视频中的图像进行量化或反量化的处理过程,是决定图像质量的关键。量化主要通过量化参数替代码流中部分原始数据,实现减少码流中原始数据的冗余。但量化的过程也会带来图像失真的风险。因此,为了提升视频译码效率,为视频中的图像确定更精准的量化参数是目前亟待解决的问题。 发明内容 本申请实施例提供一种视频译码方法、装置及存储介质,有助于提升视频译码效率。 为达到上述目的,本申请实施例采用如下技术方案: 第一方面,本申请实施例提供一种视频译码方法,该方法应用于视频编码设备或视频解码设备或视频编解码设备的芯片中,该方法包括:获取待处理图像中当前块的复杂度信息,当前块的复杂度信息至少根据当前块的像素值计算当前块的至少一个角度梯度获取得到;根据当前块的复杂度信息确定当前块的量化参数;基于量化参数对当前块进行译码。 当前量化参数在视频编解码过程中具有重要的作用。采用本申请提出的视频译码方法,视频译码装置获取待处理图像中当前块的复杂度,该复杂度是基于当前块的信息计算得到的,基于该复杂度确定当前块的量化参数并进行译码,有助于为当前块确定更准确的量化参数,从而提升视频的译码效率。此外,若采用上述方法进行视频解码,解码端从码流中获取当前块的复杂度确定量化参数,有助于量化参数在码流中占用的资源,从而使得码流中传输更多有效数据,提升传输效率。 在一种可能的实现方式中,获取待处理图像中当前块的复杂度信息,包括:基于当前块的像素值和当前块已译码的像素值的重建值,计算当前块的至少一个角度梯度;根据当前块的至少一个角度梯度,获取当前块的复杂度信息。 该种可能的实现方式中,通过当前块的像素值和重建值计算当前块的复杂度,有助于为当前块确定更准确的量化参数,从而提升视频的译码效率。 在一种可能的实现方式中,获取待处理图像中当前块的复杂度信息,包括:基于当前块的像素值和待处理图像中与当前块相邻的像素值,计算当前块的至少一个角度梯度;根据当前块的至少一个角度梯度,获取当前块的复杂度信息。 该种可能的实现方式中,通过当前块的像素值和与当前块相邻的像素值计算当前块的复杂度,有助于为当前块确定更准确的量化参数,从而提升视频的译码效率。 在一种可能的实现方式中,获取待处理图像中当前块的复杂度信息,包括:获取当前块的角度预测模式所采用的预测角度;基于预测角度,计算角度梯度以获取相应的复杂度信息;将相应的复杂度信息作为当前块的复杂度信息。 该种可能的实现方式中,通过当前块的角度预测模式确定相应的复杂度,有助于为当前块确定更准确的量化参数,对于解码端,有助于节省码流中的资源,提升视频的译码效率。 在一种可能的实现方式中,当前块为N通道图像块,获取待处理图像中当前块的复杂度信息,包括:基于N通道图像块中每个通道图像块的像素值,获取每个通道图像块的复杂度信息;N为大于零的整数;基于每个通道图像块的复杂度信息确定当前块的复杂度信息。 该种可能的实现方式中,提供了一种基于多个通道图像块的复杂度确定当前块复杂度的实现方式,提升方案的可实施性。此外,基于将图像划分为多个通道分别进行计算,有助于提升复杂度的准确性。 在一种可能的实现方式中,基于N通道图像块中每个通道图像块的像素值,获取每个通道图像块的复杂度信息,包括:将每个通道图像块划分为至少两个子块;确定每个通道图像块的至少两个子块的复杂度信息;基于每个通道图像块的至少两个子块的复杂度信息,确定每个通道图像块中,相应的通道图像块的复杂度信息。 该种可能的实现方式中,提供了一种基于多个通道图像块的复杂度确定当前块复杂度的实现方式,其中,通过将多个通道图像块进一步划分确定复杂度,有助于提升复杂度的精确度。 在一种可能的实现方式中,基于每个通道图像块的至少两个子块的复杂度信息,确定相应的通道图像块的复杂度信息,包括:将每个通道图像块的至少两个子块的复杂度信息中的最小值,确定为相应的通道图像块的复杂度信息。 该种可能的实现方式中,提供了一种基于划分后的多个通道图像块的复杂度确定多个通道图像块的复杂度的实现方式,提升方案的可实施性。 在一种可能的实现方式中,基于每个通道图像块的复杂度信息确定当前块的复杂度信息,包括:将每个通道图像块的复杂度信息中的最小值确定为当前块的复杂度信息。 该种可能的实现方式中,提供了一种基于多个通道图像块的复杂度确定多个通道图像块的复杂度的实现方式,提升方案的可实施性。 在一种可能的实现方式中,基于每个通道图像块的复杂度确定当前块的复杂度,包括:基于每个通道图像块的复杂度,确定每个通道图像块的复杂度等级;基于每个通道图像块的复杂度等级,确定当前块的复杂度信息。 该种可能的实现方式中,提供了一种基于划分后的多个通道图像块的复杂度确定多个通道图像块的复杂度的实现方式,提升方案的可实施性。 在一种可能的实现方式中,根据当前块的复杂度确定当前块的量化参数,包括:根据当前块的复杂度,确定当前块的参考量化参数;根据当前块的参考量化参数,确定当前块的量化参数。 该种可能的实现方式中,提供了一种基于参考量化参数确定量化参数的方法,提升量化参数的准确性。 在一种可能的实现方式中,当视频译码方法为视频编码方法时,根据当前块的复杂度信息,确定当前块的参考量化参数,包括:获取待处理图像的缓冲区域状态,缓冲区域状态用于表征针对待处理图像中完成编码的图像块在缓冲区域中占用的比特数,其中,缓冲区域用于控制待处理图像的码流匀速输出;根据缓冲区域状态和当前块的复杂度信息的对应关系,确定当前块的参考量化参数。 该种可能的实现方式中,提供了一种根据缓冲区域状态和当前块的复杂度信息确定当前块参考量化参数的实现方式,提升方案的可实施性。 在一种可能的实现方式中,根据当前块的复杂度信息,确定当前块的参考量化参数,包括:确定当前块的复杂度等级;根据当前块的复杂度等级确定对应的目标比特,目标比特是指当前块在码流中占用的比特数;根据目标比特获取当前块的参考量化参数。 该种可能的实现方式中,提供了一种根据目标比特确定当前块参考量化参数的实现方式,提升方案的可实施性。 在一种可能的实现方式中,根据当前块的参考量化参数,确定当前块的量化参数,包括:根据当前块的复杂度信息确定加权系数,加权系数用于根据当前块的复杂程度调整当前块的量化参数;根据第一加权系数与当前块的参考量化参数,确定当前块的量化参数。 该种可能的实现方式中,提供了一种根据参考量化参数确定当前块的量化参数的实现方式,提升方案的可实施性。 在一种可能的实现方式中,当前块的复杂度信息是基于当前块的码率控制单元计算得到,码率控制单元是计算当前块的复杂度信息的基本处理单元;当前块的量化参数为当前块的码率控制单元的量化参数,基于当前块的量化参数对当前块进行译码,包括:根据码率控制单元的量化参数确定当前块的译码单元的量化参数;根据译码单元的量化参数对当前块进行译码。 该种可能的实现方式中,提供了一种确定当前块的量化参数的实现方式,其中,当码率控制单元的尺寸小于量化单元的尺寸时,相应计算得到的多个量化参数用于一个量化单元进行量化,针对该问题,上述方法提供了相应的解决方案,提升方案的可实施性。 第二方面,本申请实施例提供一种视频译码装置,该装置具有实现上述第一方面中任一项的视频译码方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。 第三方面,提供一种视频编码器,包括:处理器和存储器;该存储器用于存储计算机执行指令,当该视频编码器运行时,该处理器执行该存储器存储的该计算机执行指令,以使该视频编码器执行如上述第一方面中任一项的视频译码方法。 第四方面,提供一种视频解码器,包括:处理器和存储器;该存储器用于存储计算机执行指令,当该视频解码器运行时,该处理器执行该存储器存储的该计算机执行指令,以使该视频解码器执行如上述第一方面中任一项的视频译码方法。 第五方面,提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机可以执行上述第一方面中任一项的视频译码方法。 第六方面,提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机可以执行上述第一方面中任一项的视频解译方法。 第七方面,提供一种电子设备,电子设备包括视频译码装置,处理电路被配置为执行如上述第一方面中任一项的视频译码方法。 第八方面,提供一种芯片,芯片包括处理器,处理器和存储器耦合,存储器存储有程序指令,当存储器存储的程序指令被处理器执行时实现上述第一方面中任意一项的视频译码方法。 第九方面,提供一种视频编解码系统,该系统包括视频编码器和视频解码器,视频编码器被配置为执行如上述第一方面中任一项的视频译码方法,视频解码器被配置为执行如上述第一方面中任一项的视频译码方法。 第二方面至第九方面中的任一种实现方式所带来的技术效果可参见第一方面中对应实现方式所带来的技术效果,此处不再赘述。 The embodiment of the invention provides a video decoding method and device and a storage medium, relates to the technical field of video decoding, and helps to improve the decoding efficiency. The method comprises the steps of obtaining complexity information of a current block in a to-be-processed image, wherein the complexity information of the current block is obtained by calculating at least one angle gradient of the current block at least according to a pixel value of the current block; determining a quantization parameter of the current block according to the complexity information of the current block; and decoding the current block based on the quantization parameter. 1.一种视频图像解码方法,应用于解码端,其特征在于,包括: 获取待处理图像中当前块的像素值,所述当前块的像素值包括N通道图像块中每个通道图像块的像素值;所述N通道图像块至少包括亮度通道图像块和色度通道图像块,所述N为大于零的整数; 基于所述N通道图像块中每个通道图像块的像素值,获取所述每个通道图像块的复杂度信息; 基于所述每个通道图像块的复杂度信息的加权值得到当前块的复杂度信息; 根据所述当前块的复杂度信息确定所述当前块的量化参数; 基于所述量化参数对所述当前块进行解码。 2.根据权利要求1所述的方法,其特征在于,所述根据所述当前块的复杂度确定所述当前块的量化参数,包括: 根据所述当前块的复杂度,确定所述当前块的参考量化参数; 根据所述当前块的参考量化参数,确定所述当前块的量化参数。 3.根据权利要求1-3任一项所述的方法,其特征在于,所述基于所述当前块的量化参数对所述当前块进行解码,包括: 基于所述当前块的量化参数,对所述当前块进行反量化,得到所述当前块的反量化后的变换系数; 对所述当前块的反量化后的变换系数进行反变换,得到反变换后的残差块; 基于所述反变换后的残差块,得到解码后的所述当前块。 4.一种视频图像编码方法,应用于编码端,其特征在于,包括: 获取待处理图像中当前块的像素值,所述当前块的像素值包括N通道图像块中每个通道图像块的像素值;N为大于零的整数; 基于所述N通道图像块中每个通道图像块的像素值,获取所述每个通道图像块的复杂度信息;N为大于零的整数; 基于所述每个通道图像块的复杂度信息的加权值得到当前块的复杂度信息; 根据所述当前块的复杂度信息确定所述当前块的量化参数; 基于所述量化参数对所述当前块进行译码。 5.根据权利要求4所述的方法,其特征在于,所述基于所述N通道图像块中每个通道图像块的像素值,获取所述每个通道图像块的复杂度信息,包括: 基于所述每个通道图像块的像素值和所述每个通道图像块的已译码的像素值的重建值,计算所述每个通道图像块的至少一个角度梯度; 根据所述每个通道图像块的至少一个角度梯度,获取所述每个通道图像块的复杂度信息。 6.根据权利要求4所述的方法,其特征在于,所述基于所述N通道图像块中每个通道图像块的像素值,获取所述每个通道图像块的复杂度信息,包括: 基于所述每个通道图像块的像素值和所述待处理图像中与所述每个通道图像块相邻的像素值,计算所述每个通道图像块的至少一个角度梯度; 根据所述每个通道图像块的至少一个角度梯度,获取所述每个通道图像块的复杂度信息。 7.根据权利要求4所述的方法,其特征在于,所述基于所述N通道图像块中每个通道图像块的像素值,获取所述每个通道图像块的复杂度信息,包括: 获取所述每个通道图像块的角度预测模式所采用的预测角度; 基于所述预测角度,计算角度梯度以获取相应的复杂度信息; 将所述相应的复杂度信息作为所述每个通道图像块的复杂度信息。 8.根据权利要求4所述的方法,其特征在于,所述每个通道图像块的预测模式包括第一预测模式和第二预测模式,所述第一预测模式和所述第二预测模式分别预设有相应的复杂度信息,所述基于所述N通道图像块中每个通道图像块的像素值,获取所述每个通道图像块的复杂度信息,包括: 获取基于所述第一预测模式和所述第二预测模式的预测结果; 基于率失真代价在所述预测结果中确定最优预测模式; 将所述最优预测模式的复杂度信息作为所述每个通道图像块的复杂度信息。 9.根据权利要求4所述的方法,其特征在于,所述基于所述N通道图像块中每个通道图像块的像素值,获取所述每个通道图像块的复杂度信息,包括: 基于所述至少一个角度梯度计算的复杂度信息的加权值得到所述每个通道图像块的复杂度信息。 10.根据权利要求4所述的方法,其特征在于,所述基于所述N通道图像块中每个通道图像块的像素值,获取所述每个通道图像块的复杂度信息,包括: 将所述每个通道图像块划分为至少两个子块; 确定所述每个通道图像块的至少两个子块的复杂度信息; 基于所述每个通道图像块的至少两个子块的复杂度信息,确定所述每个通道图像块中,相应的通道图像块的复杂度信息。 11.根据权利要求10所述的方法,其特征在于,所述基于所述每个通道图像块的至少两个子块的复杂度信息,确定所述每个通道图像块中,相应的通道图像块的复杂度信息,包括: 基于所述至少两个子块的复杂度信息的加权值得到相应的通道图像块的复杂度信息。 12.一种视频解码装置,其特征在于,包括: 获取模块,用于获取待处理图像中当前块的像素值,所述当前块的像素值包括N通道图像块中每个通道图像块的像素值;所述N通道图像块至少包括亮度通道图像块和色度通道图像块,所述N为大于零的整数; 所述获取模块,还用于基于所述N通道图像块中每个通道图像块的像素值,获取所述每个通道图像块的复杂度信息; 确定模块,用于基于所述每个通道图像块的复杂度信息的加权值得到当前块的复杂度信息; 所述确定模块,还用于根据所述当前块的复杂度信息确定所述当前块的量化参数; 译码模块,用于基于所述量化参数对所述当前块进行解码。 13.一种视频编码装置,其特征在于,包括: 获取模块,用于获取待处理图像中当前块的像素值,所述当前块的像素值包括N通道图像块中每个通道图像块的像素值;N为大于零的整数; 所述获取模块,还用于基于所述N通道图像块中每个通道图像块的像素值,获取所述每个通道图像块的复杂度信息;N为大于零的整数; 确定模块,用于基于所述每个通道图像块的复杂度信息的加权值得到当前块的复杂度信息; 所述确定模块,还用于根据所述当前块的复杂度信息确定所述当前块的量化参数; 译码模块,用于基于所述量化参数对所述当前块进行译码。 14.一种视频解码器,其特征在于,包括处理器和存储器; 所述存储器存储有所述处理器可执行的指令; 所述处理器被配置为执行所述指令时,使得所述视频解码器实现如权利要求1-3任一项所述的视频图像解码方法。 15.一种视频编码器,其特征在于,包括处理器和存储器; 所述存储器存储有所述处理器可执行的指令; 所述处理器被配置为执行所述指令时,使得所述视频编码器实现如权利要求4-11中任一项所述的视频图像编码方法。 16.一种视频编解码系统,其特征在于,包括视频编码器和视频解码器,所述视频解码器用于执行如权利要求1-3中任一项所述的方法,所述视频编码器用于执行如权利要求4-11中任一项所述的方法。 17.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有程序,当所述程序在所述计算机上运行时,使得所述计算机执行如权利要求1-3或4-11中任一项所述的方法。