HEVC中B幀的基于SKIP/MergeRDCost的CU提前終止方法技術領域本發(fā)明涉及視頻壓縮領域中降低HEVCB幀中模式選擇復雜度的方法,具體是一種利用CU的SKIP/MergeRDCost來跳過該CU的剩下的模式選擇,從而降低編碼復雜度的方法。
背景技術:隨著數(shù)字視頻應用產(chǎn)業(yè)鏈的快速發(fā)展,視頻應用向高清晰度、高幀率和高壓縮率法相發(fā)展的趨勢越來越明顯,如果繼續(xù)采用H.264編碼會出現(xiàn)一些問題,比如由于視頻分辨率的提高,宏塊個數(shù)大大增加,會導致用于編碼的宏塊級參數(shù)所占的碼字過多,壓縮效率明顯降低,而且由于分辨率的大大提高,單個宏塊所表示的圖像信息也大大減少;高分辨率的宏塊的運動矢量的幅值也增加,而H.264原有的編碼方式將不再適用等等。HEVC(HighEfficiencyVideoCoding)是一種新的視頻壓縮標準,被視為是ITU-TH.264/AVC標準的繼任者。HEVC被認為不僅能提升圖像質(zhì)量,同時能達到H.264/MPEG-4AVC兩倍壓縮率(等同于同樣畫面質(zhì)量下比特率減少了50%),可以支持4K分辨率,最高分辨率可達到8192x4320(8K分辨率)。HEVC較于H.264的性能有大幅度的提高是因為它采用了幾個有較高復雜度的方法,其中之一就是靈活的編碼單元(CU)劃分和預測單元(PU)的模式選擇。相比于H.264/AVC,HEVC采用了一種基于編碼樹單元(CTU)的更靈活的四叉樹結構。如圖1所示,左圖是LCU(最大的CU,默認情況下為64x64)經(jīng)過模式判決后得到的最優(yōu)劃分,從圖中可以看出HEVC可以支持64x64到8x8的CU。Kim等人在文獻“BlockpartitioningstructureintheHEVCstandard”Kim,I.K.,Min,J.,Lee,T.,Han,W.J.,&Park,J.(2012).BlockpartitioningstructureintheHEVCstandard.CircuitsandSystemsforVideoTechnology,IEEETransactionson,22(12),1697-1706.中提到,對于高分辨率的視頻序列使用較大尺寸的CU會有比較明顯的性能提升。這是因為大尺寸圖像的平緩區(qū)域的面積更大,所以如果采用較大的塊進行編碼將能夠極大的提升編碼效率,同時又由于大尺寸塊不能很好的處理圖像的局部細節(jié),而復雜的圖像需要精細的預測,因此小尺寸塊也是需要的,因而這種塊結構能夠很好的適應圖像的各個區(qū)域,達到較好的編碼效果。此外,在P幀和B幀時,每個CU還要從不同的PU(預測單元)中選出最優(yōu)的,相對于H.264/AVC,HEVC中的PU模式也大大增加,包括:SKIP模式,Merge模式,Inter2Nx2N,InterNx2N,Inter2NxN,Inter2NxnU,Inter2NxnD,InternLx2N,InternRx2N,InterNxN,Intra2Nx2N和IntraNxN。在這么多不同的模式中,HEVC通過比較各個模式的RDCost來得到最優(yōu)的預測模式。RDCost通過RDO(率失真優(yōu)化)得到,見式(1):lmode==(SSEluma+ωchroma·SSEchroma)+λ·Bmode(1)其中SSE是原始像素與重建像素的均方誤差,ωchroma是色度的均方誤差的加權因子,λ是拉格朗日乘數(shù),Bmode是在該模式下的碼流大小。為了得到RDCost,需要進行運動估計、運動補償、變換、量化、熵編碼、反量化和反變換,再加上HEVC本身的塊結構,使HEVC的模式判決的復雜度大大增加。Tan等人在文獻“Onfastcodingtreeblockandmodedecisionforhigh-efficiencyvideocoding(HEVC)”(Tan,H.L.,Liu,F.,Tan,Y.H.,&Yeo,C.(2012,March).Onfastcodingtreeblockandmodedecisionforhigh-efficiencyvideocoding(HEVC).InAcoustics,SpeechandSignalProcessing(ICASSP),2012IEEEInternationalConferenceon(pp.825-828).IEEE)中提到,使用固定大小的16x16的CU只需引入1584次RDO,而使用64x64且最大深度為4的CTU需要進行8415次RDO。SKIP模式和Merge模式的RDO相對來說比較簡單,因為它們均不需要運動估計,此外由于SKIP模式不需要傳遞殘差,其RDO過程還不需要變換量化等過程。
技術實現(xiàn)要素:針對現(xiàn)有技術中的缺陷,本發(fā)明的目的是提供一種HEVC中B幀的基于SKIP/MergeRDCost的CU提前終止方法,解決HEVC原有的方法在B幀進行CU劃分和PU模式選擇時具有較高的復雜度的問題。為實現(xiàn)以上目的,本發(fā)針對降低HEVC編碼復雜的需求,且SKIP模式和Merge模式的RDO相對比較簡單,提出的一種利用當前CU的SKIP/Merge的RDCost來提前終止該CU的向下劃分和模式選擇的方法:首先是為每一幀初始化各個閾值,然后是針對每一個CU通過閾值來判斷是否能提前終止,包括SKIP/Merge模式的提前跳出和CU停止向下劃分兩個部分,最后是根據(jù)搜索得到的最優(yōu)模式進行閾值的自適應更新。本發(fā)明具有較低復雜度、性能損失小且速度快的優(yōu)點。所述方法包括如下步驟:步驟1:如果當前CU是每幀的第一個LCU,那么初始化各閾值;步驟2:計算該CU的SKIP/Merge的RDCost;步驟3:如果該CU的SKIP/Merge的RDCost小于第一閾值,直接跳到步驟9;步驟4:如果該CU的深度(depth)為0,且SKIP/Merge的RDCost小于第二閾值時,跳過該CU中深度為2和3的CU劃分,跳到步驟7;步驟5:如果該CU的深度為0,且SKIP/Merge的RDCost小于第三閾值時,跳過該CU中深度為3的CU劃分,跳到步驟7;步驟6:如果該CU的深度為1,且SKIP/Merge的RDCost小于第四閾值時,跳過該CU中深度為3的CU劃分;步驟7:進行該CU當前的深度下的剩下的模式判決,選出該深度下的最優(yōu)模式;步驟8:根據(jù)步驟4、5、6來判斷是否進行向下劃分,若需要則針對向下劃分后得到的每個小CU跳至步驟1,否則跳至步驟9;步驟9:更新相應的閾值。本發(fā)明中:自適應的閾值設置,如步驟1中為每一幀初始化各個閾值,減少由場景切換帶來的性能損失;如步驟9中的自適應更新閾值,為閾值引入了空間相關性,使得當前CU的閾值隨著周圍CU相關情況上下浮動,從而使閾值判斷的準確率有所提升,性能損失得到保障。本發(fā)明中:如步驟3中的為每一層CU的SKIP/Merge提前跳出均設置了相應的閾值,這是由每層CU有不同的特性決定的。經(jīng)驗證,分別設置閾值與只設置一個性能損失大大減少,而速度提升沒有明顯提升。本發(fā)明中:如步驟4、步驟5和步驟6的隔層提前終止CU搜索,這是由于使用RDCost的值來提前終止CU向下劃分,并不能很好的區(qū)分相鄰兩層之間的區(qū)別,因而采用隔層提前終止的方法才能使性能損失保持在一個令人滿意的程度內(nèi)。與現(xiàn)有技術相比,本發(fā)明具有如下的有益效果:本發(fā)明提供的方法能夠?qū)EVC中B幀的CU模式判決進行有效的提前終止,實現(xiàn)在較小的性能損失下降低HEVC編碼時的時間復雜度。經(jīng)驗證,在使用了該發(fā)明之后,在HEVC的參考編碼器HM12.0下,針對多個視頻序列編碼器平均有50%的速度提升,而BD-rate(相同質(zhì)量下的碼率)僅有1.25%的增加。附圖說明通過閱讀參照以下附圖對非限制性實施例所作的詳細描述,本發(fā)明的其它特征、目的和優(yōu)點將會變得更明顯:圖1是HEVC靈活的塊結構示意圖;圖2是本發(fā)明所提出的CU模式判決提前終止流程圖;圖3是CU的SKIP/Merge的RDCost對應的最優(yōu)模式的概率分布曲線;圖4是64x64CU經(jīng)模式判決后得到的最優(yōu)深與SKIP/MergeRDCost的概率分布曲線。具體實施方式下面結合具體實施例對本發(fā)明進行詳細說明。以下實施例將有助于本領域的技術人員進一步理解本發(fā)明,但不以任何形式限制本發(fā)明。應當指出的是,對本領域的普通技術人員來說,在不脫離本發(fā)明構思的前提下,還可以做出若干變形和改進。這些都屬于本發(fā)明的保護范圍。如圖1所示,本實施例提供一種HEVC中B幀的基于SKIP/MergeRDCost的CU提前終止方法,具體實施步驟如下:步驟(1):利用當前CU的位置來判斷是否要重新初始化閾值,具體是:通過判斷CU的橫軸與縱軸的坐標來判斷該CU是否為每幀的第一個CU,如果滿足條件,則為該幀初始化各個閾值。這里為每一幀都初始化閾值的目的是為了防止畫面切換造成的前后兩幀的相關性大大降低,如果沿用前一幀的更新后的閾值,可能會造成較大的性能損失。這里針對該發(fā)明設置了以下幾個閾值:threshold_skip[i],(i=0,1,2,3),threshold_depth_0_50,threshold_depth_0_70,threshold_depth_1_50。在要用到相應的閾值時會介紹使用該閾值的原因及其對應初始化的值。步驟(2):計算該CU的SKIP/Merge的RDCost值,這里采用的是HEVC編碼器原有的計算RDCost的方法。步驟(3):如果該CU的SKIP/Merge的RDCost小于第一閾值,直接跳到步驟9,具體是:這里第一閾值是threshold_skip[i],(i=0,1,2,3),此處的i代表的是不同CU的深度,為了盡可能的降低本發(fā)明的性能損失,這里給每一層深度分別設定了閾值。經(jīng)過統(tǒng)計,發(fā)現(xiàn)對于巨大部分視頻序列來說,經(jīng)過完整的模式選擇后B幀的SKIP/Merge模式占到總數(shù)的50%以上。并且計算SKIP/Merge的RDCost相對于其他模式來說復雜度低的多,這是因為SKIP/Merge是利用周圍塊的運動矢量直接進行運動補償,而不需要進行運動估計得到最優(yōu)的運動矢量,此外由于SKIP模式下不會傳遞殘差,因而對殘差進行的DCT和IDCT也不需要進行。鑒于這些原因,如果在計算了SKIP/Merge的RDCost之后能夠提前終止,那么CU模式選擇的復雜度將會大大降低。因為各個模式之間的衡量標準是RDCost,RDCost最小的模式將會被選為該CU的最優(yōu)模式,所以如果SKIP/Merge的RDCost值足夠小的話就可以認為有很大概率SKIP/Merge為該CU的最優(yōu)模式。為了驗證這個猜想,可以粗略的把CU模式選擇之后的最優(yōu)模式分為SKIP/Merge、Inter、Intra、Splited這四種,其中Splited表示要得到該CU的最優(yōu)模式需要往下繼續(xù)劃分。圖3是視頻序列Kimono1_1920x1080_30.yuv在QP(量化參數(shù))為32下32x32CU的SKIP/MergeRDCost對應的最優(yōu)模式的概率分布曲線。從圖中可以看出如果取SKIP/Merge的10百分位來作為初始閾值的話,分別僅有1.0%、1.9%和0.2%的Inter、Intra和Splited模式被錯判為SKIP/Merge模式。經(jīng)過測試多個視頻序列后,threshold_skip[i]的初始值為式(2):threshold_skip[i]=21.179e0.053*QP(2)所以,如果該CU的SKIP/Merge的RDCost小于threshold_skip[i],那么可以認為SKIP/Merge已經(jīng)是該CU的最優(yōu)模式,所以該CU的剩余模式?jīng)]有必要計算,直接跳至步驟9更新相應的閾值。步驟(4):如果該CU的深度為0,且SKIP/Merge的RDCost小于第二閾值時,跳過該CU中深度為2和3的CU劃分,跳到步驟7,具體是:由于HEVC的靈活的塊結構帶來了大量的計算復雜度,因而及時地終止不必要的CU向下劃分可以節(jié)省可觀的運算時間并且能夠帶來較少的性能損失,這里的做法就是基于這個原理。這里用到的第二閾值被記為threshold_depth_0_50,表示該閾值用在當CU的深度為0時的情況,采用的是深度為0的CU的SKIP/Merge的RDCost的50百分位。為證明該閾值的有效性,在視頻序列Kimono1_1920x1080_30.yuv中深度為0的CU進行了測試,結果如圖4,這里的SKIP/MergeRDCost指的是深度為0時的該CU的SKIP/MergeRDCost的值。在圖4中,Depthi(I=0,1,2,3)表示64x64經(jīng)過模式判決后得到的最優(yōu)的深度。從圖4中可以看出,如果利用Depth0的50百分位,那么將只有12%,5.8%,2.9%的Depth1,Depth2,Depth3被錯判為Depth0。同時,經(jīng)實驗得知利用該方法采用隔層提前終止會得到較好的性能,即利用threshold_depth_0_50只跳過深度為2和3的搜索,而不跳過深度為1的搜索,這個策略也會用到該發(fā)明的其余地方。經(jīng)過測試多個視頻序列后,threshold_depth_0_50的初始值為式(3):threshold_depth_0_50=7.0337e0.01124*QP(3)步驟5:如果該CU的深度為0,且SKIP/Merge的RDCost小于第三閾值時,跳過該CU中深度為3的CU劃分,跳到步驟7,具體是;這里采用的策略與方法同步驟4類似,只是利用70百分位跳過深度為3的CU搜索,利用第三閾值進行提前終止的錯判率也在圖4中。經(jīng)過測試多個視頻序列后,threshold_depth_0_70的初始值為式(4):threshold_depth_0_70=5.2503e0.1323*QP(4)步驟6:如果該CU的深度為1,且SKIP/Merge的RDCost小于第四閾值時,跳過該CU中深度為3的CU劃分,具體是:同步驟4和步驟5一樣,這里采用的是32x32CU的SKIP/MergeRDCost來跳過深度為3的搜索。此處的第四閾值記為threshold_depth_1_50,初始值為式(5):threshold_depth_1_50=8.6663e0.1084*QP(5)步驟7:進行該CU當前的深度下的剩下的模式判決,選出該深度下的最優(yōu)模式,具體是:如果沒有滿足步驟3的條件,那么就要進行該層的其余模式,即包括Inter2Nx2N,InterNx2N,Inter2NxN,Inter2NxnU,Inter2NxnD,InternLx2N,InternRx2N,InterNxN,Intra2Nx2N和InterNxN,分別計算各個模式的RDCost,選出其中RDCost最小的模式,這個RDCost將于該CU向下劃分后進行模式判決得到的RDCost進行比較,從而得到該CU的最優(yōu)劃分。步驟8:根據(jù)步驟4、5、6來判斷是否進行向下劃分,若需要則針對向下劃分后得到的每個小CU跳至步驟1,否則跳至步驟9,具體是:在步驟7完成之后,當前深度的最優(yōu)模式已經(jīng)得到,這時需要向下劃分得到向下劃分的最優(yōu)模式,兩者進行比較從而得到該深度下的最優(yōu)劃分。該步驟就是利用本發(fā)明提出的方法來判斷是否要向下劃分。為了實現(xiàn)的方便,這里為每個LCU的每個深度設置了標志符is_search[i](i=0,1,2,3),這里的i代表不同的深度。當每個LCU的搜索開始時is_search[i]均被初始化為true,當滿足步驟4、步驟5或步驟6的條件時,才將對應的標志符設為false。在該步驟中通過判斷標志符來決定是否要向下劃分:若標志符為true,則該CU需要向下劃分;若為false,則不要。步驟9:更新相應的閾值,具體是:在上面的各步驟中已經(jīng)提到根據(jù)多個測試序列的仿真結果,為每一個閾值都初始化了閾值,在這里還進行自適應的更新,原因是由于空間上的相關性,相鄰的CU之間的閾值也具有一定的相關性,在閾值中引入這種相關性會使性能損失與速度提升得到平衡,閾值更新的為式(6):這里的threshold為上文中提到的任意閾值,經(jīng)驗證,當λ取7時,得到的效果最為理想。此處就利用步驟6來更新相應的閾值,例如對32x32的CU,完成搜索后發(fā)現(xiàn)其最優(yōu)模式為當前層的SKIP/Merge模式,那么threshold_skip[1]就會被更新;對64x64的LCU來說,若其最優(yōu)的劃分為Depth0或Depth1,那么threshold_depth_0_50就會被更新。本發(fā)明能夠解決HEVC在B幀CU搜索時復雜度過大的問題,在HEVC的參考編碼器HM12.0下,針對多個視頻序列編碼器平均有50%的速度提升,而BD-rate(相同質(zhì)量下的碼率)僅有1.25%的增加。以上對本發(fā)明的具體實施例進行了描述。需要理解的是,本發(fā)明并不局限于上述特定實施方式,本領域技術人員可以在權利要求的范圍內(nèi)做出各種變形或修改,這并不影響本發(fā)明的實質(zhì)內(nèi)容。