專利名稱:編碼方法以及裝置、解碼方法以及裝置的制作方法
技術領域:
本發(fā)明涉及數(shù)據(jù)處理領域,尤其涉及一種編碼方法以及裝置、解碼方法以及裝置。
背景技術:
在現(xiàn)有視頻圖像編碼過程中,編碼端需要對原始圖像塊數(shù)據(jù)或預測后的圖像塊差值數(shù)據(jù)進行空間變換,并對變換系數(shù)進行量化操作,再對量化后的系數(shù)進行熵編碼。解碼端則對熵解碼得到的系數(shù)進行反量化操作,重建得到變換系數(shù),再進行反變換操作得到原始圖像塊數(shù)據(jù)或圖像塊差值數(shù)據(jù)。為在解碼端進行反量化操作,解碼端需獲取編碼端量化過程中所采用的量化步長(QStep)。因此,編碼端需要將所采用的Qstep信息寫入碼流中。由于不同的Qstep可以使用不同的量化參數(shù)(QP,Quantization Parameter)來表示,所以編碼端可以對QP進行編碼,并傳輸?shù)浇獯a端。 高效視頻編碼測試模型(HM,Highefficiency video coding test Model)中將圖像劃分為等大小的最大編碼單元(IXU, Largest Coding Unit),每個IXU中可以包括一個或多個大小不固定的CU?,F(xiàn)有技術中的一種圖像編碼方法中,允許具有獨立的QP的最小圖像是IXU,也就是說,每個IXU對應一個QP。編碼端在進行編碼時,QP相關信息在圖像參數(shù)集(PPS, Picture Parameter Set)
中的描述為
pic_parameter_set_rbsp() { pic_init_qp_minus26 /* relative to 26 */
}在條帶頭(SH,Slice Header)中的描述為
slice—header() {
slice—qp_delta
}在IXU中的描述為coding—tree( xO, yO, log2CUSize ) {
if( !skip—flag[ xO ][ yO ]) lcuqpdelta
}編碼端按照上述的方式完成編碼后,將編碼后的數(shù)據(jù)發(fā)送至解碼端,解碼端對每一個IXU,采用如下方式計算當前IXU的量化參數(shù)QPmi QPlcu = lcu_qp_delta+slice_qp_delta+pic_init_qp_minus26+260解碼端得到當前IXU的QPwu后,即可進行解碼。從上述現(xiàn)有技術的方案中可以看出
現(xiàn)有技術中,每個IXU對應一個QP,編碼端在通過調整QP以進行碼率控制時,只能以LCU為最精細粒度進行控制,由于在實際應用中LCU往往會設置的比較大,例如64像素*64像素(為簡便描述,后續(xù)簡稱為64*64,其他數(shù)據(jù)類似),所以現(xiàn)有技術的方案影響了碼率控制的精度?,F(xiàn)有技術中另外一種圖像編碼方法中,在各LCU的每個CU中都攜帶有該CU的qp_delta信息,從而可以提高碼率控制的精度。但是,在該現(xiàn)有技術中,由于最小的⑶可以設置為8*8,若在每個⑶中都攜帶該CU的qp_delta信息,則會增加大量的編碼開銷,從而影響圖像編碼的整體壓縮效率。
發(fā)明內容
本發(fā)明實施例提供了一種編碼方法及裝置、解碼方法及裝置以及編解碼系統(tǒng),能夠有效提高碼率控制精度以及壓縮效率。本發(fā)明實施例提供的編碼方法,包括編碼端獲取待編碼數(shù)據(jù),所述待編碼數(shù)據(jù)至少為一個最大編碼單元LCU ;編碼端按照預置的碼率控制算法確定所述LCU的量化深度參數(shù),并將所述量化深度參數(shù)寫入所述待編碼數(shù)據(jù),所述量化深度參數(shù)用于表示所述LCU中具有獨立QP的最小圖像塊尺寸;編碼端根據(jù)所述最小圖像塊尺寸與所述LCU中包含的各⑶的尺寸確定各⑶的QP ;編碼端根據(jù)所述各⑶的QP以及各⑶的QP預測值計算各⑶的QP差;對于每一個滿足預置條件的CU,編碼端在該CU中攜帶該CU的QP差;編碼端對所述量化深度參數(shù)、滿足預置條件的CU的QP差、以及各CU進行編碼得到碼流。本發(fā)明實施例提供的解碼方法,包括解碼端對接收到的碼流進行解析得到量化深度參數(shù),所述量化深度參數(shù)用于表示LCU中具有獨立QP的最小圖像塊尺寸;解碼端按照所述最小圖像塊尺寸與所述LCU中包含的各CU的尺寸計算各CU的QP預測值;對于每一個滿足預置條件的CU,解碼端從碼流中解析得到其QP差;解碼端根據(jù)所述各CU的QP預測值以及解析得到的QP差計算各CU的QP ;解碼端按照所述各CU的QP對各CU進行解碼。本發(fā)明實施例提供的編碼裝置,包括數(shù)據(jù)獲取單元,用于獲取待編碼數(shù)據(jù),所述待編碼數(shù)據(jù)至少為一個最大編碼單元LCU;深度參數(shù)處理單元,用于按照預置的碼率控制算法確定所述LCU的量化深度參數(shù),并將所述量化深度參數(shù)寫入所述數(shù)據(jù)獲取單元獲取到的待編碼數(shù)據(jù),所述量化深度參數(shù)用于表示所述LCU中具有獨立QP的最小圖像塊尺寸;量化參數(shù)確定單元,用于根據(jù)所述最小圖像塊尺寸與所述LCU中包含的各CU的尺寸確定各CU的QP ;計算單元,用于根據(jù)所述量化參數(shù)確定單元確定的各CU的QP以及各CU的QP預測值計算各CU的QP差;填充單元,用于對于每一個滿足預置條件的CU,在該CU中攜帶該CU的QP差;編碼單元,用于對所述量化深度參數(shù)、滿足預置條件的CU的QP差、以及各CU進行編碼得到碼流。本發(fā)明實施例提供的解碼裝置,包括第一解析單元,用于對接收到的碼流進行解析得到量化深度參數(shù),所述量化深度參數(shù)用于表示LCU中具有獨立QP的最小圖像塊尺寸;參數(shù)預測單元,用于按照所述最小圖像塊尺寸與所述LCU中包含的各CU的尺寸計算各CU的QP預測值;第二解析單元,用于對每一個滿足預置條件的CU,從碼流中解析得到其QP差;參數(shù)計算單元,用于根據(jù)所述參數(shù)預測單元獲得的各CU的QP預測值以及所述第二解析單元解析得到的QP差計算各⑶的QP ;解碼單元,用于按照所述參數(shù)計算單元計算得到的各⑶的QP對各⑶進行解碼。
從以上技術方案可以看出,本發(fā)明實施例具有以下優(yōu)點本發(fā)明實施例中,編碼端在編碼時可以在待編碼數(shù)據(jù)中寫入用于表示具有獨立QP的最小圖像塊尺寸的量化深度參數(shù),并且對每一個滿足預置條件的CU中,都攜帶該CU的QP差,使得每個LCU不僅僅再對應一個QP,而由LCU中滿足預置條件的CU對應QP,所以編碼端能夠以CU為最精細粒度進行碼率控制,由于一個LCU中往往包含多個CU,因此能夠有效提高LCU的碼率控制精度;此外,編碼端僅在滿足預置條件的CU中才攜帶該CU的QP差,而并不會在所有的⑶中都攜帶QP差,所以可以減少編碼開銷,從而有效提高整體壓縮效率。
圖I為本發(fā)明編碼方法一個實施例示意圖;圖2為本發(fā)明解碼方法一個實施例示意圖;圖3為本發(fā)明編解碼方法一個實施例示意圖;圖4為本發(fā)明⑶與鄰近⑶之間的位置關系示意圖;圖5為本發(fā)明IXU結構示意圖;圖6為本發(fā)明編碼后的一種碼流結構示意圖;圖7為本發(fā)明編解碼方法另一實施例示意圖;圖8為本發(fā)明編碼后的另一碼流結構示意圖;圖9為本發(fā)明編碼裝置一個實施例示意圖;圖10為本發(fā)明編碼裝置另一實施例示意圖;圖11為本發(fā)明編碼裝置另一實施例示意圖;圖12為本發(fā)明解碼裝置一個實施例示意圖;圖13為本發(fā)明解碼裝置另一實施例示意圖;圖14為本發(fā)明解碼裝置另一實施例示意圖。
具體實施方式
本發(fā)明實施例提供了一種編碼方法以及裝置、解碼方法以及裝置,能夠有效提高碼率控制精度以及壓縮效率。請參閱圖1,本發(fā)明實施例中編碼方法一個實施例包括101、編碼端獲取待編碼數(shù)據(jù);本實施例中,編碼端可以獲取到待編碼數(shù)據(jù),該待編碼數(shù)據(jù)至少為一個LCU,即該待編碼數(shù)據(jù)可以為一個IXU,也可以為多個IXU組成的數(shù)據(jù)。102、編碼端按照預置的碼率控制算法確定LCU的量化深度參數(shù),并將量化深度參數(shù)寫入待編碼數(shù)據(jù);編碼端根據(jù)預置的碼率控制算法獲取LCU的量化深度參數(shù),該量化深度參數(shù)用于表示IXU中具有獨立QP的最小圖像塊尺寸。
需要說明的是,本實施例以及后續(xù)實施例中所描述的尺寸是指邊長,例如某CU為32*32,則定義其尺寸為32。編碼端可以采用嘗試替代的方式獲取LCU的量化深度參數(shù),即不斷調整量化深度參數(shù)的數(shù)值并進行模擬編碼,使得編碼后的碼率符合預期的要求,具體過程此處不作限定。當編碼端確定了量化深度參數(shù)之后,可以將該量化深度參數(shù)寫入待編碼數(shù)據(jù)中以準備發(fā)送至解碼端。103、編碼端根據(jù)最小圖像塊尺寸與IXU中包含的各⑶的尺寸確定各⑶的QP ;當編碼端獲取到LCU的量化深度參數(shù)之后,可以獲知該量化深度參數(shù)所對應的具有獨立QP的最小圖像塊尺寸,并根據(jù)最小圖像塊尺寸與IXU中包含的各⑶的尺寸確定各CU 的 QP。104、編碼端根據(jù)各⑶的QP以及各⑶的QP預測值計算各⑶的QP差;本實施例中,編碼端可以根據(jù)步驟103中得到的各⑶的QP計算得到各⑶的QP預測值,再根據(jù)該QP預測值,結合QP,計算得到各CU的QP差。本實施例中,某CU的QP差可以定義為該CU的QP與該CU的QP預測值之間的差值。105、對于每一個滿足預置條件的⑶,編碼端在該⑶中攜帶該⑶的QP差;當編碼端確定了各⑶的QP差之后,可以從各⑶中選取滿足預置條件的⑶,并且在這些滿足預置條件的⑶中攜帶其QP差。106、編碼端對量化深度參數(shù)、滿足預置條件的⑶的QP差、以及各⑶進行編碼得到碼流。本實施例中,編碼端將量化深度參數(shù)寫入待編碼數(shù)據(jù),且將QP差寫入滿足預置條件的⑶之后,則可以對整個待編碼數(shù)據(jù)進行編碼,即對量化深度參數(shù)、滿足預置條件的⑶的QP差、以及各CU進行編碼,從而得到碼流。本實施例中,編碼端在編碼時可以在待編碼數(shù)據(jù)中寫入用于表示具有獨立QP的最小圖像塊尺寸的量化深度參數(shù),并且對每一個滿足預置條件的CU中,都攜帶該CU的QP差,使得每個LCU不僅僅再對應一個QP,而由LCU中滿足預置條件的CU對應QP,所以編碼端能夠以CU為最精細粒度進行碼率控制,由于一個LCU中往往包含多個CU,因此能夠有效提高LCU的碼率控制精度;此外,編碼端僅在滿足預置條件的CU中才攜帶該CU的QP差,而并不會在所有的⑶中都攜帶QP差,所以可以減少編碼開銷,從而有效提高整體壓縮效率。上面從編碼端的角度描述了本發(fā)明編碼的過程,下面從解碼端的角度描述本發(fā)明解碼的過程,請參閱圖2,本發(fā)明解碼方法一個實施例包括201、解碼端對接收到的碼流進行解析得到量化深度參數(shù);本實施例中,解碼端可以從編碼端接收到經(jīng)過編碼的碼流,由于編碼端在編碼時,在待編碼數(shù)據(jù)中寫入了量化深度參數(shù),所以解碼端可以按照預先的約定從碼流相應的位置解析出該量化深度參數(shù)。該量化深度參數(shù)用于表示IXU中具有獨立QP的最小圖像塊尺寸。202、解碼端按照最小圖像塊尺寸與IXU中包含的各⑶的尺寸計算各⑶的QP預測值;
本實施例中,解碼端從碼流中解析得到量化深度參數(shù)之后,可以根據(jù)該量化深度參數(shù)獲知具有獨立QP的最小圖像塊尺寸,并且根據(jù)該最小圖像塊尺寸與LCU中包含的各CU的尺寸計算得到各CU的QP預測值。203、對于每一個滿足預置條件的⑶,解碼端從碼流中解析得到其QP差;本實施例中,解碼端還可以對每一個滿足預置條件的⑶,從碼流中解析得到該⑶的QP差。需要說明的是,解碼端得到QP差的過程與解碼端計算各CU的QP預測值的過程并無先后順序的限制,可以先執(zhí)行得到QP差的過程,也可以先執(zhí)行計算各CU的QP預測值的過程,或者還可以同時執(zhí)行兩個過程,具體此處不作限定。204、解碼端根據(jù)各⑶的QP預測值以及解析得到的QP差計算各⑶的QP ;解碼端通過步驟202獲知了各⑶的QP預測值以及步驟203解析得到QP差之后,可以根據(jù)這些參數(shù)計算各CU的QP。205、解碼端按照各⑶的QP對各⑶進行解碼。本實施例中,當解碼端獲知各⑶的QP之后,則可以對各⑶進行反量化處理以及后續(xù)的解碼過程,具體此處不作限定。本實施例中,編碼端在編碼時可以在待編碼數(shù)據(jù)中寫入用于表示具有獨立QP的最小圖像塊尺寸的量化深度參數(shù),并且對每一個滿足預置條件的CU中,都攜帶該CU的QP差,使得每個LCU不僅僅再對應一個QP,所以在解碼端進行解碼時可以針對各CU進行解碼,而無需針對一整個LCU進行解碼,從而能夠提高解碼效率。為便于理解,下面從編解碼的角度進行描述,請參閱圖3,本發(fā)明編解碼方法一個實施例包括301、編碼端獲取待編碼的序列、圖像或條帶;本實施例中,編碼端獲取到的待編碼數(shù)據(jù)為序列或圖像或條帶,需要說明的是,一個序列中包含若干個圖像,一個圖像中包含若干個條帶,一個條帶中包含若干個LCU。也就是說,本實施例中,編碼端獲取到的待編碼數(shù)據(jù)為多個LCU。302、編碼端按照預置的碼率控制算法確定IXU的量化深度參數(shù)lcu_qp_cbpth ;編碼端根據(jù)預置的碼率控制算法獲取對應的lcU_qp_cbpth的數(shù)值,具體的,編碼端可以采用嘗試替代的方式獲取lcu_cip_depth的數(shù)值,即不斷調整lcu_cip_depth的數(shù)值并進行模擬編碼,使得編碼后的碼率符合預期的要求,具體過程此處不作限定。
本實施例中的lcu_cip_depth的取值范圍可以取O至MaxSymbol內的所有整數(shù),其中,MaxSymbol可以通過如下方式計算MaxSymbol = Iog2 (max_coding_block_size)-Iog2 (min_coding_block_size);其中,max_coding_block_size表不最大的 CU 的尺寸,即 LCU 的尺寸,min_coding_block_size表示最小的⑶的尺寸。需要說明的是,本實施例以及后續(xù)實施例中所描述的尺寸是指邊長,例如某CU為32*32,則定義其尺寸為32。本實施例中,該lcu_qp_depth用于表示IXU中具有獨立QP的最小圖像塊尺寸,當lcu_qp_depth為O時,表不具有獨立QP的最小圖像塊即為LQJ,當lcu_cip_depth為I時,表示將IXU劃分為4個32*32的⑶,最小圖像塊尺寸為32,以此類推。本實施例中的lcu_qp_depth是指序列、圖像或條帶中的每一個IXU的具有獨立 QP的最小圖像塊尺寸,也就是說,該序列、圖像或條帶中的所有LCU均使用相同的lcu_qp_depth。303、編碼端將lcU_qp_cbpth寫入序列參數(shù)集、圖像參數(shù)集或條帶頭信息;本實施例中,編碼端在獲取到lcu_cip_depth的數(shù)值之后,可以將該lcu_cip_depth寫入待編碼數(shù)據(jù)編碼端可以將lcu_qp_depth寫入該序列的序列參數(shù)集(SPS, Sequence ParameterSet),具體可以如下所示
seq_parameter_set_rb sp() { leu—qp—depth
}或者,編碼端可以將lcu_qp_cbpth寫入該圖像的PPS,具體可以如下所示
Pic_parameter_set_rbsp() {
Icuqpdepth
}或者,編碼端可以將lcU_qp_cbpth寫入該條帶的條帶頭信息,具體可以如下所
示slice—header() {leu—qp—depth
}可以理解的是,本實施例中僅以幾個例子說明了 lcu_qp_depth的寫入位置,在實際應用中,該lcu_qp_cbpth還可以寫入序列、圖像或條帶的其他位置,具體此處不作限定。304、編碼端計算包含獨立QP的最小圖像塊尺寸QPBlkSize ;編碼端獲取到lcu_cip_depth之后,可以根據(jù)該lcu_cip_depth計算最小圖像塊QPBlk 的尺寸 QPBlkSize。假設IXU大小為max_coding_block_size,則QPBlkSize可以通過如下的方式計算得到
QPBlkSize = max_coding_block_size/ (2lcu-qp-depth)。例如,當max_coding_block_size 為 64, lcu_qp_depth 為 2 時,則 QPBlkSize 為16,即最小圖像塊為16*16的⑶。305、編碼端根據(jù)QPBlkSize、CU的尺寸獲取各CU的QP ;本實施例中,編碼端可以分以下幾種情況獲取各CU的QP 對于尺寸大于或等于QPBlkSize的⑶,編碼端按照預置的碼率控制算法計算該⑶的QP ;對于尺寸小于QPBlkSize的⑶,編碼端首先確定該⑶所屬的最小圖像塊,然后按照預置的碼率控制算法計算該最小圖像塊的QP,并將該最小圖像塊的QP作為該最小圖像塊中所有⑶的QP。本實施例中,編碼端按照預置的碼率控制算法計算QP的過程為本領域技術人員的公知常識,具體此處不作限定。306、編碼端獲取各CU的QP預測值;當編碼端獲取到各⑶的QP之后,則可以按照編碼次序(解碼次序與編碼次序相同),使用各CU鄰近的已編碼的CU的QP獲取各CU的QP預測值。典型的,該鄰近已編碼的⑶包括左⑶,上⑶與左上⑶。為便于描述,首先對參考⑶進行定義編碼端將每一個尺寸大于或等于QPBlkSize的⑶作為一個參考⑶,且對于尺寸小于QPBlkSize的⑶,編碼端確定該⑶所屬的最小圖像塊,并將該最小圖像塊的左上⑶作為一個參考CU。定義了參考⑶之后,編碼端可以根據(jù)各參考⑶的該鄰近⑶的QP計算各參考⑶的QP預測值,具體的計算方式可以有多種,下面以幾個例子進行說明一、采用左⑶、上⑶以及左上⑶進行計算請參閱圖4,其中,CU。為某參考⑶,該⑶可以是一個尺寸大于或等于QPBlkSize的⑶,也可以是位于最小圖像塊的左上角的⑶。CUu為CUc的上CU,CUl為CUc的左CU,CUul為CUc的左上CU,本實施例中,CUc的鄰近⑶為左⑶、上⑶以及左上⑶,其中CUc的左上角像素坐標為(X。,y。),則CUl為包含像素點(x「l,yc)的CU, CUu為包含像素點(X。,yc-l)的CU,CUul為包含像素點(Xe-I,Yc-D的⑶。編碼端確定了參考⑶的鄰近⑶之后,可以根據(jù)步驟305計算的結果獲取這些⑶的 QP,其中,CUc 的 QP 為 QP。,CUu 的 QP 為 QPu, CUl 的 QP 為 QP^ CUul 的 QP 為 QP皿。需要說明的是,并不是每一個⑶都能獲取到其左⑶、上⑶以及左上⑶,例如本身就位于圖像或條帶最左側的CU就不會存在左CU,因此,編碼端可以按照如下一些具體條件確定各CU的預測值(I)若CU。的鄰近⑶均不存在,則根據(jù)該CU。所屬的條帶以及圖像確定該CU。的QP預測值QPp ;具體的,QPp= slice_cip_delta+pic_init_cip_minus26+26,其中,slice_qp_delta為包含在條帶頭信息中的信息,pic_init_qp_minus26為包含在圖像參數(shù)集中的信息。 (2)若CUc只存在CUL,則將QPl作為QPp ;(3)若CUc只存在CUu,則將QPu作為QPp ;(4)若CUc的鄰近⑶均存在,則獲取QPl與QPm之間的第一差異I QPl-QPiJ,以及QPu與QPul之間的第二差異I QPu-QPm I。若I QPl-QPul I < I QPfQP肌I,則表示QPl和QPul的差異小于QPu和QPul的差異。這種情況下,( 和CUm很有可能屬于圖像中的同一個物體,物體邊緣出現(xiàn)在CUu和CUm邊緣,所以可以采用QPu作為QPp;若I QPfQPm I > = I QPu-QPul |,按照上述的推理,則可以將QP^作為QPP。在實際應用中,可以用下述代碼實現(xiàn)上述流程
權利要求
1.一種解碼方法,其特征在于,包括 從接收到的碼流的序列的序列參數(shù)集中,或圖像的圖像參數(shù)集中,或條帶的條帶頭信息中解析得到量化深度參數(shù);所述量化深度參數(shù)用于表示所述序列、或圖像、或條帶中每一個最大編碼單元LCU中具有獨立量化參數(shù)QP的最小圖像塊尺寸; 按照所述最小圖像塊尺寸與所述IXU中包含的各編碼單元⑶的尺寸計算各⑶的QP預測值; 對于每一個滿足預置條件的CU,從碼流中解析得到其QP差; 根據(jù)所述各CU的QP預測值以及解析得到的QP差計算各CU的QP ; 按照所述各CU的QP對各CU進行解碼。
2.根據(jù)權利要求I所述的解碼方法,其特征在于,所述對于每一個滿足預置條件的CU,從碼流中解析得到其QP差包括 對于每一個尺寸大于或等于所述最小圖像塊尺寸的CU,判斷該CU是否滿足所述預置條件,若滿足,則從該CU中解析該CU的QP差,若不滿足,則將該CU的QP差設置為O ; 對于尺寸小于所述最小圖像塊尺寸的CU,確定該CU所屬的最小圖像塊,并按照該最小圖像塊中CU的解碼次序,依次判斷該最小圖像塊中每一個CU是否滿足所述預置條件,若滿足,則停止判斷,并將該CU的QP差作為該最小圖像塊中所有CU的QP差,若該最小圖像塊中所有CU均不滿足所述預置條件,則將該最小圖像塊中所有CU的QP差設置為O。
全文摘要
本發(fā)明實施例公開了一種編碼方法及裝置、解碼方法及裝置以及編解碼系統(tǒng)。本發(fā)明實施例方法包括編碼端獲取待編碼數(shù)據(jù),待編碼數(shù)據(jù)至少為一個LCU;編碼端按照碼率控制算法確定LCU的量化深度參數(shù),并將量化深度參數(shù)寫入待編碼數(shù)據(jù);編碼端根據(jù)最小圖像塊尺寸與LCU中包含的各CU的尺寸確定各CU的QP;編碼端根據(jù)各CU的QP以及各CU的QP預測值計算各CU的QP差;對于每一個滿足預置條件的CU,編碼端在該CU中攜帶該CU的QP差;編碼端對量化深度參數(shù)、滿足預置條件的CU的QP差、以及各CU進行編碼得到碼流。本發(fā)明實施例還提供一種解碼方法以及編解碼裝置。本發(fā)明實施例能夠有效提高碼率控制精度以及壓縮效率。
文檔編號H04N7/26GK102685483SQ20111045951
公開日2012年9月19日 申請日期2011年3月11日 優(yōu)先權日2011年3月11日
發(fā)明者區(qū)子廉, 龐超, 楊海濤 申請人:華為技術有限公司