H.264码率控制中基于MAD比率的选择性跳帧算法
发布时间:2008/6/2 0:00:00 访问次数:793
引言:本文在h.264码率控制机制的基础上,提出了一种基于平均绝对差(mad)比率的跳帧算法。该算法将图像的mad比率和缓冲器占用量作为跳帧判别标准,为运动剧烈的图像保留缓冲器空间。实验结果表明,本算法一方面可以有效地降低缓冲器的占用量和节省编码时间,从而在硬件方面表现为降低对缓冲器大小等方面的要求,达到降低成本的目的;另一方面,可以保证图像序列连续性和提高图像质量。
大多数视频压缩技术和标准产生的比特率都是可变的,为了能够在恒定比特率的通信信道和网络中传输,需要在码率控制中引入一个缓冲区机制,先将压缩后的码流存入缓冲区,然后以恒定码率输出。因此,码率控制的任务就是在保证缓冲器不产生上溢和下溢的前提下,通过调整一些编码参数(如量化参数)来使编码比特率达到期望值。
跳帧策略是码率控制算法中防止缓冲器上溢的手段。以往的跳帧算法往往确定某一个固定的限值(通常为80%)[1],当缓冲器的占用量到达这个限值时,不考虑下一帧的任何情况就把它跳过。这种跳帧算法的缺陷有两点:当缓冲器占用量达到80%时盲目地跳过下一帧,有可能错过运动剧烈的图像而导致译码后图像序列质量的下降;当缓冲器占用量未达到80%,但却很接近80%时,如果下一帧图像运动比较剧烈的话,较多的编码比特数就会导致缓冲器发生严重的上溢。
本文提出了基于mad比率的跳帧判断准则,将当前缓冲器的占用量与每一帧图像的运动剧烈程度结合起来,对缓冲器的占用量设定几个阈值,并且用mad比率来对每幅图像的运动剧烈程度进行标识。对于某个mad比率的图像来说,当缓冲器占用量达到跳帧判别准则中规定的阈值时,即将该帧跳过。这样就可以通过跳过一些运动平缓的图像,而为运动剧烈的图像保留缓冲器空间,从而保证图像序列的连续性,提高图像质量。
码率控制算法
帧层的码率控制算法
帧层的码率控制分为两个阶段:第一阶段为每一个p帧计算一个目标比特数,第二阶段持续地更新率失真模型的各个参数并且进行跳帧控制。
假设只有一组图像(gop),并且图像序列的编码顺序是第一帧为i帧,后面为连续的p帧。假设n表示组图中所有帧的数目,nj表示组图中的第j帧,bc(nj)表示编码第j帧图像后缓冲器实际的占用量,a(nj)表示编码第j帧时实际产生的比特数,bs表示缓冲器大小,tbl(nj)表示第j帧被编码后缓冲器的目标值,rr表示剩余比特数,nr表示组图中剩余的帧数。因此,第j+1帧图像被编码后缓冲器的实际占用量bc(nj+1)可以表示为[2][3]:
假设第一个p帧的量化参数等于组图的量化参数,所以有:
其它p帧被编码后缓冲器的目标值由下式给出:
因此,考虑缓冲器占用量而得到的目标比特数tbuff可以表示为:
其中gama是个常量,它的值通常为0.75。
考虑剩余比特数而得到的目标比特数tr可以表示为:
所以,最后的目标比特数t可以通过tbuff和tr的加权和得到:
试验中β=0.5[2]。
宏块层的码率控制
在宏块层,根据每一个宏块的mad来给每一个宏块分配比特数并且求出量化参数。宏块层的码率控制分为三个步骤:首先为每一个宏块分配比特数;其次根据目标比特数计算出量化参数;最后在对每一个宏块编码后,进行参数的预测。
a.比特数的分配
假设nm表示一帧中宏块的个数,ave_mad表示一帧图像中各个宏块的mad的平均值,mad[i][j]表示第i帧中第j个宏块的mad。因此第i帧中第j个宏块所分配的目标比特数b[i][j]可表示为:
b.计算各个宏块的量化参数
率失真函数是许多码率控制算法的核心,它将量化参数q与编码比特数r联系起来,其关系式为:
其中s表示宏块的编码复杂度,x1和x2是率失真模型参数。q值较小时,分配较多的编码比特数;q值较大时,则分配较少的编码比特数。
c.模型参数的预测
在对每一个帧进行编码后,都要根据前面n帧的编码结果对模型参数(x1、x2)进行更新。由上式可以得出:
最小均方误差可以表示为:
该等式成立的条件是:(a)n>1,(b)所有的n个q值不完全相同。
基于mad比率的跳帧算法
在恒定比特率应用中,编码器和传输信道间的缓冲器起了十分重要的作用。编码器应该使缓冲器的占用量保持在50%左右。如果缓冲器发生上溢,则会损失一些数据。相反,如果缓冲器的占用量过低就会浪费带宽。当缓冲器的值很高时,避免上溢的方法就是跳过一个完整的帧。
由以往的经验可以知道,大多数的跳帧过程都是由于缓冲器上溢引起的。与缓冲器的目标值即缓冲器大小的一半相比较,实际中缓冲器发生上溢的可能性远远大于发生下溢的可能性。缓冲器的占用量低于缓冲器大小25%的情况是非常少见的。因此,有必要把缓冲器的占用量控制在50%左右,以保证缓冲器的占用量有足够的上升空间。
下面详细介绍一下基于mad比
引言:本文在h.264码率控制机制的基础上,提出了一种基于平均绝对差(mad)比率的跳帧算法。该算法将图像的mad比率和缓冲器占用量作为跳帧判别标准,为运动剧烈的图像保留缓冲器空间。实验结果表明,本算法一方面可以有效地降低缓冲器的占用量和节省编码时间,从而在硬件方面表现为降低对缓冲器大小等方面的要求,达到降低成本的目的;另一方面,可以保证图像序列连续性和提高图像质量。
大多数视频压缩技术和标准产生的比特率都是可变的,为了能够在恒定比特率的通信信道和网络中传输,需要在码率控制中引入一个缓冲区机制,先将压缩后的码流存入缓冲区,然后以恒定码率输出。因此,码率控制的任务就是在保证缓冲器不产生上溢和下溢的前提下,通过调整一些编码参数(如量化参数)来使编码比特率达到期望值。
跳帧策略是码率控制算法中防止缓冲器上溢的手段。以往的跳帧算法往往确定某一个固定的限值(通常为80%)[1],当缓冲器的占用量到达这个限值时,不考虑下一帧的任何情况就把它跳过。这种跳帧算法的缺陷有两点:当缓冲器占用量达到80%时盲目地跳过下一帧,有可能错过运动剧烈的图像而导致译码后图像序列质量的下降;当缓冲器占用量未达到80%,但却很接近80%时,如果下一帧图像运动比较剧烈的话,较多的编码比特数就会导致缓冲器发生严重的上溢。
本文提出了基于mad比率的跳帧判断准则,将当前缓冲器的占用量与每一帧图像的运动剧烈程度结合起来,对缓冲器的占用量设定几个阈值,并且用mad比率来对每幅图像的运动剧烈程度进行标识。对于某个mad比率的图像来说,当缓冲器占用量达到跳帧判别准则中规定的阈值时,即将该帧跳过。这样就可以通过跳过一些运动平缓的图像,而为运动剧烈的图像保留缓冲器空间,从而保证图像序列的连续性,提高图像质量。
码率控制算法
帧层的码率控制算法
帧层的码率控制分为两个阶段:第一阶段为每一个p帧计算一个目标比特数,第二阶段持续地更新率失真模型的各个参数并且进行跳帧控制。
假设只有一组图像(gop),并且图像序列的编码顺序是第一帧为i帧,后面为连续的p帧。假设n表示组图中所有帧的数目,nj表示组图中的第j帧,bc(nj)表示编码第j帧图像后缓冲器实际的占用量,a(nj)表示编码第j帧时实际产生的比特数,bs表示缓冲器大小,tbl(nj)表示第j帧被编码后缓冲器的目标值,rr表示剩余比特数,nr表示组图中剩余的帧数。因此,第j+1帧图像被编码后缓冲器的实际占用量bc(nj+1)可以表示为[2][3]:
假设第一个p帧的量化参数等于组图的量化参数,所以有:
其它p帧被编码后缓冲器的目标值由下式给出:
因此,考虑缓冲器占用量而得到的目标比特数tbuff可以表示为:
其中gama是个常量,它的值通常为0.75。
考虑剩余比特数而得到的目标比特数tr可以表示为:
所以,最后的目标比特数t可以通过tbuff和tr的加权和得到:
试验中β=0.5[2]。
宏块层的码率控制
在宏块层,根据每一个宏块的mad来给每一个宏块分配比特数并且求出量化参数。宏块层的码率控制分为三个步骤:首先为每一个宏块分配比特数;其次根据目标比特数计算出量化参数;最后在对每一个宏块编码后,进行参数的预测。
a.比特数的分配
假设nm表示一帧中宏块的个数,ave_mad表示一帧图像中各个宏块的mad的平均值,mad[i][j]表示第i帧中第j个宏块的mad。因此第i帧中第j个宏块所分配的目标比特数b[i][j]可表示为:
b.计算各个宏块的量化参数
率失真函数是许多码率控制算法的核心,它将量化参数q与编码比特数r联系起来,其关系式为:
其中s表示宏块的编码复杂度,x1和x2是率失真模型参数。q值较小时,分配较多的编码比特数;q值较大时,则分配较少的编码比特数。
c.模型参数的预测
在对每一个帧进行编码后,都要根据前面n帧的编码结果对模型参数(x1、x2)进行更新。由上式可以得出:
最小均方误差可以表示为:
该等式成立的条件是:(a)n>1,(b)所有的n个q值不完全相同。
基于mad比率的跳帧算法
在恒定比特率应用中,编码器和传输信道间的缓冲器起了十分重要的作用。编码器应该使缓冲器的占用量保持在50%左右。如果缓冲器发生上溢,则会损失一些数据。相反,如果缓冲器的占用量过低就会浪费带宽。当缓冲器的值很高时,避免上溢的方法就是跳过一个完整的帧。
由以往的经验可以知道,大多数的跳帧过程都是由于缓冲器上溢引起的。与缓冲器的目标值即缓冲器大小的一半相比较,实际中缓冲器发生上溢的可能性远远大于发生下溢的可能性。缓冲器的占用量低于缓冲器大小25%的情况是非常少见的。因此,有必要把缓冲器的占用量控制在50%左右,以保证缓冲器的占用量有足够的上升空间。
下面详细介绍一下基于mad比