1.一种适用于无人机SPI接口视频码率控制方法,其特征在于包括下述步骤:
步骤1:缓冲区正常工作的要求为t时刻缓冲区内已缓存的视频流大小等于0~t时间段内流入缓冲区的视频流总量减去0~t时间段内流出缓冲区的视频流的总量,即满足式(1)
式(1)中,Buffer(t)表示t时刻缓冲区缓存视频数据的总量,Input_rate(t)表示t时刻已编码的视频流入SPI缓冲区的速度,即当前编码器的输出码率,Output_rate(t)表示t时刻视频流出SPI缓冲区的速度,即SPI接口的视频传输速度;
步骤2:根据目标码率计算初始量化参数
根据单位像素的平均目标比特数确定初始量化参数QP0,其计算公式如下:
其中l1,l2,l3是预定的阈值,l1,l2,l3的设置参数表1:
表1
表1中CIF为Common Intermediate Format,QCIF为Quarter Common Intermediate Format,其中CIF和QCIF都是一种通用视频格式,CIF尺寸大小为352×288像素,QCIF尺寸大小为176×144像素;
公式(2)图像中每个像素点所占的比特数bpp由下式确定:
公式(3)中u(n1,1)表示起始可用信道带宽,n1,1表示第1个GOP的第1帧,Fr为编码时的帧率,单位为帧/秒,记为fps,width表示图像宽度,height表示图像高度,width和height单位均为像素;
GOP第一帧为I帧,其余均为P帧,对于图像组(Group of Picture,GOP),起始量化参数由式(4)确定:
其中,表示除第1个I帧之外的第i个GOP的起始量化参数,QPi-1(1)表示除第1个I帧之外的第(i-1)个GOP的起始量化参数,Np(i-1)表示第(i-1)个GOP中P帧个数,TotalQPforPPicture(i-1)表示第(i-1)个GOP中所有P帧量化参数之和,Ngop是第i个GOP中的总帧数;
公式(4)的代入公式(5),与QPi-1(1)-2相比求出最大值,即可求出迭代后的QPi(1):
步骤3:根据目标缓冲区大小,确定当前P帧图像的目标比特数
在第i个GOP的第一个P帧编码完成后,目标缓冲区大小的起始值依照下式确定:
Tbl(ni,2)=Bc(ni,2) (6)
其中Tbl(ni,2)是第i个GOP的第一个P帧编码完成后,目标缓冲区大小的起始值,Bc(ni,2)是第i个GOP的第一个P帧编码完成后实际缓冲区大小;
随后的P帧的目标缓冲区大小按照式(7)计算:
其中,Tbl(ni,2)表示第i个GOP的第一个P帧编码完成后,目标缓冲区大小的起始值;Tbl(ni,j)表示第i个GOP的第(j-1)个P帧编码完成后,目标缓冲区大小的值;Tbl(ni,j+1)表示第i个GOP的第j个P帧编码完成后,目标缓冲区大小的值;Np表示第i个GOP中P帧的总帧数;
第i个GOP的第j个P帧应分配的目标比特数取决于目标缓冲区大小、帧率、可用信道带宽和实际缓冲区大小,计算公式如下:
其中表示第i个GOP的第j个P帧应分配的目标比特数,u(ni,j)表示第i个GOP的第j个P帧应分配的可用信道带宽,γ是常数,Tbl(ni,j)表示第i个GOP的第j-1个P帧应分配的目标缓冲区大小,Bc(ni,j)表示第i个GOP的第j-1个P帧应分配的实际缓冲区大小;
对于第i个GOP开始编码时,分配的比特数由式(9)计算:
其中Tr(ni,0)表示第i个GOP分配的比特数,u(ni,1)表示第i个GOP起始可用信道带宽,Ngop表示第i个GOP中的总帧数,Bc(ni-1,Ngop)表示编码完第(i-1)个GOP后虚拟缓冲区实际大小;
根据公式(9)计算剩余可用比特数,当信道带宽随时间变化时,剩余比特数Tr(ni,j)通过下式计算:
其中Tr(ni,j)表示第i个GOP的第j个P帧的剩余比特数,Tr(ni,j-1)表示第i个GOP的第(j-1)个P帧的剩余比特数,u(ni,j-1)表示第i个GOP的第j-1个P帧应分配的可用信道带宽,A(ni,j-1)表示第i个GOP的第j-1个P帧实际编码比特数;
当信道带宽恒定时,当前帧的剩余比特数通过下式计算:
Tr(ni,j)=Tr(ni,j-1)-A(ni,j-1) (11)
有公式(12):
其中表示第i个GOP的第j个P帧的目标比特数,Np,r(j-1)表示未编码的第(j-1)个P帧数目,当前P帧图像的目标比特数由和的加权组合计算得到:
其中β是0至1之间的任意常数;
为了满足假想的解码器HRD(Hypothetical Reference Decoder)要求,目标比特数作如下限制:
即L(ni,j)<f(ni,j)<U(ni,j),其中,f(ni,j)表示目标比特数,U(ni,j)和L(ni,j)分别表示为保证缓冲区既不上溢又不下溢时,编码图像n所产生的比特数的上界和下界,其中,U(ni,j)为比特数的上界,L(ni,j)为比特数的下界;
步骤4:确定帧级量化参数QP
P帧量化参数的计算如下:
设定当前帧的量化参数QPpc,当前帧为I帧或者是紧接I帧之后的第一个P帧时QPpc=QP0;
否则,根据MADPi=a1*MADPi-1+a2,a1,a2为预测模型的两个参数,初始值分别为a1=1,a2=0,MADPi代表当前基本单元相应位置处的MAD,MADPi-1代表前一帧相应位置处的MAD,用前一帧的实际平均绝对差MAD(Mean Absolute Difference)来预测当前帧的MAD,按照二次率失真模型,计算出当前帧的量化参数QPpc,为了保证视频质量的连续性,相邻两帧量化参数的差值应不大于2,则量化参数作如下调整:
QPpc=min{QPpp+2,max{QPpp-2,QPpc}} (15)
其中QPpp为前一帧量化参数,由H.264标准可知,量化参数的取值范围为0~51,所有对量化参数作进一步的限制:
QPpc=min{51,max{1,QPpc}} (16)
用式(16)求得的量化参数对当前帧的每个宏块执行率失真优化RDO(Rate Distortion Optimized),得出每个宏块的最佳编码模式,最后对模型参数进行更新;
步骤5:跳帧控制
比特数多少来表示运动复杂度作为跳帧衡量的标准,第i个P帧的运动复杂度Ci用下式来表示:
其中Bp,i为第i个P帧根据(i-1)帧线性预测所得到的P帧比特数,Bp,i=αiBi-1,αi初始值为1,Bi-1为已编码的第(i-1)帧的实际比特数,αi为相邻两帧分配比特的变化因子,Bj(j=1,2,...,i)是已编帧的实际比特数,同时,在比特数分配完毕后,αi将进行更新,更新公式为
判定相邻两帧图像是否发生场景切换的方法如下式所示:
其中:Ti为场景切换变化因子,对Ti设定一个阈值ε,阈值ε为0到1的常数;
当Ti>ε时,判定该帧发生场景切换,由于发生场景切换时编码比特数会发生急增,容易超过缓冲区的上溢阈值ω,当缓冲器上溢,就判定P帧为跳帧,具体步骤如下:
采用GOP的结构为IPPPP...,即图像序列的第一帧为I帧,后面是连续的P帧,设定缓存容量的百分比为ω1,ω2,ω3,且ω1<ω2<ω3,同时设定图像的运动复杂度为a,b,c,且满足0<a<b<c<1,a、b和c均为固定值;ωi为当前编码帧的缓冲区满度;
当ωi<ω1则认为当前帧为静止图像,跳过此帧;
当ω1<ωi<ω2时:若Ci<a,则认为当前帧为静止图像,跳过此帧;若a<Ci<b,则认为当前帧为运动缓慢图像,跳过此帧,若Ci>b,则认为当前图像为运动剧烈图像,需要编码当前帧;
当ω2<ωi<ω3时:若Ci<b,则认为当前帧为静止图像,跳过此帧;若b<Ci<c,则认为当前帧为运动缓慢图像,跳过此帧,若Ci>c,则认为当前图像为运动剧烈图像,需要编码当前帧;
当ωi>ω3时:若Ci<c,则认为当前帧为静止图像,跳过此帧;若Ci>c,则认为当前图像为运动剧烈图像,需要编码当前帧;
同时,当缓冲区满度ωi超过90%以后,无论Ci的值为多少都将此帧判定为跳帧。