專利名稱:基于場景的二次編碼圖像組劃分方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種視頻信號處理技術(shù),尤其涉及一種基于場景的二次編碼圖像組劃分方法
背景技術(shù):
在現(xiàn)有視頻編碼中,通常采用固定圖像組(以下簡稱GOP)結(jié)構(gòu)進行編碼。當(dāng)場景發(fā)生切 換或圖像運動劇烈時,由于使用前一幀相同位置基本單元的MAD(Mean Absolute Difference,平均絕對誤差)值線性預(yù)測當(dāng)前基本單元的MAD值,導(dǎo)致當(dāng)前幀MAD值以及QP ( 量化參數(shù))預(yù)測不準確,并且由于編碼過程中通常采用CBR(Constant Bit Rate,恒定比特 率)碼率控制技術(shù)對整個視頻序列平均分配碼率,往往使得場景切換以及運動劇烈的圖像質(zhì) 量急劇下降,影響了視頻編碼重建圖像的穩(wěn)定性,甚至造成馬賽克現(xiàn)象。綜上,現(xiàn)有技術(shù)產(chǎn) 生這些缺陷的根本原因是未對場景切換后的GOP進行重新劃分。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是針對現(xiàn)有技術(shù)的不足,提出一種基于場景的二次編碼 G0P劃分方法,解決在場景切換時產(chǎn)生圖像質(zhì)量下降的問題,提高視頻編碼重建圖像的穩(wěn)定 性。
本發(fā)明解決上述技術(shù)問題采用的技術(shù)方案是基于場景的二次編碼GOP劃分方法,包括 以下步驟
a. 對視頻序列進行第一次編碼,統(tǒng)計場景切換的位置;
b. 第二次編碼中,根據(jù)第一次編碼中場景切換位置,進行新的GOP劃分,并完成該GOP的 初始化;
c. 編碼該GOP圖像時,計算每幀圖像的幀號;
d. 對該GOP中每幀圖像進行優(yōu)化編碼。 所述步驟b中,具體劃分GOP的方法為
設(shè)任意一幀圖像對應(yīng)的幀號為frame—no , I幀或P幀對應(yīng)的幀號為Img—no; bl:無B幀時GOP劃分方法
如果該場景為第一個場景或場景標志位為真,可以判斷場景發(fā)生切換,開始新的GOP初 始化將場景切換幀強制編碼為I幀,在第一次編碼中得到了該場景的長度Ns(i),則在第二次編碼中該場景編碼的P幀數(shù)目為np2,s(i^ Ns(i)-1,對于非場景切換的幀按照正常的編碼 結(jié)構(gòu)進行編碼;
b2:有B幀時GOP劃分方法
當(dāng)有B幀插入時,假設(shè)連續(xù)插入B幀的數(shù)目為Bn。,記M二Bn。+l;場景標志位為真或者場景 為第一個場景時,可以判斷場景發(fā)生切換,開始新的GOP初始化將場景切換幀強制編碼為 I幀,在第一次編碼中得到了該場景的長度Ns(i),則在第二次編碼中該場景中的P幀的數(shù)目 為np2,s(i)= [Ns(i)-1] /M+[ Ns(i)-1]%M,該場景中B幀的數(shù)目為nb2,s(i^ Ns(i)-np2,s(i)-1;如果待編碼的B幀圖像位于場景尾部時,將其強制編碼為P幀;統(tǒng)計在第一次編 碼中如果插入B幀時應(yīng)編碼的P幀數(shù)目npLs(i),判斷的方法是,如果[Starts(0°觀]=0則 npi,s(i) = [Ns(i)-1]/M+l,否則npi,s(iX Ns(i)-M+[Starts(i)%M-1])/M+l;同時,需要計算 該場景在第二次編碼中開始編碼最后一組B幀時已編碼的I幀和P幀總數(shù)Nw(i);將上一G0P中 得到的N^(i-l)和Np!,s(i-1)用于更新當(dāng)前G0P中的初始值Img—no,相應(yīng)的方法是如果 NIP(i-l)〉NPl,s(i-1),則lmg—no計數(shù)更新為Img—no-[ NIP(i-1)- NPl,s(i-1)],否則Img—no 的計數(shù)不改變。
所述步驟c中,計算每幀圖像的幀號的方法是假設(shè)該場景中已編碼的B幀和P幀的幀數(shù) 分別為nb—account (i)和np—account (i),這兩個值在該G0P初始化時設(shè)置為0;設(shè)第二次編碼 時該場景應(yīng)編碼的B幀數(shù)目為nb2,s(i);如果[Starts(i)。/。M]^0并且nb—account (i) < nb2,s(i),貝ljframe—no=Img—noXM—[M— Starts(i)%M],如果[Starts(i)。/oM]二0并且 nb—account (i) <nb2,s(i),貝ljframe—no=Img—noXM,如果[Starts(i)。/oM] #0并且 nb—account (i)=nb2, s(i), 貝llframe—no=Img—no XM—[M— Starts(i)%M]+np—account, 如果 [Starts (i)彌]二0并且nb—account (i) =nb2, s (i), 貝llf rame—no=Img—no X M+np—account; 在計 算B幀的幀號時,需要首先計算上一個P幀的幀號prevP—no和下一個P幀的幀號nextP—no,其 中prevP—no的計算方法為(Img—no-1) XM-[M- Starts(i)%M],相應(yīng)地,nextP—no的計算方 法為(Img—no+1) XM-[M- Starts(i)%M],該B幀的幀號為frame—no=prevP—no+BnoXnb—code ,其中nb—code為每次插入B幀時該B幀所處的位置,其值間于[l, B加]之間。
本發(fā)明的有益效果是避免了在場景切換時圖像質(zhì)量下降的情況,提高視頻編碼重建圖 像的穩(wěn)定性。
具體實施例方式
下面結(jié)合實施例對本發(fā)明作進一步的描述。
本發(fā)明所要解決的技術(shù)問題是針對現(xiàn)有技術(shù)的不足,提出一種基于場景的二次編碼G0P劃分方法,解決在場景切換時產(chǎn)生圖像質(zhì)量下降的問題,提高視頻編碼重建圖像的穩(wěn)定 性。
實施例
本例中的二次編碼GOP劃分方法可采用以下步驟實現(xiàn)
(a) 初始化視頻信號的初始量化參數(shù),設(shè)定編碼幀率以及相關(guān)編碼參數(shù),判斷待編碼視 頻序列的編碼次數(shù),如果為第一次編碼,則執(zhí)行b進行第一次編碼,否則,進入步驟c進行第
二次編碼。
(b) 在第一次編碼過程中,采用固定QP進行編碼,編碼結(jié)構(gòu)采用IPPP模式,只對視頻序 列首幀編碼為I幀,關(guān)閉碼率控制選項,開啟RD0 (率失真優(yōu)化)。假設(shè)Fn為第二次編碼中設(shè)
置的編碼幀數(shù),連續(xù)插入B幀的數(shù)目為Bn。,則在第一次和第二次編碼過程中需要編碼的實際 幀數(shù)為~。"1= 11+ (Fn-1) XBn。。在第一次編碼中采用場景檢測算法,記錄第i個場景的起始
和結(jié)束位置分別為Starts(i)和Ends(i),可以確定該場景的幀長度為Ns(i)。設(shè)置場景切換的 標志位Scene—flag(i),如果發(fā)生場景切換,則該標志位設(shè)置為l,否則設(shè)置為0。
(c) 在第二次編碼過程中,編碼結(jié)構(gòu)支持插入B幀編碼,開啟碼率控制和RDO。假設(shè)任意 一幀圖像對應(yīng)的幀號為frame—no, I幀或P幀對應(yīng)的幀號為Img—no。如果在第二次編碼中無B 幀插入,則進入步驟d,否則進入步驟e。
(d) 當(dāng)沒有B幀插入時,如果該場景為第一個場景或Scene—flag(i)為真,可以判斷場景 發(fā)生切換,即開始新的GOP初始化將場景切換幀強制編碼為I幀,由于在第一次編碼中得到 了該場景的長度Ns(i),則在第二次編碼中該場景編碼的P幀數(shù)目為np2,s(iXNs(i)-1],對 于非場景切換的幀按照正常的編碼結(jié)構(gòu)進行編碼。
(e) 當(dāng)有B幀插入時,假設(shè)連續(xù)插入B幀的數(shù)目為Bn。,記M二Bn。+l。當(dāng)一幀圖像編碼完成 時,記錄該幀的frame—no并結(jié)合場景切換標志位判斷場景是否發(fā)生切換,相應(yīng)的方法是如果 場景標志位為真,或者場景為第一個場景時,可以判斷場景發(fā)生切換,即開始新的GOP初始 化將場景切換幀編碼為I幀,由于在第一次編碼中得到了該場景的長度Ns(i),該場景中P 幀的數(shù)目計算公式為np2,s(i^ [Ns(i)-1] /M+[ Ns(i)-1]%M,則該GOP中B幀的數(shù)目為 nb2,s(i)= Ns(i)- np2,s(i)-l。假設(shè)該場景中已編碼的B幀和P幀的幀數(shù)分別為
nb—account (i)和np—account (i),這兩個值在每個GOP初始化時設(shè)置為0。由于B幀編碼采用 雙向預(yù)測模式,對當(dāng)前待編碼的B幀圖像,需要先編碼其前后兩個參考幀。如果待編碼的B幀 圖像位于場景尾部時,由于前后兩個場景的相關(guān)性很小,對于當(dāng)前場景尾部的B幀圖像,不 應(yīng)讓其參考下一場景的P幀圖像,而將這些多余的B幀圖像(其幀數(shù)間于[O, Bn。]之間)強制
6編碼為P幀,消除了固定GOP結(jié)構(gòu)中B幀圖像參考其下一場景的圖像。由于本方法改變了編碼 圖像的順序及結(jié)構(gòu),在第二次編碼中需要統(tǒng)計在第一次編碼中如果插入B幀時應(yīng)編碼的P幀數(shù) 目np^s(i),判斷的方法是,如果[Starts(i)%M]=0 (該公式含義為第i個場景的起始幀號 Starts(i)與M的余數(shù)為O),貝ljnp!, s(i) = [Ns(i)-1]/M+l,否則np!,s(i)二( Ns(i)-M+[Starts(i)%M-l])/M+l。同時,需要計算該場景在第二次編碼中開始編碼最后一組 B幀時已編碼的I幀和P幀總數(shù)Nw(i)。為了使得兩次編碼中編碼每一個場景時Img—no的起始 位置相同,應(yīng)將上一GOP中得到的Nw(i-l)(表示前一GOP在第二次編碼中開始編碼最后一組B 幀時已編碼的I幀和P幀總數(shù))和npi,s(i-l)(表示前一GOP在第一次編碼中如果插入B幀時應(yīng)該 編碼的P幀的數(shù)目)用于更新當(dāng)前GOP中的初始值Img—no。相應(yīng)的方法是如果N^(i-1)〉 npi,s(i-1),則lmg—no計數(shù)更新為Img—no-[ NIP(i-1)- NPl,s(i-1)],否則Img—no的計數(shù)不改 變。然后進入步驟f。
(f)在第二次編碼中,在編碼該場景某幀圖像時,需要讀取該幀的幀號frame—no。計算 I幀或P幀幀號的方法為如果[Starts(i)。/。M]^0并且nb—account (i) <nb2,s(i),貝lj frame—no=Img—no XM-[M- Starts(i)%M],如果[Starts(i"/oM]二0并且nb—account (i) < nb2,s(i),貝ljframe—no=Img—noXM,如果[Starts(i"/oM] ^0并且nb—account (i)=nb2, s(i),貝ll frame—no=Img—no XM- [M- Starts (i) %M] +np—account,如果[Starts (i) %M] =0并且 nb—account (i)=nb2, s(i) , M|frame—no=Img—no XM+np—account 。在計算B幀的幀號時,需要 首先計算上一個P幀的幀號prevP—no和下一個P幀的幀號nextP—no,其中prevP—no的計算方法 為(Img—no-1) XM-[M- Starts (i)%M],相應(yīng)地,nextP—no的計算方法為(Img—no+1) X M-[M-Starts(i)0/oM],該B幀的幀號為frame—no=prevP—no+BnoXnb—code,其中nb—code為每次 插入B幀時該B幀所處的位置,其值間于[l, Bn。]之間。
權(quán)利要求
權(quán)利要求1基于場景的二次編碼圖像組劃分方法,其特征在于包括以下步驟a. 對視頻序列進行第一次編碼,統(tǒng)計場景切換的位置;b. 第二次編碼中,根據(jù)第一次編碼中場景切換位置,進行新的圖像組劃分,并完成該圖像組的初始化;c. 編碼該圖像組圖像時,計算每幀圖像的幀號;d. 對該圖像組中每幀圖像進行優(yōu)化編碼。
2 如權(quán)利要求l所述的基于場景的二次編碼圖像組劃分方法,其特征 在于所述步驟b中,具體劃分圖像組的方法為設(shè)任意一幀圖像對應(yīng)的幀號為frame—no , I幀或P幀對應(yīng)的幀號為Img—no; bl:無B幀時圖像組劃分方法如果該場景為第一個場景或場景標志位為真,可以判斷場景發(fā)生切換,開始新的圖像 組初始化將場景切換幀強制編碼為I幀,在第一次編碼中得到了該場景的長度1^(。,則在 第二次編碼中該場景編碼的P幀數(shù)目為nP"(i^ &("_1,對于非場景切換的幀按照正常的 編碼結(jié)構(gòu)進行編碼;b2:有B幀時圖像組劃分方法當(dāng)有B幀插入時,假設(shè)連續(xù)插入B幀的數(shù)目為B"記M二B^+1;場景標志位為真或者場景為第一個場景時,可以判斷場景發(fā)生切換,開始新的圖像組初始化將場景切換幀強制編碼為I幀,在第一次編碼中得到了該場景的長度w^",在第二次編碼中該場景中的P幀的數(shù) 目為np"(i)= [Ns(i)-l]/M+[ Ns(i)-1]M,該場景中B幀的數(shù)目為nbas(i)= Wji)_ np"(i)_l;如果待編碼的B幀圖像位于場景尾部時,將其強制編碼為P幀;統(tǒng)計在第一次編碼中如果插入B幀時應(yīng)編碼的P幀數(shù)目nPi'^i),判斷的方法是,如果 [Star、(iHM]^則np^(i^[Ns(i)-l]/l+l,否則nPi,JiXlMi)1+「StartJihFl])/H+l;同時,需要計算該場景在第二次編碼中開始編碼最后一組B幀時已編碼的I幀和P幀總數(shù)N^(i);將上一圖像組中得到的^p(卜l)和WP"(卜D用于更新當(dāng)前圖像組中的初始值Img—no,相應(yīng)的方法是如果 NIP(i-l)>NPl,s(i-l),則lmg—no計數(shù)更新為I呢—加-[NIP(i_l) - NPl,s (i-l)],否則工呢—no的計數(shù)不改變。
3.如權(quán)利要求2所述的基于場景的二次編碼圖像組劃分方法,其特征 在于所述步驟C中,計算每幀圖像的幀號的方法是假設(shè)該場景中已編碼的B幀和P幀的幀數(shù)分別為nb—account (i)和np—account (i),這兩個值在該圖像組初始化時設(shè)置為O;設(shè)第二 次編碼時該場景應(yīng)編碼的B幀數(shù)目為nb"(i);如果[Star"(i^M]^0并且nb—accomit(i) < nbas(i),則frame—no=Img—noXM-[M- Star"(i)%M],如果[Star"(i)M]二O并且 nb—account (i) < nba s(i),則f rame—no=Img—no X M,如果[Start s (i)%M]弁O并且 nb—account (i)二nb^ s(i), 貝ijframe—no=Img—noXM-[M- Star"(i)%M]+np—account , 如果 [Star"(i)M]二0并且nb—account (i)=nbas(i),則fra鵬—no=img—noXM+np—account;在計 算B幀的幀號時,需要首先計算上一個P幀的幀號prevP—no和下一個P幀的幀號nextP—no,其 中prevP—110的計算方法為(1呢-no-D X M-[M- Starts(i)%M],相應(yīng)地,nextP—no的計算方 法為(Img-nc3+i;) Star"(iHM],該B幀的幀號為frame_no=prevF—no+B加Xnb_code,其中nb—code為每次插入B幀時該B幀所處的位置, 其值間于[l, B"之間。
全文摘要
本發(fā)明涉及一種視頻信號處理技術(shù),尤其涉及一種基于場景的二次編碼圖像組劃分方法。本發(fā)明公開一種基于場景的二次編碼GOP劃分方法,解決在場景切換時產(chǎn)生圖像質(zhì)量下降的問題,提高視頻編碼重建圖像的穩(wěn)定性。其技術(shù)方案的要點是包括以下步驟a.對視頻序列進行第一次編碼,統(tǒng)計場景切換的位置;b.第二次編碼中,根據(jù)第一次編碼中場景切換位置,進行新的GOP劃分,并完成該GOP的初始化;c.編碼該GOP圖像時,計算每幀圖像的幀號;d.對該GOP中每幀圖像進行優(yōu)化編碼。本發(fā)明的有益效果是避免了在場景切換時圖像質(zhì)量下降的情況,提高視頻編碼重建圖像的穩(wěn)定性,適用于對視頻信號的處理。
文檔編號H04N7/50GK101489138SQ20091030038
公開日2009年7月22日 申請日期2009年2月11日 優(yōu)先權(quán)日2009年2月11日
發(fā)明者展華益, 徐錦亮, 超 曾 申請人:四川長虹電器股份有限公司