率失真理论及经典的码率控制算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
率失真理论及经典的码率控制算法
一、视频编码的率失真思想
率失真理论研究的是限失真编码问题:能使限失真条件下比特数最小的编码为最佳编码。
设信源为},...,,{21m m a a a A =,经过编码后,信宿为},...,,{21n n b b b B =,定义信源、信宿概率空间分别为)}(),...,(),({Q )}(),...,(),({2121n m b Q b Q b Q a P a P a P P 、。
定义平均失真函数)(Q D 如下: ∑∑∑∑======m j j k j n
k k j m j k j n k k j a b Q a P b a d b a P b a d Q D 1111)|()(),(),(),()(其中,),(k j b a d 为失真度,度量
准则可是均方误差MSE 、绝对差分和SAD 或差分平方和SSD 等。
若信源概率分布)(j a P 已知,则平均失真仅仅取决于条件概率)|(j k a b Q ,从而必然存在这样一个条件概率)|(j k a b Q 使得D Q D ≤)(,即:))((D Q D Q Q D ≤=
即D Q 为保证平均失真)(Q D 在允许范围D 内的条件概率集合。
进一步,定义),(Y X I 为接收端获取的平均信息量:
)()|(log
)|()(),(1k j k m j j k j b Q a b Q a b Q a P Y X I ∑==
同样,在给定的)(j a P 前提下,),(Y X I 的大小也只取决于。
现在率失真函数)(D R 定义为在D Q 范围内寻找最起码的信息量,即:
),()(min Y X I D R D
Q Q ∈=
该公式的含义:在允许的失真度为D 的条件下,信源编码给出的平均信息量的下界,也就是数据压缩的极限数码率。
当数码率R 小于率失真函数)(D R 时,无论采用什么编码方式,其平均失真必大于D 。
视频压缩是典型的限失真编码,率失真理论同样适应于视频编码。
视频编码率失真优化策略的主要内容是在限比特率为R 的条件下,即R 的值不能超过
信道传输率c R ,怎样选择最佳编码模式,使得失真D 最小,归结为下式:
c R R D ≤约束条件为},m in{
要实现上述目标,在比特率R 和失真D 之间必须选择一个恰当的折中。
在实际解决问题的过程中,可用一编码参数集(量化步长、宏块编码模式等)对视频序列进行编码,得到相应的编码比特率R 和解码图像质量(或失真D ),两者结合,即形成一个D R -点。
通过用多组编码参数集重复上述编码过程,可获得不同的D R -点。
众多的R-D 点拟合成率失真曲线((D R -曲线)如图所示。
如果给定一个目标码率R},与其对应的最小失真D 点必然在这一曲线上。
视频编码的率失真优化目标正是寻找一合适的编码参数集,这一参数集代表的D R -点尽可能地位于或接近这条曲线。
约束条件下的极值求解常用拉格朗日乘子法,部分拉氏方法不能良好解决的可以用动态规划求解。
拉格朗日乘子法能够找出一个或数个最好性能的编码参数集,这些参数即可被用于视频编码器以获得最佳的编码性能。
不过如果编码参数组合的数目极大,率失真计算的复杂性常常比编码算法本身还高,要使率失真优化方法更实用,可以对编码参数简化。
例如,提前判断某些编码参数优劣,使用率失真特征模型来估计最佳D R -点等简化算法。
二、H.264/AVC 率失真优化算法:
1.理论分析
根据率失真理论,当前帧编码模式选择问题归结为:在可选模式中选择最佳的模式,使得在限定码率c R 下,失真D 最小。
假设},...,,{21N X X X X =表示当前帧所有宏块,M 表示视频编码可选的编码模式集,那么当前帧失真优化编码就可以由下式来表示:
1),()),(min( 式 约束条件是:⎩⎨⎧≤c
R M X R M X D 其中,),(M X D ,),(M X R 分别表示当前帧在编码模式集M 下的失真和编码比特数,c R 为限定码率。
因为当前视频标准是基于宏块的编码结构,所以当前帧的失真或码率可以由各个宏块的失
真或比特数累加,计算公式如下:
∑∑====N i i N i i M X R M X R M X D M X D 1
1
)
,(),()
,(),(
求解约束条件下极值常用拉格朗日乘数法,式1转换为下列方程式:
2),(),(),,()},,,(m in{ 式 其中M X R M X D M X J M X J ⨯+=λλλ 其中λ是拉格朗日算子。
显然。
只要参数λ可知,上式的极值就可以决定出最优编码模式*M ,使得此时的编码失真),(*M X D 就是在限率c R 下的最小失真。
事实上因为单个宏块i X 在编码模式矿下的比特数),(*M X R i 必须在其他所有宏块计算完毕才能获得,所以严格地讲,当前帧各宏块最佳编码模式的决定是相互依赖的。
但是这将导致问题非常复杂,难于求解。
为了将问题简化,忽略各宏块的码率对其他宏块的编码模式的影响,也就是假设各宏块的编码模式率失真优化决定是相对独立的,即有:
)
,(),()
,(),(i i i i i i M X D M X D M X R M X R ==
其中i M 表示宏块i X 的编码模式参数集。
从而整帧图像的最优化问题可以进一步分解为: ∑∑===
=N i i i N i i i M X J M X J M X J 11),,(min }),,(min{)},,(min{λλλ由此,
整帧的率失真优化转化为每个宏块的优化。
对于单个宏块的率失真开销函数可以由式2简化为:
)ODE ()ODE (),ODE ()},,ODE (m in{M R M D M J M J ⨯+=λλλ其中其中MODE 为当前宏块可选编码模式集。
2.拉格朗日系数λ的确定
经上分析,只有获得拉格朗日系数λ,宏块编码模式的率失真优化就可以实现。
Wiegand 等依照D R -的近似数量关系和大量的实验结果,得出参数λ与量化步长2Q 有着近似的线性关系,给出公式:
285.0Q MODE ⨯=λ
其中QP QP Q ,2/=为量化参数。
该公式被用于H.263标准。
由于H.264/AVC 编码参数的改变,对此做出了改进。
目前H.264/AVC 采用的λ和量化参数
QP 关系式是:
1)如果编码时没有B 帧,对于I 帧和P 帧则:
312
2
85.0-⨯=QP MODE λ
2)如果编码时有B 帧,对于I 帧和P 帧则: 3122
68.0-⨯=QP MODE λ
对于B 帧则:
}}6,00.4min{,00.2max{268.0312QP
QP MODE ⨯⨯=-λ
另外,H.264/AVC 采用了运动向量预测和多参考帧技术,为了让运动估计获得最佳运动信息,同样采用率失真优化技术。
运动估计失真MOTION D 采用SAD 度量,而不是编码模式决定采用的SSD ,因此,近似认为拉格朗日系数MODE MOTION λλ,二者具有下列关系:
MODE MOTION λλ=
3.运动估计的率失真优化
运动估计的率失真优化包括两方面的内容,一个是决定最佳运动向量,另一个是决定最佳参考帧及相应的运动信息。
其中决定最佳参考帧及相应的运动信息,实现前提是多参考帧技术。
首先,运动向量的优化,实现公式如下:
)())(,()(),(p m R m c s D T SA m J MOTION MOTION -⋅+=λλ其中T y x m m m ),(=表示运动估计所得到的运动向量,T y x p p p ),(=表示通过相邻宏块预测得到的运动向量,MOTION λ为拉格朗日参数,)(p m R -表示运动向量差值编码所需比特数(采用UVLC 表来估计),SA(T)D 为失真度,计算公式为:
∑==---=B
B y x y x m y m x c y x s m c s SAD ,1
,1],[],[))(,(
其中s or B ,4,8,16=表示原始视频信号值,c 表示实际编码的视频信号值,如果运动向量是小数精度,则失真度在Hadamard transform 后采用SATD 来度量。
其次,决定最佳参考帧,实现公式如下:
))())()((()))(,(,()|(REF R REF p REF m R REF m REF c s SATD REF J MOTION MOTION +-⋅+=λλ 其中)(REF R 表示选取参考帧REF 编码所需的比特数(采用UVLC 表来估计)。
4.宏块编码模式决定的率失真优化
宏块编码模式决定的率失真优化算法基本原理:在可选的宏块类型中,遍历每种可用编码模式,计算出每种模式下的编码比特数,相应的重建图像失真度,根据公式:
)|,,()|,,(),|,,(QP MODE c s R QP MODE c s SSD QP MODE c s J MODE MODE ⋅+=λλ
计算拉格朗日函数值J 即率失真开销,经过比较,选取最小值下的编码模式MODE 做为宏块的最终编码模式。
其中QP 为宏块的量化参数,s ,c 分别表示原始图像和重建图像的像素值,)|,,(QP MODE c s R 表示在特定QP 和MODE 下当前宏块的编码输出比特数,)|,,(QP MODE c s SSD 表示图像失真度,计算公式为:
∑∑∑======-+-+
-=
8,81,116
,161,12216
,161,12,
])|,,[],[(])|,,[],[(])|,,[],[()|,,(y x y x V Vy Uy U y x y y QP MODE y x c y x s QP MODE y x c y x s QP MODE y x c y x s QP MODE c s SSD MODE λ为拉格朗日系数,MODE 为当前宏块可选的一种编码模式,针对不同图像类型,编码模式集分别为:
I-frame :
}88,44{⨯⨯∈INTRA INTRA MODE
P-frame :
⎭
⎬⎫⎩⎨⎧⨯⨯⨯⨯⨯⨯⨯⨯⨯∈44,84,48,88,168,816,1616,,1616,44SKIP INTRA NTRA MODE B-frame:
⎪⎪⎭
⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧⨯⨯⨯⨯⨯⨯⨯⨯⨯⨯⨯⨯⨯⨯⨯⨯∈44,84,48,88,168,816,1616,44,84,48,88,168,816,1616,,,1616,44BAK BAK BAK BAK BAK BAK BAK FWD FWD FWD FWD FWD FWD FWD DIRECT BIDIRECT INTRA NTRA MODE 另外,INTRA4×4有多种预测模式选择,率失真优化计算公式如下:
)|,,()|,,(),|,,(QP IMODE c s R QP IMODE c s SSD QP IMODE c s J MODE MODE ⋅+=λλ
其中IMODE 代表可选的多种预测模式,)|,,(QP IMODE c s SSD 表示失真,)|,,(QP IMODE c s R 表示编码输出比特数,包括帧内预测模式和DCT 亮度系数所需比特数(其值由UVLC 熵编码计算)。
5.H.264/AVC 率失真优化算法
验证模型JM7.6宏块编码所采用的率失真算法详细步骤:
第一步:参数初始化,确定宏块的量化参数QP 及参考帧信息,依照当前编码图像类型,计算拉格朗日参数MOTION MODE λλ,;
第二步: 决定当前宏块最佳INTRA4 X 4预测模式;
第三步: 通过计算SATD ,最小值对应的预测模式为当前宏块最佳INTRA16X16预测模式; 第四步: 当前宏块决定运动估计的最佳参考帧及相应运动信息;
第五步: 在第二,三,四步所得基础上,计算各种编码模式下的率失真开销J ,选取最小值对应的编码模式作为当前宏块最佳的编码模式。
第六步: 当前宏块编码后续处理,准备下一宏块的编码。
三、经典的码率控制算法
1、MPEG-2 TM5的码率控制算法:
TM5码率控制算法分为三步进行:输入序列划分成连续的GOP (Group of pictures),每个GOP 的首帧为I 帧,采用帧内编码方式,剩下的为P 帧或B 帧。
整个码率控制算法包含三个步骤。
第一步,图像级的比特分配。
将每个GOP 的目标比特数分配给每帧图像。
由于每帧图像所得到的比特数与图像的复杂度相关,初始I 、P 、B 帧图像的复杂度分别定义为:
⎪⎩⎪⎨⎧===115
/)_*42(115/)_*60(115/)_*160(rate bit X rate bit X rate bit X b p i
式中b p i X X X ,,是图像的复杂度,rate bit _为所需的编码输出比特率,各类型的图像首帧编码以后,可以得到其所需的比特数及该帧的平均量化因子b p i Q Q Q ,,,视频图像在未发生场景切换时,有很好的相关性,故待编码帧的复杂程度可用最近已编码的同类型帧确定,b b b p p p i i i Q S X Q S X Q S X *,*,*===其中b p i S S S ,,为相关系数,最终各种类型的图像比特分配公式如下:
⎪⎪⎭
⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧++=rate picture rate bit K X X N K X X N R T b i b b p i p p i _*8_,1max ⎪⎪⎭
⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧+=rate picture rate bit K X X K N N R T b p b p b p p _*8_,max ⎪⎪⎭
⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧+=rate picture rate bit K X X K N N R T p b p b p b b _*8_,max 其中b p i K K K ,,分别为I 、P 、B 帧的加权系数,R 为分配给当前GOP 中尚未编码图像的比特数,每个GOP 编码完毕后,R 更新为:R =R +G ,其中G =bit_rate×N/picture_rate,
第二步,在宏块级,根据缓冲器状态和宏块的空域活动性为每个宏块决定量化参数,当前宏块比特分配的公式:
]_)
1(*[,,1,,0,,cnt MB j T B d d b p i j b p i b p i
j --+=-
式中b p i
j d ,,为当前I 、P 、B 帧的第j 个宏块编码后Buffer 的满溢程度,b p i d ,,0为当前帧编码的Buffer 满溢程度,1-j B 为前j -1个宏块实际编码比特数,b p i T ,,为当前帧目标比特数,MB_cnt 为宏块总数目。
然后根据下公式计算量化参数。
r d Q j j 31
⨯=
其中r 为反应参数由目标比特数及帧频决定,r =2×bit_rate/picture_rate ;
第三步是自适应量化,通过计算当前宏块的帧结构和场结构的共8个8×8亮度子块的均方差,然后根据所得最小方差值与平均方差值进行归一化,获得自适应的量化参数的调节系数。
可以为当前宏块决定量化参数,j Q 计算公式整个码率控制算法基于以下假设:
1)失真度D 与量化参数QP 成正比,
2)为了保证图像质量的稳定,I 、P 、B 帧的量化参数成比例:
b
b p p i K Q K Q Q ==0.1,其中b p K K ,为常系数,初始值分别为1.0,1.4。
3)编码比特数R 与失真度D 成反比,换言之认为:R×D =常数,该算法采用的是极为简单
的R-D 模型,因此算法的控制精度和鲁棒性不是很理想。
2、MPEG-4 VM8的码率控制算法:
VM8码率控制算法,除了没有宏块级的控制,GOP 级和帧级的码率分配基本和TM5相同。
不过,该算法采用了一个二次的R-Q 码率模型:
2//)(Q b Q a Q R +=
其中a ,b 为参数,该模型提高了目标比特数的估计准确度。
考虑到实际编码图像的活动特征,当前帧的码率模型修改为:
)//()(2Q b Q a MAD Q R i i i i i +⨯=
二次R-Q 模型基于前提:相邻帧具有强相关性,R-D 曲线一致,当一帧图像编码后,该帧的平均量化参数和整个比特数是可以获得的,通过统计前面多帧图像的这两个值,可以用来为当前
帧估计公式中参数a ,b 。
一旦用线性回归方程法,求得数学模型的参数a ,b ,便可用来估计当前帧的量化参数Qi 。
该算法的不足之处是不适应宏块级的控制,因此比特数的估计准确度不如TMN8。
另外,由于该模型成立的前提,在场景变化快的情形非常容易导致QP 估计步准确。
3、H.263 TMN8的码率控制算法:
H.263的TMN8码率控制算法主要分为两步:
第一步为帧级:结合虚拟缓冲器的充盈度为当前帧决定目标比特数,
⎪⎩⎪⎨⎧⋅-⋅>∆∆-= 其它
=,其中:,,M A W M A W F W F R B 式中,B 为当前帧的目标比特数,R 为目标码率(信道速率),F 为目标帧率(视频信源的帧率),W 为当前缓冲器充盈度(当前缓冲器的容量),M 为缓冲器大小(缓冲器预设门限M =R/F ),常数A =0.1用来防止缓冲器下溢。
第二步是宏块级:基于率失真模型,兼顾输出码率和图像质量的情况讨论最优量化步长值的求解问题。
TMN8算法基于以下的R-Q 模型:
⎪⎪⎩⎪⎪⎨⎧≤>=e Q if Q e e Q if Q e Q R 21
,2ln 21),2(log 21)(2
222222222σσσσ 该模型来源于对经典R-D 公式的修改。
考虑到H.263甚低码率编码,TMN8只采用了
22
2ln )(Q
e Q R σ=情形,最终每个宏块的R-Q 模型是: )(2
2
C Q K A Bi i i +=σ,其中i B 为编码第i 个宏块所产生的比特数,i Q 为量化步长,C 为宏块头信息
和运动向量编码所产生的“额外开销”,23841
2))((3841∑=--=j i p j p σ为宏块中六个块的均方差,表征一帧图像的总失真度TMN8采用了模型:
121212i N i i
Q a N D ∑==
其中N 为图像中的宏块总数量,i Q 为第i 个宏块的量化步长,i a 为加权系数,对重要的区域可以取大的权值。
量化步长的决定,转化为约束条件下求极值,在所有宏块产生比特数总和一定的情况下,求解各宏块的最优量化步长值,使得编码重建图像的失真度最小,即:
121min arg ,...,212**
1i N i i
N Q a N Q Q ∑== 约束条件为∑==N
i i B B 1,其中N Q Q ,...,1为变量。
采用拉格朗日乘数法,有量化步长*1Q 的最优解为:
N i a a ANC B AK Q k N i k i i ,...,1,)(1*1=-=∑=σσ
与VM8码率控制算法相比,TMN8可以更为精确地估计比特数,而且缓冲器更为平稳。
然而,TMN8算法没能较好地控制宏块之间量化参数的太大波动。
此外,该模型估计的准确度依靠前面已经编码宏块的信息,在场景转换情形下,容易导致准确度降低。
4、基于ρ域线性码率模型的码率控制算法:
Zhihai He 等人认为DCT 系数量化后零值比率ρ是由量化参数QP 决定的,因此二者之间具有严格的一一对应关系,可将R-QP 的密切关系转换为R-ρ之间。
在严格的理论分析和大量的模拟实验基础上,提出了一个基于ρ域的线性码率模型:
)1(*)(ρθρ-=R
式中:R 为编码产生的比特数,θ为常数与图像的复杂程度相关,ρ为变换系数量化后零值在系数中所占的百分比。
基于该模型的码率控制算法,帧级计算目标比特与TMN8类似,为宏块计算量化参数前,运动估计并变换得到所有DCT 系数,然后得到QP -ρ匹配表,然后根据上公式决定QP 。
基于ρ域的线性模型统计当前帧量化后的DCT 零值时,不需要依靠参考帧,在场景切换频繁的情形下,控制效果尤其好于前面几种算法。
5、H.264/A VC 码率控制算法:
5.1、GOP 层码率控制
目的:1 计算当前GOP 中未编码帧的可用比特数;
2 计算IDR 帧和第一个存储帧的初始量化系数。
算法1:当第 i 个GOP 中的第j 帧编码时, 当前GOP 中未编码帧的可用比特数计算如下:
i i i i i i i i i i N j j j b j N f j R j R j B j V N f j R j B ,...,3,21)1()1()1()()1()()()(==⎪⎪⎩⎪⎪⎨⎧--+-⨯--+--⨯=
其中:1 f 是帧率,N i 是第 i 个GOP 的总帧数,R i (j ) 和 V i (j ) 分别是当第 i 个GOP 中的第
j 帧编码后的瞬时码率和缓冲占用量,b i (j -1) 是 第(j-1) 帧编码后的实际码率。
2 GOP 中的第1帧编码时按上式计算,实际上就是假设GOP 中后续每一帧的码率均为初始码率时,得到的整个GOP 可用比特数的初始值。
减去V i (j ) 是因为缓冲区在初始化时已经占用了V i (j ) 比特。
3 其余帧编码时按下式计算,其中R i (j ) 与 R i (j-1) 相等时,表示码率恒定,则下式简化为)1()1()(---=j b j B j B i i i ,即只需要在可用比特数中减去本帧的实际码率;R i (j ) 与
R i (j-1) 不相等时,还需要将GOP 中后续每一帧的码率由R i (j-1) 更新为R i (j )。
4 缓冲占用量V i (j )的计算如下:
i i i i i i i i N j f j R j b j V j V other
i N V V ,...,3,2)
1()1()1()(1)(0)1(11=--
-+-=⎩⎨⎧==-- 其中第 1个GOP 的缓冲初始值为0(也有设为缓冲区大小1/8的),后续GOP 的缓
冲初始值为前一个GOP 的缓冲最终值。
算法2:计算IDR 帧和第一个存储帧的初始量化系数)1(i QP
1 对于第 1个GOP ,)1(i QP 根据可用信道带宽计算如下:
⎪⎪⎩⎪⎪⎨⎧>≤<≤<≤=3103220
2130140)1(1l bpp l bpp l l bpp l l bpp QP 这是因为带宽越窄,量化系数就越大。
其中pixel N f R bpp ⨯=
)1(1,Npixel 是一帧图像的象
素数。
对于QCIF/CIF 图像建议l1=0.15, l2=0.45, l3=0.9 ,对于比CIF 大的图像建议 l1=0.6, l2=1.4, l3=2.4
2 对于后续GOP ,)1(i QP 计算如下:
⎪⎭
⎪⎬⎫⎪⎩⎪⎨⎧⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧⎭⎬⎫⎩⎨⎧---+-=---15,2min )1()1(,2)1(min ,2)1(max )1(111i p i i i N i N i SumPQP QP QP QP N P (i -1) 是第 (i -1) 个GOP 中所包含的P 帧数, SumPQP (i -1) 是第 (i -1) 个GOP 中所有P 帧的量化参数平均值的总和,两者相除即为第 (i -1) 个GOP 中所有P 帧的量化参数平均值。
以此作为计算)1(i QP 的基础,是为了保持前后GOP 之间图像质量的连续性。
在量化参数平均值相同的前提下,第 (i -1) 个GOP 中所包含的帧数每增加15,)1(i QP 就要减1。
最后)1(i QP 还要限制在第 (i -1) 个GOP 量化参数初始值的±2范围内,这是为了保持前后GOP 中第一个存储帧之间图像质量的连续性。
除此之外,)1(i QP 还要进一步修正如下:
2)()1(1)1()1(11-->-=--L N QP QP if QP QP i i i i i
其中)(11L N QP i i ---是前一个GOP 中最后一个存储帧的量化参数,L 是两个存储帧之间连续的非存储帧的帧数。
这是为了保持前后GOP 中存储帧之间图像质量的连续性。
5.2、图像层码率控制
图像层码率控制分为两步:编码前处理和编码后处理
1 编码前处理过程
目标:计算每一帧的量化参数。
对于存储帧和非存储帧计算方法不同。
1.1 非存储帧(B 帧)
非存储帧量化参数按照下面的简单插值法计算:
假设第 j 帧和第 (j+L+1) 帧都是存储帧,其量化参数分别为 )(j QP i 和 )1(++L j QP i , 则第 i 个非存储帧的量化参数按照以下两种情况来计算:
情况1:当L=1时, 在两帧存储帧之间只有一帧非存储帧,则量化系数计算如下:
⎪⎩⎪⎨⎧++≠+++=+Otherwise 2)()2()( if 22)2()()1(j QP j QP j QP j QP j QP j QP i i i i i i
这也是为了保持存储帧与非存储帧之间的连续性,不过非存储帧的质量要求低一些,所以量化参数可以大一些。
情况2:当L>1时, 在两帧存储帧之间有多帧非存储帧,则量化系数计算如下:
)}1(2)},1(2,1)1))(()1((max{min{)()(-⨯--⨯---++++=+k k L k j QP L j QP j QP k j QP i i i i α其中k
=1, …, L , α 则由下式给出:
⎪⎪⎪⎩⎪⎪⎪⎨⎧+⨯-=-++⨯-=-++-⨯-=-++-⨯-=-++-⨯-≤-++---=Otherwise
1
2)()1(QP 212)()1(12)()1(22)()1(32)()1(0
123i L j QP L j L j QP L j QP L j QP L j QP L j QP L j QP L j QP L j QP i i i i i i i i i α α实际上就是k =1时,即第一个非存储帧的量化参数的变化量。
)(k j QP i +还需要进一步修正到 0 和 51之间:
}51},1),({{)(k j QP MAX MIN k j QP i i +=+
1.2 存储帧(P 帧)
步骤1:决定每一个存储帧的目标比特数
(1) 决定当前GOP 中每一个存储帧的目标缓冲水平
每一个存储帧的目标缓冲水平要根据第一个IDR 帧和第一个存储帧的编码比特数以及平均图像复杂度来预先设定。
第 i 个GOP 的第一个存储帧编码后, 目标缓冲水平设为:
)2()2(i i V S =
后续存储帧的目标缓冲水平按照下式来决定:
f
j R L j W j W f j R L j W i N S j S j S i i b i p i i p p i i i )())()(()()1()(1)()2()()1(,,,-⨯+⨯⨯+⨯+--=+ 1
)()2()(--i N S j S p i i 表明在理想情况下,每个GOP 只使用自己的缓冲,即最终的缓冲水平由最初的)2(i S 逐渐减为0。
)(,j W i p 为存储帧的平均复杂度加权,)(,j W i b 为非存储帧的平均复杂度加权。
存储帧的平均复杂度越高,其缓冲水平就越高。
权重计算如下:
3636
.1)
()()()
()()(8
)
1(78)()(8)1(78)()(,,,,,,,,,,j QP j b j W j QP j b j W j W j W j W j W j W j W i b i i b i p i i p i b i b i b i p i p i p ⨯=⨯=-⨯+=-⨯+=
当两存储帧之间没有非存储帧时,后续存储帧的目标缓冲水平的计算简化为:
1
)()2()()1(--
=+i N S j S j S p i i i (2) 计算当前存储帧的目标比特数 第i 个GOP 中第j 个存储帧的目标比特数,根据目标缓冲水平、帧率、可用信道带宽以及实际的缓冲占有量按照下式来计算:
))()(()()(~j V j S f
j R j T i i i i -⨯+=γ 即目标比特数以当前瞬时的每帧比特数为基础,再根据实际缓冲水平与理想缓冲水平的差距进行加权调整。
其中 γ 为常数,其典型值在非存储帧时为0.5,否则为0.25 。
但是在计算目标比特数时,剩余的比特数也应当被考虑:
r b i b r p i p i i p i N j W N j W j B j W j T ,,,,,)1()1()()1()(ˆ⨯-+⨯-⨯-=
即目标比特数为剩余比特数按比重分给剩余帧所得的比特数。
其中r p N , 和 r b N , 分别是剩余的存储帧和非存储帧的个数。
最终的目标比特数为)(~j T i 和 )(ˆj T i
的加权和: )(~)1()(ˆ)(j T j T j T i i i ⨯-+⨯=ββ
其中 β 为常数,其典型值在非存储帧时为0.5,否则为0.9。
为了满足HRD 要求,目标比特数要限制在以下范围:
)}(T ),(min{)()}
(T ),(max{)(i i j j U j T j j Z j T i i i i ==
这是为了保证缓冲区既不上溢又不下溢,因此保证编码后图像比特数在一定范围内。
Z i (j ) 和 U i (j ) 分别按下式计算:
⎪⎪⎩⎪⎪⎨⎧-+-=+=--other
j b f j R j Z j f j R N B j Z i i i i i i i )()()1(1)()()(11 ⎪⎩⎪⎨⎧⨯-+-=⨯+=--other j b f j R j U j t N B j U i i i r i i i ϖϖ))()(()1(1
))1()(()(1,11
t r,1(1) 是第一帧从编码缓冲区移出的时间,ϖ是典型值为0.9的常数.
步骤2:计算量化参数,进行RDO
当前存储帧的 MAD,)(~j i σ, 可根据前一存储帧的实际MAD ,)1(L j i
--σ由线性预测公式得到。
2
1)1()(~a L j a j i i +--⨯=σσ 其中a 1 和 a 2 的初始值分别设为 1 和 0。
它们在每一帧或每一个基本单元编码后根据类似于MPEG-4 Q2的线性衰退模型进行更新。
对应于目标比特数的量化步长按照下式来计算:
)()
()(~)()(~)(,2,2,1j m j Q j c j Q j c j T i h i step i i step i i -⨯+⨯=σσ 其中 )(,j m i h 为头信息和运动矢量的总比特数, 1c 和2c 为两系数.相应的量化参数QP i (j )
则根据A VC 中量化参数与量化步长的关系得到。
为了保持图像质量的连续性,量化参数QP i (j ) 要进一步修正:
)}}(,2)1(m ax {,2)1(m in{)(j QP L j QP L j QP j QP i i i i ---+--=
最终的量化参数需要进一步限制在 51 和 0之间.
}}1),(m ax {,51m in{)(j QP j QP i i =
然后量化参数用于对当前帧中的每一个宏块进行RDO 。
2 编码后处理过程
编完一帧后, 线性预测模型的参数a1 和 a2 以及R-D 模型的c 1 和 c 2 均要更新. 一个类似于 MPEG-4 Q2 的线性衰退模型被用来更新这些参数.
但是实际产生的比特将被加入到缓冲中,为了保证更新后的缓冲占有量不至于太高,一些帧将会按照与MPEG-4 Q2 相似的方法跳过。
5.3、基本单元层的码率控制
假设一帧图像由 N mbpic 个MB 组成,一个基本单元定义为一组连续的个数为 N mbunit 的MB 。
如果N mbunit 等于 N mbpic , 就是图像层码率控制,如果 N mbunit 等于1, 则是宏块层码率控制。
一帧中的基本单元数, N unit , 计算如下:
mbunit mbpic
unit N N N =
如果基本单元不是帧,那么存储帧将会增加一个基本单元层码率控制。
与帧层码率控制相同,IDR 帧和非存储帧的量化参数对于同一帧的所有基本单元而言是相同的。
其计算方法和帧层类似,只不过)(j QP i 和 )1(++L j QP i 替换为对应帧中所有基本单元的量化参数平均值。
目标:为一帧中的所有基本单元选择量化参数值,从而使得产生的比特数接近于帧目标比特数)(j T i .
步骤1:当前存储帧剩余基本单元的 MAD, )(~,.j i
l σ, 可根据前一存储帧相同位置的基本单元的实际MAD 由线性预测公式得到。
步骤2:计算第j 个基本单元的纹理比特数l b ,步骤2又分为3个子步骤:
步骤2.1:计算第j 个基本单元的目标比特数。
让r T 表示当前帧剩余的比特数其初始值设为 )(j T i . 则第l 个基本单元的目标比特数由下式给出:
∑=⨯=unit N l
k i k i l r l j j T b )
(~)(~~2,2,σσ 即按照复杂度来将当前帧剩余的比特数分配给剩余的基本单元。
步骤2.2:计算所有已编码基本单元产生的头信息的平均比特数。
unit unit
hdr unit l hdr l hdr l hdr l hdr l hdr N l N l m N l m m l m l m m ≤≤-⨯+⨯=+-⨯=-1);1(~ˆ)11(~~1,,,,1,,
其中 l hdr m
,ˆ是当前存储帧中第l 个基本单元的实际比特数. 1,hdr m 是根据前一存储帧中基本单元得到的估计值。
步骤2.3:计算第l 个基本单元的纹理比特数l
b ˆ:(BU 的目标bit -头信息的平均bit ) l hdr l l m b b ,~ˆ-=
步骤 3 根据R-D 模型计算第i 个GOP 第j 帧中的第l 个基本单元的量化步长 ,并根据A VC 提供的方法将其转换成相应的量化参数)(,j QP i l 。
我们需要考虑以下三种情况:
情况1:对于当前帧的第一个基本单元
)1()(.1--=L j P Q j QP i i
其中 )1(--L j P Q i 是前一存储帧中所有基本单元的量化参数平均值。
情况2:当剩余比特数少于0时,量化参数应当比前一基本单元大从而使产生的比特数总和接近于目标码率:
Bu i l i l j QP j QP ∆+=-)()(,1,
其中Bu ∆是量化参数在基本单元间的变化范围,如果unit N 大于 8, 则其初始值为1,否则为2. 编完每一个基本单元后按照下式来更新:
⎩⎨⎧>=∆-otherwise ;
225)( if ;1,1j QP i l Bu 即如果前一基本单元的量化参数已经很大,增量就要小一些。
为了保证视觉质量的连续性,量化参数要进一步限制在以下范围: )}}(,)1(,51min{,)1(,0max{)(,,j QP L j P Q L j P Q j QP i l Fr i Fr i i l ∆+--∆---=
其中Fr ∆是量化参数在帧间的变化范围,定义如下:
⎪⎩⎪⎨⎧>≥>=∆otherwise ;69
18 if ;418 if ;2unit unit Fr N N
情况3:否则,我们应当首先根据二次模型计算量化步长,然后将其转换成相应的量化参数
)(,j QP i l 。
与情况2类似,参数应当限制在以下范围:
}})(),(min{,)(max {)(,1.,1,Bu i l i l Bu i l i l j QP j QP j QP j QP ∆+∆-=--
但是为了保持视觉质量的连续性,还需要进一步限制到情况2的范围。
步骤4 对当前基本单元的所有MB 进行RDO ,并进行A VC 编码。
步骤5 更新剩余比特数以及线性预测模型和二次R-D 模型的系数。
为了在平均PSNR 和比特波动之间取得一个好的平衡, 建议在场编码、帧/场自适应编码以及MB-AFF 编码时,N mbunit 取一行的MB 数,在其他情况下取9。