專利名稱:一種恒定碼率的控制方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)字音視頻的傳輸控制相關(guān)技術(shù)領(lǐng)域,特別是涉及一種恒定碼率的控制方法。
背景技術(shù):
在視頻的實(shí)時(shí)通信中,碼流需要在不同帶寬的網(wǎng)絡(luò)上進(jìn)行傳輸。為了在保證相對(duì)較高的視頻圖像質(zhì)量的同時(shí),盡可能的提高網(wǎng)絡(luò)資源的利用率,就對(duì)視頻流的傳輸碼率的控制提出了需求。目前的碼率控制技術(shù)就是通過不停地調(diào)整編碼參數(shù)來控制緩沖區(qū)中比特的占有度,使其盡量達(dá)到穩(wěn)定,不出現(xiàn)上溢和下溢的情況;同時(shí)在保證緩沖比特占有度穩(wěn)定的前提下,盡量保證圖像質(zhì)量的穩(wěn)定。在各種視頻壓縮標(biāo)準(zhǔn)中,碼率控制一直扮演著非常重要的角色,例如MPEG2的TM5,H.263的TMN8等。然而在最新的視頻標(biāo)準(zhǔn),如H.264/MPEG-4 AVC和AVS中,由于采用了很多全新的編碼技術(shù),以前的很多碼率控制算法已經(jīng)不能應(yīng)用在新的編碼標(biāo)準(zhǔn)中。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種恒定碼率的控制方法,所述碼率控制方法通過對(duì)每個(gè)圖像組(GOP)為單位進(jìn)行恒定碼率控制。所述方法不僅控制精度高,輸出的碼流波動(dòng)小,而且編碼主觀圖像質(zhì)量好,同時(shí)計(jì)算復(fù)雜度低,適合各種軟件和硬件編碼的應(yīng)用。
本發(fā)明的目的是這樣實(shí)現(xiàn)的一種恒定碼率的控制方法,所述方法基于調(diào)節(jié)視頻圖像碼流的量化參數(shù)值來實(shí)現(xiàn)碼率控制,所述碼流包括I幀、P幀和B幀,具體步驟如下 步驟1、把視頻圖像劃分成若干個(gè)圖像組GOP,每個(gè)GOP是一組時(shí)間上連續(xù)的圖像,其目標(biāo)比特?cái)?shù)記為Bitgop,上式中NP和 NB分別為每個(gè)GOP中的B幀和P幀圖像的幀數(shù),R為信道目標(biāo)傳輸碼率,F(xiàn)為輸出幀率,Bitless為上一個(gè)GOP編碼后剩余的比特?cái)?shù),Bitless的初始值為0; 步驟2、實(shí)現(xiàn)幀級(jí)碼率控制,其進(jìn)一步包括 步驟2.1、計(jì)算當(dāng)前B幀或P幀能夠得到的比特?cái)?shù)為Bitcur_pic=λcur×(Bitgop-Bitcur_gop_used),上式中Bitcur_gop_used為當(dāng)前GOP已經(jīng)使用的比特?cái)?shù),λcur是當(dāng)前圖像的加權(quán)系數(shù),根據(jù)當(dāng)前圖像B幀或P幀的復(fù)雜度進(jìn)行計(jì)算; 步驟2.2、分別計(jì)算每幀中第i個(gè)P幀或B幀的量化參數(shù)QPP_i或QPB_i,i=1,2,3......; 步驟2.2.1、計(jì)算QPP_i n=1,2,...,L0-1 上式中,α為當(dāng)前幀的編碼比特Bitcur_pic與參考幀的編碼比特Bitref_pic的比,即QPref為P幀的參考幀的量化參數(shù),L0為GOP的長(zhǎng)度,η為經(jīng)驗(yàn)值,一般取1.8; 步驟2.2.2、計(jì)算QPB_i 用L表示I幀與P幀之間或P幀與P幀之間包含的B幀數(shù)量,設(shè)B幀參考的兩幀圖像的量化參數(shù)分別為QP1和QP2; 則當(dāng)L大于1時(shí),設(shè)定GOP中的第1個(gè)I幀的QP和第1個(gè)P幀的QP值均為QP1,則 QPB_1=QP1+Δ; Δ是QPB_1與QP1的差,Δ取值如下
當(dāng)L等于1時(shí),QPB_i=QP1+2; 步驟2.3、根據(jù)每一幀的量化參數(shù),重新對(duì)每一幀進(jìn)行編碼,直至幀結(jié)束;若幀未結(jié)束,則跳到步驟1; 步驟3、實(shí)現(xiàn)宏塊級(jí)碼率控制,其進(jìn)一步包括 步驟3.1、計(jì)算宏塊的平均絕對(duì)量化失真MAQD,記為MAQDMB, 上式中,Ci為宏塊的殘差DCT變換后的第i個(gè)DCT系數(shù),N為一個(gè)宏塊包含的像素個(gè)數(shù),β是實(shí)驗(yàn)值,一般取0.98,step是宏塊的量化步長(zhǎng); 步驟3.2、計(jì)算當(dāng)前宏塊的平均絕對(duì)量化失真,記為MAQDMB_cur,由當(dāng)前宏塊左邊相鄰宏塊的MAQD和參考幀的相應(yīng)位置的宏塊的MAQD加權(quán)得到,左邊相鄰宏塊和參考幀的相應(yīng)位置的宏塊的MAQD分別記為MAQDMB_left和MAQDMB_ref,則
步驟3.3、計(jì)算當(dāng)前宏塊的目標(biāo)比特,記為BitMB_cur, 上式中,θ是實(shí)驗(yàn)值,由宏塊類型和幀類型確定;N是當(dāng)前幀包含的宏塊數(shù)目,一般可取0.93;Bitcur_pic為當(dāng)前幀分配的比特;AVG(MAQD)是當(dāng)前已經(jīng)編碼的宏塊的MAQD的算術(shù)平均; 步驟3.4、計(jì)算當(dāng)前宏塊的量化參數(shù),記為QPMB_cur, QPMB_cur=λ×QPMB_prev+ΔQP 上式中,λ表示當(dāng)前宏塊的編碼比特BitMB_cur與相鄰的已經(jīng)編碼宏塊的編碼比特的平均值A(chǔ)VG(BitMB)的比,計(jì)算公式為其中 BitMB_left、BitMB_upleft、BitMB_up和BitMB_upright分別是待編碼宏塊的左邊、上左邊、上邊和上右邊相鄰已經(jīng)編碼宏塊的比特;iMB_left、iMB_upleft、iMB_up、iMB_upright的取值如下確定
QPMB_prev為當(dāng)前編碼宏塊前一個(gè)已經(jīng)編碼的宏塊的量化參數(shù);ΔQP為量化參數(shù)的調(diào)整量,ΔQP取值由ω的范圍確定,
步驟3.5、根據(jù)宏塊級(jí)的ΔQP調(diào)整量化參數(shù),完成當(dāng)前宏塊的編碼; 步驟3.6、判斷當(dāng)前圖像所有宏塊編碼是否完成,若宏塊編碼已完成,則跳到步驟2;若宏塊編碼未完成,則跳到步驟3.1; 步驟4、根據(jù)步驟2更新當(dāng)前圖像的編碼量化參數(shù),完成當(dāng)前幀編碼;判斷當(dāng)前圖像組GOP中所有的幀圖像的幀編碼是否完成,若果已完成,則繼續(xù)步驟5,否則,更新Bitless,跳到步驟2.1; 步驟5、如果當(dāng)前圖像的所有圖像組的編碼均已完成,則結(jié)束,否則跳到步驟1。
本發(fā)明由于采用了上述的技術(shù)方案,與現(xiàn)有技術(shù)相比,不僅控制精度高,輸出的碼流波動(dòng)小,而且編碼主觀圖像質(zhì)量好,計(jì)算復(fù)雜度低,適合各種軟件和硬件的應(yīng)用。
具體實(shí)施例方式 以下將對(duì)本發(fā)明的恒定碼率的控制方法作進(jìn)一步的詳細(xì)描述。
本實(shí)施例要求對(duì)包含一個(gè)I幀,4個(gè)P幀,11個(gè)B幀的圖像進(jìn)行編碼和傳輸碼率控制,圖像大小為352×288,劃分為16個(gè)圖像組(GOP),目標(biāo)幀率為400Kbps。本發(fā)明提供了一種恒定碼率的控制方法,所述方法基于調(diào)節(jié)量化參數(shù)QB值來實(shí)現(xiàn),具體實(shí)現(xiàn)步驟如下 步驟1、把視頻圖像按時(shí)間上的連續(xù)劃分成若干個(gè)GOP,每個(gè)GOP的目標(biāo)比特?cái)?shù)記為Bitgop,上式中NP和NB分別為每個(gè)圖像組GOP中的B幀和P幀圖像的幀數(shù),R為信道目標(biāo)傳輸碼率,F(xiàn)為輸出幀率,Bitless為上一個(gè)GOP編碼后剩余的比特?cái)?shù),Bitless的初始值為0; 步驟2、實(shí)現(xiàn)幀級(jí)碼率控制; 步驟2.1、計(jì)算當(dāng)前B幀或P幀能夠得到的比特?cái)?shù)為Bitcur_pic=λcur×(Bitgop-Bitcur_gop_used),上式中Bitcur_gop_used為當(dāng)前GOP已經(jīng)使用的比特?cái)?shù),λcur是當(dāng)前圖像的加權(quán)系數(shù),根據(jù)當(dāng)前圖像B幀或P幀的復(fù)雜度進(jìn)行計(jì)算;設(shè)當(dāng)前GOP得到的碼率為Bitgop=400kbps,I幀使用的比特?cái)?shù)BitI=95824bit,P幀使用的比特?cái)?shù)BitP=23832bit,接后面的2個(gè)B幀使用的比特?cái)?shù)分別為8488bit,12928bit,這樣Bitcur_gop_used=258928bit,Bitgop-Bitcur_gop_used=141072bit,對(duì)P幀進(jìn)行計(jì)算,λcur取0.13,則P幀的Bitcur_pic=18339bit;對(duì)B幀進(jìn)行計(jì)算,λcur取0.05,則B幀的Bitcur_pic=7053bit。
步驟2.2、分別計(jì)算每幀中第i個(gè)P幀或B幀的量化參數(shù)QPP_i或QPB_i,i=1,2,3......; 步驟2.2.1、計(jì)算QPP_i n=1,2,...,L0-1 上式中,α為當(dāng)前幀的編碼比特Bitcur_pic與參考幀的編碼比特為Bitref_pic的比,假如已知Bitref_pic=23832bit,則QPref為P幀的參考幀的量化參數(shù),即為上一個(gè)參考幀的平均量化參數(shù),可知QPref=36,L0為GOP的長(zhǎng)度為16,η為經(jīng)驗(yàn)值,一般取1.8;對(duì)下一個(gè)P幀n=2,可計(jì)算QPP_i=29.24。
步驟2.2.2、計(jì)算QPB_i 用L表示I幀與P幀之間或P幀與P幀之間包含的B幀數(shù)量,設(shè)B幀參考的兩幀圖像的量化參數(shù)分別為QP1和QP2,根據(jù)以上計(jì)算可得B幀的2個(gè)參考幀QP1=36,QP2=29.24,則QP2-QP1=-6.76;在本實(shí)施例中,L=2,根據(jù)Δ取值,即
可得Δ=2, 步驟2.3、根據(jù)每一幀的量化參數(shù),重新對(duì)每一幀進(jìn)行編碼,直至幀結(jié)束;若幀未結(jié)束,則跳到步驟1; 步驟3、實(shí)現(xiàn)宏塊級(jí)碼率控制; 步驟3.1、計(jì)算宏塊的平均絕對(duì)量化失真(MAQD,Mean Absolute QuantizedDistortion),記為MAQDMB, 上式中,Ci為宏塊的殘差DCT變換后的第i個(gè)DCT系數(shù),N為一個(gè)宏塊包含的像素個(gè)數(shù),β是實(shí)驗(yàn)值,一般取0.98,step是宏塊的量化步長(zhǎng); 步驟3.2、計(jì)算當(dāng)前宏塊的平均絕對(duì)量化失真,記為MAQDMB_cur,由當(dāng)前宏塊左邊相鄰宏塊的MAQD和參考幀的相應(yīng)位置的宏塊的MAQD加權(quán)得到,左邊相鄰宏塊和參考幀的相應(yīng)位置的宏塊的MAQD分別記為MAQDMB_left和MAQDMB_ref,則
步驟3.3、計(jì)算當(dāng)前宏塊的目標(biāo)比特,記為BitMB_cur, 上式中,θ是實(shí)驗(yàn)值,由宏塊類型和幀類型確定,本實(shí)施例取0.93; 對(duì)于P幀,Bitcur_pic=18339bit,N=352×288/16=6336,對(duì)P幀的一個(gè)宏塊,左邊的宏塊存在,MAQDMB_left=2.1,MAQDMB_ref=1.9,MAQDMB_cur=3.5,AVG(MAQD)=2.9,則BitMB_cur=3.2; 對(duì)于B幀,Bitcur_pic=7053bit,N=352×288/16=6336,對(duì)B幀的一個(gè)宏塊,左邊的宏塊存在,MAQDMB_left=1.1,MAQDMB_ref=1.9,MAQDMB_cur=1.1,AVG(MAQD)=1.09,則BitMB_cur=1.04。
步驟3.4、計(jì)算當(dāng)前宏塊的量化參數(shù),記為QPMB_cur, QPMB_cur=λ×QPMB_prev+ΔQP 上式中,λ表示當(dāng)前宏塊的編碼比特BitMB_cur與相鄰的已經(jīng)編碼宏塊的編碼比特的平均值A(chǔ)VG(BitMB)的比,計(jì)算公式為其中 對(duì)于P幀QPMB_prev=32,ω=3.5/2.9=1.2,ΔQP=-1,iMB_left不存在,iMB_upleft、iMB_up和iMB_upright存在,則iMB_left=0、iMB_upleft=1、iMB_up=1、iMB_upright=1,BitMB_lefe=0,BitMB_upleft=3.5,BitMB_up=2.9,BitMB_upright=2.0,AVG(BitMB)=(3.5+2.9+2)/3=2.8,則QPMB_cur=λ×QPMB_prev+ΔQP=1.14×32-1=35.6; 對(duì)于B幀QPMB_prev=35,ω=1.1/1.09=1.0,ΔQP=-1,iMB_left、iMB_upleft、iMB_up和iMB_upright存在,則iMB_left=1、iMB_upleft=1、iMB_up=1、iMB_upright=1,BitMB_left=3.1,BitMB_upleft=3.3,BitMB_up=3.6,BitMB_upright=2.8,AVG(BitMB)=(3.1+3.3+3.6+2.8)/4=3.2,則QPMB_cur=λ×QPMB_prev+ΔQP=0.38×36-1=12.5; 步驟3.5、根據(jù)宏塊級(jí)的ΔQP調(diào)整量化參數(shù),完成當(dāng)前宏塊的編碼; 步驟3.6、判斷當(dāng)前圖像所有宏塊編碼是否完成,若宏塊編碼已完成,則跳到步驟2;若宏塊編碼未完成,則跳到步驟3.1; 步驟4、根據(jù)步驟2更新當(dāng)前圖像的編碼量化參數(shù),完成當(dāng)前幀編碼;判斷當(dāng)前圖像組GOP中所有的幀圖像的幀編碼是否完成,若果已完成,則繼續(xù)步驟5,否則,更新Bitless,跳到步驟2.1; 步驟5、如果當(dāng)前圖像的所有圖像組的編碼均已完成,則結(jié)束,否則跳到步驟1。
實(shí)施例編碼結(jié)果表明,本發(fā)明所述的恒定碼率控制方法不僅具有控制精度高,輸出的碼流波動(dòng)小的優(yōu)點(diǎn),而且編碼主觀圖像質(zhì)量好,同時(shí)計(jì)算復(fù)雜度低。
權(quán)利要求
1.一種恒定碼率的控制方法,所述方法基于調(diào)節(jié)視頻圖像碼流的量化參數(shù)值來實(shí)現(xiàn)碼率控制,所述碼流包括I幀、P幀和B幀,其特征在于,所述碼率控制方法通過以下步驟實(shí)現(xiàn)
步驟1、把視頻圖像劃分成若干個(gè)圖像組GOP,每個(gè)GOP是一組時(shí)間上連續(xù)的圖像,其目標(biāo)比特?cái)?shù)記為Bitgop,上式中NP和NB分別為每個(gè)GOP中的B幀和P幀圖像的幀數(shù),R為信道目標(biāo)傳輸碼率,F(xiàn)為輸出幀率,Bitless為上一個(gè)GOP編碼后剩余的比特?cái)?shù),Bitless的初始值為0;
步驟2、實(shí)現(xiàn)幀級(jí)碼率控制,其進(jìn)一步包括
步驟2.1、計(jì)算當(dāng)前B幀或P幀能夠得到的比特?cái)?shù)為Bitcur_pic=λcur×(Bitgop-Bitcur_gop_used),上式中Bitcur_gop_used為當(dāng)前GOP已經(jīng)使用的比特?cái)?shù),λcur是當(dāng)前圖像的加權(quán)系數(shù),根據(jù)當(dāng)前圖像B幀或P幀的復(fù)雜度進(jìn)行計(jì)算;
步驟2.2、分別計(jì)算每幀中第i個(gè)P幀或B幀的量化參數(shù)QPP_i或QPB_i,i=1,2,3......;
步驟2.2.1、計(jì)算QPP_i
n=1,2,...,L0-1
上式中,α為當(dāng)前幀的編碼比特Bitcur_pic與參考幀的編碼比特Bitref_pic的比,即QPref為P幀的參考幀的量化參數(shù),L0為GOP的長(zhǎng)度,η為經(jīng)驗(yàn)值,一般取1.8;
步驟2.2.2、計(jì)算QPB_i
用L表示I幀與P幀之間或P幀與P幀之間包含的B幀數(shù)量,設(shè)B幀參考的兩幀圖像的量化參數(shù)分別為QP1和QP2;
則當(dāng)L大于1時(shí),設(shè)定GOP中的第1個(gè)I幀的QP和第1個(gè)P幀的QP值均為QP1,則
QPB_1=QP1+Δ;
Δ是QPB_1與QP1的差,Δ取值如下
當(dāng)L等于1時(shí),QPB_i=QP1+2;
步驟2.3、根據(jù)每一幀的量化參數(shù),重新對(duì)每一幀進(jìn)行編碼,直至幀結(jié)束;若幀未結(jié)束,則跳到步驟1;
步驟3、實(shí)現(xiàn)宏塊級(jí)碼率控制,其進(jìn)一步包括
步驟3.1、計(jì)算宏塊的平均絕對(duì)量化失真MAQD,記為MAQDMB,
上式中,Ci為宏塊的殘差DCT變換后的第i個(gè)DCT系數(shù),N為一個(gè)宏塊包含的像素個(gè)數(shù),β是實(shí)驗(yàn)值,一般取0.98,step是宏塊的量化步長(zhǎng);
步驟3.2、計(jì)算當(dāng)前宏塊的平均絕對(duì)量化失真,記為MAQDMB_cur,由當(dāng)前宏塊左邊相鄰宏塊的MAQD和參考幀的相應(yīng)位置的宏塊的MAQD加權(quán)得到,左邊相鄰宏塊和參考幀的相應(yīng)位置的宏塊的MAQD分別記為MAQDMB_left和MAQDMB_ref,則
步驟3.3、計(jì)算當(dāng)前宏塊的目標(biāo)比特,記為BitMB_cur,
上式中,θ是實(shí)驗(yàn)值,由宏塊類型和幀類型確定;N是當(dāng)前幀包含的宏塊數(shù)目,一般可取0.93;Bitcur_pic為當(dāng)前幀分配的比特;AVG(MAQD)是當(dāng)前已經(jīng)編碼的宏塊的MAQD的算術(shù)平均;
步驟3.4、計(jì)算當(dāng)前宏塊的量化參數(shù),記為QPMB_cur,
QPMB_cur=λ×QPMB_prev+ΔQP
上式中,λ表示當(dāng)前宏塊的編碼比特BitMB_cur與相鄰的已經(jīng)編碼宏塊的編碼比特的平均值A(chǔ)VG(BitMB)的比,計(jì)算公式為其中
BitMB_left、BitMB_upleft、BitMB_up和BitMB_upright分別是待編碼宏塊的左邊、上左邊、上邊和上右邊相鄰已經(jīng)編碼宏塊的比特;iMB_left、iMB_upleft、iMB_up、iMB_upright的取值如下確定
QPMB_prev為當(dāng)前編碼宏塊前一個(gè)已經(jīng)編碼的宏塊的量化參數(shù);ΔQP為量化參數(shù)的調(diào)整量,ΔQP取值由ω的范圍確定,
步驟3.5、根據(jù)宏塊級(jí)的ΔQP調(diào)整量化參數(shù),完成當(dāng)前宏塊的編碼;
步驟3.6、判斷當(dāng)前圖像所有宏塊編碼是否完成,若宏塊編碼已完成,則跳到步驟2;若宏塊編碼未完成,則跳到步驟3.1;
步驟4、根據(jù)步驟2更新當(dāng)前圖像的編碼量化參數(shù),完成當(dāng)前幀編碼;判斷當(dāng)前圖像組GOP中所有的幀圖像的幀編碼是否完成,若果已完成,則繼續(xù)步驟5,否則,更新Bitless,跳到步驟2.1;
步驟5、如果當(dāng)前圖像的所有圖像組的編碼均已完成,則結(jié)束,否則跳到步驟1。
全文摘要
本發(fā)明提供了一種恒定碼率的控制方法,所述方法把當(dāng)前圖像劃分成若干個(gè)圖像組,對(duì)每個(gè)圖像組采用幀級(jí)碼率控制和宏塊級(jí)碼率控制來對(duì)圖像進(jìn)行編碼。本發(fā)明提供的恒定碼率控制方法,控制精度高,輸出的碼流波動(dòng)小,而且編碼主觀圖像質(zhì)量好,計(jì)算復(fù)雜度很低,適合各種軟件和硬件編碼的應(yīng)用。
文檔編號(hào)H04N7/26GK101184239SQ20071017227
公開日2008年5月21日 申請(qǐng)日期2007年12月13日 優(yōu)先權(quán)日2007年12月13日
發(fā)明者許昌滿, 李國(guó)平 申請(qǐng)人:上海廣電(集團(tuán))有限公司中央研究院