本發(fā)明涉及視頻處理領域,尤其涉及一種HEVC幀內預測編碼方法。
背景技術:
隨著信息技術的進步以及高清設備和移動和手持設備的普及,傳統(tǒng)標清視頻已不能滿足設備對視頻質量的要求,視頻的應用格式向高清超高清的領域發(fā)展,從而需要視頻具有很好的壓縮效率。
現(xiàn)有技術中,采用高效視頻編碼(High Efficiency Video Coding,簡稱HEVC)幀內預測對視頻的每一幀進行編碼,從而將視頻進行壓縮。將視頻幀劃分為編碼單元,計算編碼單元在35種預測模式中的率失真代價,取35種預測模式中的率失真代價的最小值作為當前編碼單元的率失真代價;將編碼單元劃分為4個子塊編碼單元,計算各個子塊編碼單元在35種預測模式中的率失真代價,取35種預測模式中的率失真代價的最小值作為當前子塊編碼單元的率失真代價;若4個子塊編碼單元的率失真代價的總和小于編碼單元的率失真代價,則將編碼單元劃分為4個子塊編碼單元;若4個子塊編碼單元的率失真代價的總和大于編碼單元的率失真代價,則終止當前編碼單元的劃分,同時將最小值率失真代價對應的預測模式作為編碼單元的預測模式,對編碼單元進行編碼。
然而現(xiàn)有技術需要計算編碼單元以及每個子塊編碼單元在35種預測模式中的率失真代價,才能夠確定是對編碼單元進行劃分,還是對編碼單元進行預測模式的選取后進行編碼。從而增加了HEVC幀內預測編碼的算法復雜度,極大地增加了編碼時間。
技術實現(xiàn)要素:
本發(fā)明提供一種HEVC幀內預測編碼方法,用以解決現(xiàn)有的HEVC幀內預測編碼由于極高的算法復雜,所造成的編碼時間過長的問題。
本發(fā)明提供了一種HEVC幀內預測編碼方法,包括:
獲取待編碼視頻序列,所述視頻序列中包括多個視頻幀,每個視頻幀中包括多個編碼單元;
對所述多個編碼單元中的當前編碼單元進行離散余弦變換(Discrete Cosine Transform,簡稱DCT)變換,獲得所述當前編碼單元的DCT系數(shù),所述DCT系數(shù)包括所述當前編碼單元中包含的直流、低頻和中頻分量的能量系數(shù);
根據(jù)所述DCT系數(shù)確定所述當前編碼單元的圖像復雜度,根據(jù)所述當前編碼單元的塊類型確定所述當前編碼單元的劃分深度;
根據(jù)所述當前編碼單元和與所述當前編碼單元相鄰的相鄰編碼單元的圖像復雜度比較結果、劃分深度比較結果,確定是否對所述當前編碼單元進行劃分;
若確定不對所述當前編碼單元進行劃分,則根據(jù)所述DCT系數(shù)確定所述當前編碼單元的紋理方向;
根據(jù)所述紋理方向確定所述當前編碼單元的預測模式類型和預測模式偏移度;
根據(jù)所述預測模式類型和所述預測模式偏移度確定所述當前編碼單元的預測主模式,并根據(jù)所述預測主模式對所述當前編碼單元進行編碼。
本發(fā)明的技術效果是:通過獲取待編碼視頻序列,視頻序列中包括多少視頻幀,每個視頻幀中包括多個編碼單元;對多個編碼單元中的當前編碼單元進行DCT變換,獲得當前編碼單元的DCT系數(shù),DCT系數(shù)包括當前編碼單元中包含的直流、低頻和中頻分量的能量系數(shù);根據(jù)DCT系數(shù)確定當前編碼單元的圖像復雜度,根據(jù)當前編碼單元的塊類型確定當前編碼單元的劃分深度;根據(jù)當前編碼單元和與當前編碼單元相鄰的相鄰編碼單元的圖像復雜度比較結果、劃分深度比較結果,確定是否對當前編碼單元進行劃分;若確定不對當前編碼單元進行劃分,則根據(jù)DCT系數(shù)確定當前編碼單元的紋理方向;根據(jù)紋理方向確定當前編碼單元的預測模式類型和預測模式偏移度;根據(jù)預測模式類型和預測模式偏移度確定當前編碼單元的預測主模式,并根據(jù)預測主模式對當前編碼單元進行編碼。從而只需要根據(jù)當前編碼單元和與當前編碼單元相鄰的相鄰編碼單元的圖像復雜度比較結果、劃分深度比較結果, 確定是否對當前編碼單元進行劃分,并在對當前編碼單元進行劃分的時候,只需要根據(jù)預測模式類型和預測模式偏移度確定當前編碼單元的預測主模式;實現(xiàn)了降低HEVC幀內預測編碼的算法復雜度,縮短了編碼時間,進而提高了視頻壓縮效率。
附圖說明
圖1為本發(fā)明實施例一提供的一種HEVC幀內預測編碼方法的流程圖。
具體實施方式
為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
圖1為本發(fā)明實施例一提供的一種HEVC幀內預測編碼方法的流程圖,如圖1所示,本實施例的方法包括:
步驟101、獲取待編碼視頻序列,視頻序列中包括多個視頻幀,每個視頻幀中包括多個編碼單元。
在本實施例中,具體的,視頻中包含有待編碼的視頻序列,獲取待編碼的視頻序列,視頻序列中包括有多個視頻幀,每一個視頻幀被劃分為了多個編碼單元。在本實施例中,編碼單元支持4×4到64×64的塊類型,首先,視頻幀可以被分為64×64的塊類型的編碼單元。
步驟102、對多個編碼單元中的當前編碼單元進行DCT變換,獲得當前編碼單元的DCT系數(shù),DCT系數(shù)包括當前編碼單元中包含的直流、低頻和中頻分量的能量系數(shù)。
在本實施例中,具體的,依據(jù)多個編碼單元中的當前編碼單元的塊類型,采用與該塊類型對應的對應類型的DCT變換。若當前編碼單元是64×64的塊類型,而DCT變換支持從4×4到32×32的塊類型,所以對64×64的塊類型的編碼單元進行下采樣之后進行32×32的DCT變換。若當前編碼單元是 32×32的塊類型,則對直接其進行32×32的DCT變換。若當前編碼單元是16×16的塊類型,則對直接其進行16×16的DCT變換。根據(jù)DCT變換獲取當前編碼單元的DCT系數(shù),由于編碼單元經過DCT變換后的頻域系數(shù)有規(guī)律的能量分布,能量主要集中在DCT域的直流、低頻和中頻區(qū)域,從而獲取的當前編碼單元的DCT系數(shù)包括的是當前編碼單元的直流、低頻和中頻分量的能量系數(shù)。
步驟103、根據(jù)DCT系數(shù)確定當前編碼單元的圖像復雜度,根據(jù)當前編碼單元的塊類型確定當前編碼單元的劃分深度。
在本實施例中,具體的,根據(jù)DCT系數(shù)可以計算得到當前編碼單元的圖像復雜度。根據(jù)當前編碼單元的塊類型確定當前編碼單元的劃分深度,若當前編碼單元的塊類型是64×64,則當前編碼單元的劃分深度為0;若當前編碼單元的塊類型是32×32,則當前編碼單元的劃分深度為1;若當前編碼單元的塊類型是16×16,則當前編碼單元的劃分深度為2;若當前編碼單元的塊類型是8×8,則當前編碼單元的劃分深度為3;若當前編碼單元的塊類型是4×4,則當前編碼單元的劃分深度為4。隨著當前編碼單元的塊類型的減小,當前編碼單元的劃分深度增大。
步驟104、根據(jù)當前編碼單元和與當前編碼單元相鄰的相鄰編碼單元的圖像復雜度比較結果、劃分深度比較結果,確定是否對當前編碼單元進行劃分。
在本實施例中,具體的,獲取與當前編碼單元相鄰的相鄰編碼單元的圖像復雜度和劃分深度,相鄰編碼單元的圖像復雜度和劃分深度的計算過程采用步驟101-步驟103的計算方法。將當前編碼單元的圖像復雜度與相鄰編碼單元的圖像復雜度進行比較,當前編碼單元的劃分深度與相鄰編碼單元的劃分深度進行比較,根據(jù)圖像復雜度比較結果、劃分深度比較結果,確定是否對當前編碼單元進行劃分。
步驟105、若確定不對當前編碼單元進行劃分,則根據(jù)DCT系數(shù)確定當前編碼單元的紋理方向。
在本實施例中,具體的,若步驟104中確定不對當前編碼單元進行劃分,則對當前編碼單元進行預測模式的選取。首先根據(jù)步驟102中得到的DCT系數(shù)確定當前編碼單元的紋理方向。
步驟106、根據(jù)紋理方向確定當前編碼單元的預測模式類型和預測模式偏移度。
步驟107、根據(jù)預測模式類型和預測模式偏移度確定當前編碼單元的預測主模式,并根據(jù)預測主模式對當前編碼單元進行編碼。
在本實施例中,具體的,根據(jù)步驟106中得到的當前編碼單元的預測模式類型和預測模式偏移度,計算采用哪種預測主模式MPre,從而可以確定當前編碼單元的預測主模式,然后采用預測主模式對應的編碼方式對當前編碼單元進行編碼。
本發(fā)明采用測試實驗平臺為戴爾臺式機,其配置為:主頻2.0GHz,內3.0GB,操作系統(tǒng)Windows XP。表1為本發(fā)明采用的編碼配置參數(shù)表,選擇高效率(High Efficiency,簡稱HE)的編碼配置進行全I幀預測,在HM9.0編碼模型支持10位深度為10的視頻編碼,故高效率編碼配置命名為HE10。
表1配置參數(shù)表
本發(fā)明與HEVC標準模型HM9.0算法的實驗結果進行比較,實驗結果表明,本發(fā)明提供的算法比HEVC標準模型HM9.0算法節(jié)約了18%-50%的編碼時間。表2為本發(fā)明提供的HEVC幀內預測編碼方法的實驗數(shù)據(jù),如表2所示。
表2本發(fā)明提供的HEVC幀內預測編碼方法的實驗數(shù)據(jù)
在本實施例中,通過獲得當前編碼單元的DCT系數(shù),其中,DCT系數(shù)包括直流、低頻和中頻分量的能量系數(shù),從而選取了當前編碼單元中能量集中的區(qū)域的DCT系數(shù);并且,根據(jù)DCT系數(shù)確定其圖像復雜度,根據(jù)當前編碼單元的塊類型確定其劃分深度,從而可以根據(jù)當前編碼單元和相鄰編碼單元的圖像復雜度比較結果、劃分深度比較結果去確定是否對當前編碼單元進行劃分;再根據(jù)當前編碼單元的紋理方向,確定采用何種預測主模式對當前編碼單元進行編碼。從而,不需要計算當前編碼單元以及每個子塊編碼單元在35種預測模式中的率失真代價,才能夠確定是否對當前編碼單元進行劃分;本實施例利用相鄰編碼單元的空間相關性對當前編碼單元的進行劃分,可以有效的濾除可能性較小的編碼單元的劃分過程,可以降低算法的復雜度,減少編碼時間,進而提高了視頻壓縮效率。
進一步地,在上述實施例的基礎上,步驟107中根據(jù)預測模式類型和預測模式偏移度確定當前編碼單元的預測主模式之后,還包括:
獲取與預測主模式相差預設步長的其他預設預測模式;
從預測主模式和其他預設預測模式中確定率失真代價最小的模式作為當前編碼單元的目標預測主模式;
則步驟107中根據(jù)預測主模式對當前編碼單元進行編碼,包括:
根據(jù)目標預測主模式對當前編碼單元進行編碼。
在本實施方式中,具體的,首先對預測主模式MPre進行粗略模式預測代價計算,然后重復執(zhí)行以下步驟,直至預設步長SP除以2的商為0:獲取與預測主模式相差預設步長SP的預設預測模式MPre+SP和MPre-SP;計算預測主模式MPre、預設預測模式MPre+SP和預設預測模式MPre-SP的率失真代價;取率失真代價最小的預測模式為新的預測主模式MPre;SP取SP除以2的商。從而將預測主模式和其他預設預測模式中確定率失真代價最小的模式作為當前編碼單元的目標預測主模式。然后根據(jù)目標預測主模式對應的編碼方式,對當前編碼單元進行編碼。
其中,若當前編碼單元的塊類型為16×16至64×64,則預設步長SP取值為4;若當前編碼單元的塊類型為4×4至8×8,則預設步長SP取值為8。
本實施方式通過獲取與預測主模式相差預設步長的其他預設預測模式,從預測主模式和其他預設預測模式中確定率失真代價最小的模式,作為當前編碼單元的目標預測主模式。從而采用分步搜索算法得到最優(yōu)的目標預測主模式,能夠有效的減少可能性較小的預測主模式的率失真代價計算過程,有效的節(jié)約視頻編碼時間。
進一步地,在上述實施例的基礎上,步驟103中根據(jù)DCT系數(shù)確定當前編碼單元的圖像復雜度,包括:
根據(jù)DCT系數(shù),確定當前編碼單元的方差D=|Y01|+|Y02|+|Y10|+|Y11|+|Y20|+|Y21|;
根據(jù)方差D,確定當前編碼單元的圖像復雜度C=logD;
其中,Y01Y02、Y10、Y11、Y20和Y21表示當前編碼單元的DCT系數(shù)。
在本實施方式中,具體的,根據(jù)步驟102中獲取的DCT系數(shù),根據(jù)其中的低頻分量的能量系數(shù)Y01Y02、Y10、Y11、Y20和Y21,計算當前編碼單元的方差D=|Y01|+|Y02|+|Y10|+|Y11|+|Y20|+|Y21|。計算方差D之后,根據(jù)公式C=logD,確定當前編碼單元的圖像復雜度C。
進一步地,在上述實施例的基礎上,步驟104的具體實施方式,包括:
確實是否能夠獲取與當前編碼單元相鄰的左相鄰編碼單元和上相鄰編碼單元的圖像復雜度和劃分深度;
若獲取到左相鄰編碼單元的圖像復雜度和劃分深度,則確定當前編碼單元的劃分深度是否等于左相鄰編碼單元的劃分深度;
若當前編碼單元的劃分深度不等于左相鄰編碼單元的劃分深度,在當前編碼單元的圖像復雜度大于左相鄰編碼單元的圖像復雜度時,對當前編碼單元進行劃分;
若當前編碼單元的劃分深度等于左相鄰編碼單元的劃分深度,則確定當前編碼單元的圖像復雜度是否大于等于左相鄰編碼單元的圖像復雜度;
若當前編碼單元的圖像復雜度大于等于左相鄰編碼單元的圖像復雜度,在當前編碼單元的子編碼單元的率失真代價總和小于當前編碼單元的率失真代價時,對當前編碼單元進行劃分;若當前編碼單元的圖像復雜度小于左相鄰編碼單元的圖像復雜度,則不對當前編碼單元進行劃分。
在本實施方式中,具體的,首先確定是否可以獲取到與當前編碼單元相鄰的左相鄰編碼單元和上相鄰編碼單元。若只能夠獲取到左相鄰編碼單元,則按照本發(fā)明實施例一提供的方法計算左相鄰編碼單元的圖像復雜度和劃分深度。
判斷當前編碼單元的劃分深度是否等于左相鄰編碼單元的劃分深度。若當前編碼單元的劃分深度不等于左相鄰編碼單元的劃分深度,則確定當前編碼單元的圖像復雜度是否大于左相鄰編碼單元的圖像復雜度;若當前編碼單元的圖像復雜度大于左相鄰編碼單元的圖像復雜度,則將當前編碼單元劃分為下一級塊類型的子編碼單元,例如,若當前編碼單元為64×64塊類型的編碼單元,則將其劃分為4個32×32塊類型的編碼單元,若當前編碼單元為32×32塊類型的編碼單元,則將其劃分為4個16×16塊類型的編碼單元。
若當前編碼單元的劃分深度等于左相鄰編碼單元的劃分深度,則判斷當前編碼單元的圖像復雜度是否大于等于左相鄰編碼單元的圖像復雜度。若當前編碼單元的圖像復雜度大于等于左相鄰編碼單元的圖像復雜度,則計算當前編碼單元的率失真代價,同時計算當前編碼單元的4個子編碼單元的率失真代價總和;若當前編碼單元的4個子編碼單元的率失真代價總和小于當前編碼單元的率失真代價,則將當前編碼單元劃分為下一級塊類型的子編碼單元;若當前編碼單元的4個子編碼單元的率失真代價總和大于等于當前編碼單元的率失真代價,則不對當前編碼單元進行劃分,開始對當前編碼單元執(zhí)行步驟105-步驟107,去確定當前編碼單元的預測主模式并根據(jù)預測主模式對當前編碼單元進行編碼。若當前編碼單元的圖像復雜度小于左相鄰編碼單 元的圖像復雜度,則不對當前編碼單元進行劃分,開始對當前編碼單元執(zhí)行步驟105-步驟107,去確定當前編碼單元的預測主模式并根據(jù)預測主模式對當前編碼單元進行編碼。
本實施方式通過將當前編碼單元的圖像復雜度和劃分深度,分別與左相鄰編碼單元的圖像復雜度和劃分深度進行比較,去確定是否對當前編碼單元進行劃分。從而可以不需要計算當前編碼單元以及每個子塊編碼單元在35種預測模式中的率失真代價,才能夠確定是否對當前編碼單元進行劃分,有效的降低了算法的復雜度,減少編碼時間,進而提高了視頻壓縮效率。
進一步地,在上述實施例的基礎上,步驟104的具體實施方式,還包括:
若獲取到上相鄰編碼單元的圖像復雜度和劃分深度,則確定當前編碼單元的劃分深度是否等于上相鄰編碼單元的劃分深度;
若當前編碼單元的劃分深度不等于上相鄰編碼單元的劃分深度,在當前編碼單元的圖像復雜度大于上相鄰編碼單元的圖像復雜度時,對當前編碼單元進行劃分;
若當前編碼單元的劃分深度等于上相鄰編碼單元的劃分深度,則確定當前編碼單元的圖像復雜度是否大于等于上相鄰編碼單元的圖像復雜度;
若當前編碼單元的圖像復雜度大于等于上相鄰編碼單元的圖像復雜度,在當前編碼單元的子編碼單元的率失真代價總和小于當前編碼單元的率失真代價時,對當前編碼單元進行劃分;若當前編碼單元的圖像復雜度小于上相鄰編碼單元的圖像復雜度,則不對當前編碼單元進行劃分。
在本實施方式中,具體的,若只能夠獲取到上相鄰編碼單元,則按照本發(fā)明實施例一提供的方法計算上相鄰編碼單元的圖像復雜度和劃分深度。
判斷當前編碼單元的劃分深度是否等于上相鄰編碼單元的劃分深度。若當前編碼單元的劃分深度不等于上相鄰編碼單元的劃分深度,則確定當前編碼單元的圖像復雜度是否大于上相鄰編碼單元的圖像復雜度;若當前編碼單元的圖像復雜度大于上相鄰編碼單元的圖像復雜度,則將當前編碼單元劃分為下一級塊類型的子編碼單元,例如,若當前編碼單元為64×64塊類型的編碼單元,則將其劃分為4個32×32塊類型的編碼單元,若當前編碼單元為32×32塊類型的編碼單元,則將其劃分為4個16×16塊類型的編碼單元。
若當前編碼單元的劃分深度等于上相鄰編碼單元的劃分深度,則判斷當 前編碼單元的圖像復雜度是否大于等于上相鄰編碼單元的圖像復雜度。若當前編碼單元的圖像復雜度大于等于上相鄰編碼單元的圖像復雜度,則計算當前編碼單元的率失真代價,同時計算當前編碼單元的4個子編碼單元的率失真代價總和;若當前編碼單元的4個子編碼單元的率失真代價總和小于當前編碼單元的率失真代價,則將當前編碼單元劃分為下一級塊類型的子編碼單元;若當前編碼單元的4個子編碼單元的率失真代價總和大于等于當前編碼單元的率失真代價,則不對當前編碼單元進行劃分,開始對當前編碼單元執(zhí)行步驟105-步驟107,去確定當前編碼單元的預測主模式并根據(jù)預測主模式對當前編碼單元進行編碼。若當前編碼單元的圖像復雜度小于上相鄰編碼單元的圖像復雜度,則不對當前編碼單元進行劃分,開始對當前編碼單元執(zhí)行步驟105-步驟107,去確定當前編碼單元的預測主模式并根據(jù)預測主模式對當前編碼單元進行編碼。
本實施方式通過將當前編碼單元的圖像復雜度和劃分深度,分別與上相鄰編碼單元的圖像復雜度和劃分深度進行比較,去確定是否對當前編碼單元進行劃分。從而可以不需要計算當前編碼單元以及每個子塊編碼單元在35種預測模式中的率失真代價,才能夠確定是否對當前編碼單元進行劃分,有效的降低了算法的復雜度,減少編碼時間,進而提高了視頻壓縮效率。
進一步地,在上述實施例的基礎上,步驟104的具體實施方式,還包括:
若獲取到左相鄰編碼單元和上相鄰編碼單元的圖像復雜度和劃分深度,則確定當前編碼單元的劃分深度是否等于左相鄰編碼單元的劃分深度和上相鄰編碼單元的劃分深度中的較大值,以及當前編碼單元的劃分深度是否等于左相鄰編碼單元的劃分深度和上相鄰編碼單元的劃分深度中的較小值;
若當前編碼單元的劃分深度不等于左相鄰編碼單元的劃分深度和上相鄰編碼單元的劃分深度中的較大值,在當前編碼單元的圖像復雜度大于左相鄰編碼單元的圖像復雜度和上相鄰編碼單元的圖像復雜度中的較大值時,對當前編碼單元進行劃分;
若當前編碼單元的劃分深度等于左相鄰編碼單元的劃分深度和上相鄰編碼單元的劃分深度中的較小值,確定當前編碼單元的圖像復雜度是否大于等于左相鄰編碼單元的圖像復雜度和上相鄰編碼單元的圖像復雜度中的較小值;
若當前編碼單元的圖像復雜度大于等于左相鄰編碼單元的圖像復雜度和上相鄰編碼單元的圖像復雜度中的較小值,則在當前編碼單元的子編碼單元的率失真代價總和小于當前編碼單元的率失真代價時,則對當前編碼單元進行劃分;
若當前編碼單元的圖像復雜度小于左相鄰編碼單元的圖像復雜度和上相鄰編碼單元的圖像復雜度中的較小值,則不對當前編碼單元進行劃分。
在本實施方式中,具體的,若可以同時獲取到左相鄰編碼單元和上相鄰編碼單元,則按照本發(fā)明實施例一提供的方法計算左相鄰編碼單元的圖像復雜度和劃分深度,以及上相鄰編碼單元的圖像復雜度和劃分深度。
選取左相鄰編碼單元的劃分深度和上相鄰編碼單元的劃分深度中的較大值,然后判斷當前編碼單元的劃分深度是否等于左相鄰編碼單元的劃分深度和上相鄰編碼單元的劃分深度中的較大值;同時,選取左相鄰編碼單元的劃分深度和上相鄰編碼單元的劃分深度中的較小值,然后判斷當前編碼單元的劃分深度是否等于左相鄰編碼單元的劃分深度和上相鄰編碼單元的劃分深度中的較小值。
若當前編碼單元的劃分深度不等于左相鄰編碼單元的劃分深度和上相鄰編碼單元的劃分深度中的較大值,則確定當前編碼單元的圖像復雜度是否大于左相鄰編碼單元的圖像復雜度和上相鄰編碼單元的圖像復雜度中的較大值;若當前編碼單元的圖像復雜度大于左相鄰編碼單元的圖像復雜度和上相鄰編碼單元的圖像復雜度中的較大值,則將當前編碼單元劃分為下一級塊類型的子編碼單元,例如,若當前編碼單元為64×64塊類型的編碼單元,則將其劃分為4個32×32塊類型的編碼單元,若當前編碼單元為32×32塊類型的編碼單元,則將其劃分為4個16×16塊類型的編碼單元。
若當前編碼單元的劃分深度等于左相鄰編碼單元的劃分深度和上相鄰編碼單元的劃分深度中的較小值,則判斷當前編碼單元的圖像復雜度是否大于等于左相鄰編碼單元的圖像復雜度和上相鄰編碼單元的圖像復雜度中的較小值。若當前編碼單元的圖像復雜度大于等于左相鄰編碼單元的圖像復雜度和上相鄰編碼單元的圖像復雜度中的較小值,則計算當前編碼單元的率失真代價,同時計算當前編碼單元的4個子編碼單元的率失真代價總和;若當前編碼單元的4個子編碼單元的率失真代價總和小于當前編碼單元的率失真代 價,則將當前編碼單元劃分為下一級塊類型的子編碼單元;若當前編碼單元的4個子編碼單元的率失真代價總和大于等于當前編碼單元的率失真代價,則不對當前編碼單元進行劃分,開始對當前編碼單元執(zhí)行步驟105-步驟107,去確定當前編碼單元的預測主模式并根據(jù)預測主模式對當前編碼單元進行編碼。若當前編碼單元的圖像復雜度小于左相鄰編碼單元的圖像復雜度和上相鄰編碼單元的圖像復雜度中的較小值,則不對當前編碼單元進行劃分,開始對當前編碼單元執(zhí)行步驟105-步驟107,去確定當前編碼單元的預測主模式并根據(jù)預測主模式對當前編碼單元進行編碼。
本實施方式通過將當前編碼單元的圖像復雜度和劃分深度,與上相鄰編碼單元的圖像復雜度和劃分深度,以及左相鄰編碼單元的圖像復雜度和劃分深度進行比較,去確定是否對當前編碼單元進行劃分。從而可以不需要計算當前編碼單元以及每個子塊編碼單元在35種預測模式中的率失真代價,才能夠確定是否對當前編碼單元進行劃分,有效的降低了算法的復雜度,減少編碼時間,進而提高了視頻壓縮效率。
進一步地,在上述實施例的基礎上,若步驟104中確定對當前編碼單元進行劃分之后,還包括:
對當前編碼單元進行劃分,得到與當前編碼單元對應的子編碼單元;
對子編碼單元中進行DCT變換,獲得子編碼單元的DCT系數(shù);
根據(jù)子編碼單元的DCT系數(shù)確定子編碼單元的紋理方向;
根據(jù)子編碼單元的紋理方向確定子編碼單元的預測模式類型和預測模式偏移度;
根據(jù)子編碼單元的預測模式類型和子編碼單元的預測模式偏移度確定子編碼單元的預測主模式,并根據(jù)子編碼單元的預測主模式對子編碼單元的進行編碼。
在本實施方式中,具體的,將當前編碼單元劃分為對應的子編碼單元,例如,若當前編碼單元為64×64塊類型的編碼單元,則將其劃分為4個32×32塊類型的編碼單元;若當前編碼單元為32×32塊類型的編碼單元,則將其劃分為4個16×16塊類型的編碼單元;若當前編碼單元為16×16塊類型的編碼單元,則將其劃分為4個8×8塊類型的編碼單元。
對依據(jù)子編碼單元的塊類型,采用與該塊類型對應的對應類型的DCT變 換,從而獲得子編碼單元的DCT系數(shù),其中,子編碼單元的DCT系數(shù)包括的是當前編碼單元的直流、低頻和中頻分量的能量系數(shù)。
若根據(jù)子編碼單元和與子編碼單元相鄰的相鄰子編碼單元的圖像復雜度比較結果、劃分深度比較結果,確定不對子編碼單元進行劃分,則去確定子編碼單元的預測主模式。首先,根據(jù)子編碼單元的DCT系數(shù)確定子編碼單元的紋理方向;然后,根據(jù)子編碼單元的紋理方向確定子編碼單元的預測模式類型和預測模式偏移度;再去確定子編碼單元的預測主模式,從而可以根據(jù)子編碼單元的預測主模式對子編碼單元的進行編碼。
本實施方式通過將當前編碼單元劃分為4個子編碼單元之后,分別對每個子編碼單元根據(jù)DCT系數(shù)進行預測主模式的選取,根據(jù)子編碼單元的預測主模式對子編碼單元的進行編碼。從而,不需要根據(jù)獲得子編碼單元在35種預測模式中的率失真代價,不需要根據(jù)最小值率失真代價對應的預測模式作為編碼單元的預測模式對編碼單元進行編碼,進而可以有效的降低算法的算法復雜度,減小編碼時間,提高視頻壓縮效率。
進一步地,在上述實施例的基礎上,步驟105中的根據(jù)DCT系數(shù)確定當前編碼單元的紋理方向,包括:
根據(jù)DCT系數(shù)的低頻能量系數(shù)中的系數(shù)Y01和系數(shù)Y10,確定當前編碼單元的紋理方向θmain=tan-1(Y01/Y10)。
在本實施例中,具體的,經統(tǒng)計數(shù)據(jù)表明,利用DCT變換系數(shù)Y01和Y10,可以得到PU的大致紋理方向,從而根據(jù)公式θmain=tan-1(Y01/Y10)可以確定當前編碼單元的紋理方向θmain。
進一步地,在上述實施例的基礎上,步驟106的具體實施方式,包括:
若|θmain|≥45°,則當前編碼單元的預測模式類型Mmain=26,若|θmain|<45°,則當前編碼單元的預測模式類型Mmain=10;
根據(jù)紋理方向θmain,確定當前編碼單元的方向偏移度θ1=ceil((90-|θmain|)*32/45);根據(jù)預先設定的預測模式偏移量集合ModeOffset[],確定當前編碼單元的預測模式偏移度M1。
在本實施方式中,具體的,根據(jù)紋理方向θmain確定當前編碼單元的預測模式類型采用水平方向的預測模式,或者采用垂直方向的預測模式。若|θmain|≥45°,則當前編碼單元具有垂直紋理,當前編碼單元的預測模式類型采 用垂直方向的預測模式,當前編碼單元的預測模式類型Mmain=26;若|θmain|<45°,則當前編碼單元具有水平紋理,當前編碼單元的預測模式類型采用水平方向的預測模式,當前編碼單元的預測模式類型Mmain=10。
依據(jù)紋理方向θmain,采用公式θ1=ceil((90-|θmain|)*32/45)確定當前編碼單元的方向偏移度θ1,其中,ceil()表示對括號中的計算結果取整。預先設定了一個預測模式偏移量集合ModeOffset[],其中,ModeOffset[]={0,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8};根據(jù)方向偏移度θ1,經過在ModeOffset[]中查表可以獲得當前編碼單元的預測模式偏移度M1,即預測模式偏移度M1=ModeOffset[θ1]。例如,若方向偏移度θ1=5,則表示取預測模式偏移量集合ModeOffset[]中的第5個數(shù)值,得到預測模式偏移度M1=2。
本實施方式通過根據(jù)紋理方向θmain確定當前編碼單元的預測模式類型采用水平方向的預測模式,或者采用垂直方向的預測模式;并根據(jù)紋理方向θmain確定方向偏移度θ1,在預先設定的預測模式偏移量集合ModeOffset[]中,確定預測模式偏移度M1。從而,有效地簡化了現(xiàn)有技術中確定當前編碼單元的預測主模式的中間步驟,降低了算法的復雜度。
進一步地,在上述實施例的基礎上,步驟107中的根據(jù)預測模式類型和預測模式偏移度確定當前編碼單元的預測主模式,包括:
若θmain>0,則根據(jù)預測模式類型Mmain和預測模式偏移度M1,確定預測單元的預測主模式MPre=Mmain+M1;
若θmain<0,則根據(jù)預測模式類型Mmain和預測模式偏移度M1,確定預測單元的預測主模式MPre=Mmain-M1。
在本實施方式中,具體的,若紋理方向θmain>0,則表示當前編碼單元在水平和垂直方向上紋理明暗變化趨勢相同,則根據(jù)預測模式類型Mmain和預測模式偏移度M1,確定預測單元的預測主模式MPre=Mmain+M1。若紋理方向θmain<0,則表示當前編碼單元在水平和垂直方向上紋理明暗變化趨勢相反,則根據(jù)預測模式類型Mmain和預測模式偏移度M1,確定預測單元的預測主模式MPre=Mmain-M1。
本實施方式通過判斷θmain>0還是θmain<0,去確定預測單元的預測主模式。從而根據(jù)紋理方向篩選預測主模式,可以有效的降低算法的復雜度,提高編 碼效率。
本領域普通技術人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質。
最后應說明的是:以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發(fā)明各實施例技術方案的精神和范圍。