一种低时延低复杂度的固定码率控制算法的制作方法

文档序号:23177072发布日期:2020-12-04 14:07阅读:164来源:国知局
一种低时延低复杂度的固定码率控制算法的制作方法

本发明属于视频传输技术领域,具体涉及一种低时延低复杂度的固定码率控制算法。



背景技术:

近年来随着无人机、fpv,vr,影视拍摄等应用的发展,伴随而来的视频图像传输及处理技术也得到迅猛发展。尤其是近几年来涌现的越来越多的视频编解码标准对视频质量的提高起了功不可没的作用。其中,码率控制又是视频编码中非常重要的技术之一,虽然它不是视频编码的标准,但是任何标准没有合适的码率控制方法,客户端缓冲区就有可能发生上溢或下溢。其次,目前视频传输系统对时延的要求也越来越高,尤其是随着视频图像编解码的发展和5g技术的发展,其视频质量和存储基本上不再是难题,但是延时和复杂度仍旧是急需解决的问题。

传统的码率控制一般都是采用率失真优化和量化技术紧密结合,量化是平衡编码信息量和编码失真间的工具,调整量化参数也是传统码率控制常用的策略。其中传统的码率控制算法又根据目标码流是否恒定分为固定速率的码率控制和变速率的码率控制。传统的码率控制所用的率失真不但复杂度高,也会增加处理时延,尤其是硬件实现,增加了难度,不太适合实时视频传输系统。近几年来,也有越来越多的无线系统对时延要求很高。比如在无线视频应用系统、移动影视、无人机影视拍摄、fpv以及无人机在电力巡检、农业保险、救灾方面的航拍监测等领域,对高质量图像以及低时延的不断追求,使得研究出一种低时延,图像质量高的视频通信系统变得迫切且紧要。有线传输系统的vr等领域也反应了对视频传输低复杂度和低时延的迫切需求。

为解决上述问题,研究出一种低时延低复杂度的码率控制算法变得越来越迫切。

需要注意的是,本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。



技术实现要素:

本发明目的在于提供了一种低时延低复杂度的固定码率控制算法,确保了固定的时延和码流,解决了低时延且固定缓存的视频通信系统引起的缓存区内存上溢或下溢的问题。

为实现上述目的本发明采用如下技术方案:

该低时延低复杂度的固定码率控制算法,包括以下步骤:

s1:根据视频通信系统的时延要求和分辨率划分slice;

s2:根据步骤s1所述的slice划分编码单元ctu;

s3:在编码之前用sobel算子对图像进行预处理,检测图像复杂度;

s4:针对不同的复杂程度,确定当前编码块的量化参数;

s5:执行第一次编码,根据第一次预编码得到的实际码流计算每个编码块的目标码流;

s6:根据第一次编码的实际码流和目标码流进行比较,调节slice的初始量化参数;

s7:执行第二次编码并实时进行码率控制;同时进行独立于视频编码的自适应补偿编码;

s8:将实际码流整合成目标码流的数目,即得固定传输码流。

进一步地,上述步骤s1具体是:

视频通信系统时延要求小于t毫秒,视频帧率若为s帧/秒,视频分辨率为video_h*video_v,video_h、video_v分别表示图像的宽和高,且video_h>0,video_v>0;其中,t>0,s>0;

根据时延要求和视频分辨率及帧率大小确定的slice的大小为slice_v*video_h;若最小的编码单元为min_cu*min_cu,其中min_cu=8,则slice_v的计算公式如下:

当视频传输系统时延要求大于一帧的情况下,则slice最小单位为一帧,当视频传输系统的时延要求小于一帧的情况下,则slice的最小单位为min_cu*video_h。

进一步地,上述步骤s2具体是:

slice的高度为slice_v,则ctu的大小ctu_w确定如下:

进一步地,上述步骤s3具体是:

检测图像复杂度的算法则为用sobel算子模板检测边缘信息,根据边缘信息统计情况区分复杂度;

sobel算子的检测模板如下:

其中,sx为垂直方向边缘检测模板,sy为水平方向边缘检测模板。

则边缘信息的检测如下公式:

sumy=sy*asumx=sx*a

其中,sumy为水平检测结果,sumx为垂直方向检测结果,sum为边缘信息最终结果。a为3*3的像素矩阵,当sum满足大于第一阈值t1,则表示是边缘像素点,当sum满足大于第二阈值t2,则表示为纹理像素点,否则表示该区域为平坦像素点,其中t1>t2。

进一步地,上述步骤s4具体是:

针对不同的复杂程度,对于编码单元赋予不同的量化参数值qp,将编码单元划分成复杂区域、纹理区域和平坦区域,具体执行方式如下:

其中,qp_base表示slice的初始量化参数。

进一步地,上述步骤s5具体是:

根据第一次预编码得到的实际码流计算每个编码块的目标码流;若第一次编码第i块得到的真实码流为blk_rbiti,整个slice的真实码流为real_tbit,整个slice的目标码流为target_tbit;则第i编码块的目标码流为blk_tarbiti。则blk_tarbiti的计算公式如下:

进一步地,上述步骤s6具体是:

根据第一次编码的实际码流和目标码流进行比较,初步调节slice的初始量化参数;其中,实际码流和目标码流之间的差值用len_diff来表示,码流溢出标记用overflow表示,量化参数调节步长用step表示,初始量化参数qp_base的调节公式如下:

len_diff=abs(real_tbit-target_tbit)

step=len_diff*16/real_tbit

进一步地,上述步骤s7具体是:

在执行第二次编码时,每编码完一个编码单元,则实时进行码率控制,实时码率控制根据当前使用的总码流和目标码流比较,通过调节下一个编码单元的量化参数qpi+1或者dct变换系数的个数来调节码流;其中,码流溢出标记用overflowi表示,实际使用码流和目标码流分别用use_bit和tar_bit表示;use_bit和tar_bit之间的差值用diff_bit表示;若当前编码块为第i个编码单元,则当前编码块实际使用的码流为blk_rbiti,各参数的计算公式如下:

diff_bit=abs(use_bit-tar_bit)

自适应像素补偿编码采用hevc中的像素自适应补偿的边带补偿方法;若实际使用码流小于目标码流,则剩余字节追加的是自适应像素编码的码流;所述码流的编码采用等概率二进制编码即hevc熵编码中的旁路编码。

进一步地,上述步骤s7中码流控制步骤如下:

(1)diff_bit大于第四阈值t4,则下一个块的qp和dct编码系数的个数coeffnum的调节如下:

(2)diff_bit大于第五阈值t5,则只需要调节下一个块的qp即可,调节后的qp的计算公式如下:

(3)当不满足以上两个条件时,则下一个编码单元的qp和coeffnum均不做任何调节,其中t4>t5。

进一步地,上述步骤s8具体是:

将实际码流整合成目标码流的数目,即得固定传输码流;当实际码流小于目标码流时,在其后追加自适应补偿编码码流或者冗余字节;当实际码流大于目标码流,则编码时将码流截断。

本发明的有益效果:

1)本发明公开一种低时延低复杂度的固定码率控制算法,在保证高视频质量的前提下,可以以固定的编码时延,通过低复杂度的码率控制算法对视频编码进行量化调节,而得到固定的传输码流;

2)本发明公开一种低时延低复杂度的固定码率控制算法,利用了人眼的视觉特性对图像进行复杂度预处理,并且根据复杂度赋值不同的量化参数,从主观上提高了视频质量。

附图说明

图1是本发明的流程示意图;

图2是本发明基于slice的编码单元的划分示意图;

图3是本发明编码单元复杂度判断和量化参数赋值示意图;

图4是本发明第一次编码框架示意图;

图5是本发明第二次编码框架示意图;

图6是本发明实时码率控制流程示意图;

图7是本发明码流整合示意图;

图8是本发明视频通信系统示意图。

具体实施方式

现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本发明将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征或特性可以以任何合适的方式结合在一个或更多实施方式中。

如图1所示,本发明包括如下步骤:

步骤1:根据时延和分辨率划分slice。

步骤2:根据slice划分编码单元ctu。

步骤3:sobel算子检测图像复杂度。

步骤4:确定当前编码块的量化参数。

步骤5:执行第一次编码。

步骤6:计算每个编码块的目标码流。

步骤7:调节slice的初始量化参数。

步骤8:执行第二次编码并实时进行码率控制。

步骤9:独立于视频编码的自适应补偿。

步骤10:最终整合得到固定的传输码流。

其中,本发明实施例可以应用于高清视频传输实时传输系统中,包括有线和无线通信系统。例如无人机、fpv、vr、医疗影像、汽车电子等领域。本发明根据时延和传输视频的分辨率可以自适应确定slice的大小,同时为了防止传输过程中出现缓存上溢或者下溢,通过码率控制将一个slice的码流控制在固定目标码率。如图2所示,其中实线代表slice的划分,虚线为编码单元ctu的划分。

其中本实施例中,编解码延时要求为小于1ms,输入编码的视频源为1920*1080,帧率为60帧/s。slice的大小为64*1920,即64行像素为一个slice。

其中,确定了slice的大小之后就可以确定编解码单元的大小。本实施例中,编码单元ctu的大小为64*64。

其中,本发明针对不同复杂度的编码单元初始化不同的量化参数。其中,检测图像编码单元复杂度的方法为利用sobel算子检测边缘信息。首先将该编码单元中的每个像素进行分类,分成边缘像素点、纹理像素点和平坦像素点。然后再统计各类像素点的个数,最后得出该编码单元的类型即复杂编码单元、纹理编码单元和平坦编码单元。其中当sobel算子检测得出的sum值大于第一阈值t1,则该像素点为边缘像素点,否则当sum值大于第二阈值t2,则该像素点为纹理像素点,否则为平坦像素点。统计完三类像素点的个数,然后将该编码单元分类,当边缘像素点的个数大于第三阈值t3,则该区域为复杂区域,否则当边缘像素点的个数大于第三阈值t3,则为纹理区域,否则为平坦区域。本实施例中,t1=100,t2=50,t3=1024。如图3所示,为编码单元复杂度判断和量化参数赋值示意图。

其中,确定了编码单元的复杂度之后要初始化量化参数,本实施例中,第一帧的第一个slice初始量化参数为26。

其中,为了更好的估计码流,以及更合理的分配码流,本发明要进行一次预编码。预编码流程为hevc帧内预测编码流程。如图4所示。

其中,通过第一次编码得到的实际码流使用情况,和码流分布情况。初步进行整个slice的量化参数的调节,然后根据每个编码单元所使用的实际码流,计算出每个编码单元的目标码流。

其中,进行第二次编码,如图5所示。为第二次编码的流程示意图。其中,每次编码完一个编码单元就会得到一个码率控制的控制信息,该信息作用于下一个编码单元,然后通过控制dct编码系数的个数和量化参数来达到码率控制需求。在第二次视频编码的同时,进行sao编码操作,该码流可作为冗余码流的选择之一,即当最终slice实际编码总码流小于目标码流时可以追加sao编码码流。

其中,码率控制是基于编码单元实时进行控制的。如图6所示,为码率控制的流程图。当实际使用总码流大于目标总码流时,当差值大于t4,则量化参数增加1,同时dct编码系数个数降低为原来的3/4。否则,当差值大于t5,则只需要将量化参数加1。当实际使用总码流小于目标总码流时,当差值大于t4,则量化参数减2,否则当差值大于t5时,则将量化参数减1。本实施例中,t4=200bit,t5=100bit。

其中,最终编码完一个slice送给信道编解码或者信道传输系统的码流为固定码流。因此需要对最终输出码流进行整合或者冗余填充。如图7展示了实际码流小于目标码流,最终输出总码流的组成情况。

其中,该算法使用于所有的对时延和复杂度有要求的视频通信系统中,如图8展示了常用的视频通信系统的结构。其中包括有线和无线通信系统。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由所附的权利要求指出。

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