編碼單元的局部運動向量推導的方法
【專利摘要】本發明揭露一種在編碼單元的視頻編碼過程中執行局部運動向量推導的方法與相應的裝置,上述方法包含:接收上述編碼單元,其中上述編碼單元包含多個子編碼單元;解析上述編碼單元的數據;以及依據預定準則指定上述編碼單元的特定子編碼單元的參考運動向量,其中上述參考運動向量是用來供給至少一其他子編碼/編碼單元參考,并且并非使用上述參考運動向量來進行上述特定子編碼單元的運動向量預測。本發明的優勢在于編碼器與解碼器可適當地執行局部運動向量推導。通過利用本發明的方法與相應裝置,運動向量預測操作與運動補償操作可提高編碼效率。
【專利說明】編碼單元的局部運動向量推導的方法
[0001]相關申請的交叉應用
[0002]本申請是申請日為2011年10月26日,申請號為201110089382.6,發明名稱為“編碼單元的局部運動向量推導的方法及裝置”的申請的分案申請。
技術領域
[0003]本發明是與視頻處理的運動補償相關,更準確地,本發明是與編碼單元(codingunit)的視頻編碼中執行局部運動向量推導的方法以及執行上述方法的裝置有關。
【背景技術】
[0004]運動向量補償是視頻壓縮中對視頻數據進行編碼與解碼所使用的技術。通過運動補償的幫助,當前圖像能夠以一或多個參考圖像的某些部分來描繪,其中上述參考圖像可為時間上提前或者延后。典型地,圖像可通過運動補償而由先前所傳輸/存儲的圖像來準確地合成,并且可提升壓縮效率。隨著編碼技術的進步,關于新標準的設計被引進以更增進壓縮效率。
【發明內容】
[0005]因此,本發明目的之一是提供一種在編碼單元的視頻編碼過程中執行局部運動向量推導的方法,并且提供執行上述方法的相關裝置,以提高視頻處理的壓縮效率。
[0006]本發明的一個實施方式提供了一種在編碼單元的視頻編碼過程中執行局部運動向量推導的方法,上述方法包含:接收上述編碼單元,其中上述編碼單元包含多個子編碼單元;解析上述編碼單元的數據;以及依據預定準則指定上述編碼單元的特定子編碼單元的參考運動向量,其中上述參考運動向量是用來供給至少一其他子編碼/編碼單元參考,并且并非使用上述參考運動向量來進行上述特定子編碼單元的運動向量預測。
[0007]本發明的另一實施方式提供了一種在編碼單元的視頻編碼過程中執行局部運動向量推導的方法,上述方法包含:處理上述編碼單元中的多個子編碼單元;依據預定準則推導上述編碼單元的特定子編碼單元的參考運動向量并指定上述參考運動向量,其中上述參考運動向量是用來供給至少一其他子編碼/編碼單元參考,并且并非使用上述參考運動向量來進行上述特定子編碼單元的運動向量預測;以及依據上述參考運動向量執行上述至少一其他子編碼/編碼單元的運動向量預測。
[0008]本發明的優勢在于編碼器與解碼器可適當地執行局部運動向量推導。通過利用本發明的方法與相應裝置,運動向量預測操作與運動補償操作可提高編碼效率。
【附圖說明】
[0009]圖1A舉例說明了依據本發明第一實施方式的在編碼單元的視頻編碼過程中執行局部運動向量推導的裝置100的簡單示意圖。
[0010]圖1B舉例說明了本發明的圖1A所示的實施方式中的幀間/幀內預測模塊110的預測操作。
[0011]圖2為依據本發明實施方式的在編碼單元的視頻編碼過程中執行局部運動向量推導的方法910的流程圖。
[0012]圖3-6是依據本發明的圖2所示的實施方式的方法910的不同實施方式的相關細節圖。
【具體實施方式】
[0013]在說明書及后續的申請專利范圍當中使用了某些詞匯來指稱特定的組件。所屬領域中具有通常知識者應可理解,制造商可能會用不同的名詞來稱呼同樣的組件。本說明書及后續的申請專利范圍并不以名稱的差異來作為區分組件的方式,而是以組件在功能上的差異來作為區分的基準。在通篇說明書及后續的請求項當中所提及的“包含”是為一開放式的用語,故應解釋成“包含但不限定于”。另外,“耦接”一詞在此是包含任何直接及間接的電氣連接手段。因此,若文中描述第一裝置耦接于第二裝置,則代表第一裝置可直接電氣連接于第二裝置,或透過其他裝置或連接手段間接地電氣連接至第二裝置。
[0014]請參考圖1A,圖1A舉例說明了依據本發明第一實施方式的在編碼單元的視頻編碼中執行局部運動向量推導的裝置100的簡單示意圖。裝置100包含幀間/幀內預測模塊(inter/intra predict1n module)110,計算單元 120,轉換以及量化模塊(transform andquantizat1n module)130,熵編碼電路(entropy coding circuit)140,反轉換以及反量化模塊(inversed transform and inversed quantizat1n module) 150,重建電路(reconstruct1n circuit) 160,解塊濾波器(deblocking filter) 170,幀緩沖器(framebuffer) 180。裝置100能夠對初始信號109執行視頻編碼,以產生一個攜帶編碼結果的輸出信號,例如攜帶熵編碼電路140的輸出的輸出信號。舉例來說,初始信號109可代表具有編碼單元數據的輸入視頻,并且熵編碼電路140的輸出可為一比特流(b i t s tr earn)輸出。
[0015]依據第一實施方式,幀間/幀內預測模塊110是用來執行幀間/幀內預測,以產生預測信號119。如圖1A所示,計算單元120是用來執行初始信號109與幀間/幀內預測模塊110所產生的預測信號119之間的算術計算,例如減法計算。此外,轉換與量化模塊130、熵編碼電路、反轉換以及反量化模塊150、重建電路160是用來分別執行轉換與量化,熵編碼,反轉化與反量化以及重建操作。因此,重建電路160產生一個攜帶重建操作的重建結果的重建信號169。另外,解塊濾波器170是用來對重建信號169執行解塊操作,以獲得一個攜帶了解塊視頻數據的解塊信號179,以暫時存儲在幀緩沖器180中,并且幀間/幀內預測模塊110能夠通過恢復信號(restored signal)189自幀緩沖器180中存取解塊視頻數據。上述說明僅僅用來舉例,而并非為本發明的限制。依據第一實施方式的一些變型,可省略解塊濾波器170以及其解塊操作,重建信號169所攜帶的重建結果可暫時存儲在幀緩沖器180中,并且幀間/幀內預測模塊110能夠通過恢復信號189存取上述重建結果。
[0016]具體來說,至少一部分(例如一部分或者全部)裝置100可由硬件電路(hardwarecircuit)來實現。舉例來說,裝置100可由針對編碼單元執行視頻編碼的處理電路(processing circuit)來實現,其中上述處理電路可包含預處理模塊(preprocessingmodule)與至少編碼模塊(coding module),上述預處理模塊包含幀間/幀內預測模塊110,上述編碼模塊包含計算單元120,轉換以及量化模塊130,熵編碼電路140,反轉換以及反量化模塊150,重建電路160,解塊濾波器170。具體來說,裝置100的一或多個組件可由數字信號處理技術來實現。上述說明僅僅用來舉例說明,而并非為本發明的限制。依據第一實施方式的一些變型,裝置100的至少一部分可通過程序模塊(program module)來實現。舉例來說,處理電路可為執行多個程序模塊的處理器,其中執行第一部分程序模塊的處理器可執行上述預處理模塊相同或者相似的操作,并且執行第二部分程序模塊的處理器可執行上述編碼模塊的相同或者相似的操作。
[0017]無論裝置100的至少一部分(例如一部分或者全部)是由硬件電路還是程序模塊來實現,裝置100皆可執行編碼單元的視頻編碼。舉例來說,編碼單元可為16x16的宏區塊(MBs,macroblocks)。在另外的例子中,編碼單元可具有特定的尺寸,其中上述特定尺寸可提前設定,并且不需要與宏區塊一致。在處理至少一個圖像的編碼單元(例如上述編碼單元)的過程中,需要預測一或者多個運動向量。依據本發明的實施方式,上述預處理模塊能夠分割上述編碼單元為多個子編碼單元(sub-coding unit),例如,上述編碼單元的多種分區(例如正方或非正方分區),并且能夠針對每一子編碼單元執行運動向量預測。更準確地說,預處理模塊可利用至少一其他已編碼的子編碼/編碼單元的至少一運動向量來獲得多個子編碼單元中的特定子編碼單元(specific sub-coding unit)的運動向量,并且依據上述特定子編碼單元的運動向量來對上述特定子編碼單元執行運動補償。此外,上述編碼模塊可依據上述預處理模塊所執行的運動補償來對上述編碼單元執行視頻編碼。
[0018]圖1B舉例說明了本發明的圖1A所示的實施方式中的幀間/幀內預測模塊110的預測操作。在此實施方式中,記號?(如-3)、?(如-2)、?(如-1)、以及?(如)可用來代表多個后續幀{F(t)}中的一部分,其中F(to)為當前幀。當前幀F(to)可包含多個編碼單元{CU(to)},并且編碼單元CU(to)可包含多個子編碼單元{SCU(to)},其中記號V可代表特定子編碼單元的運動向量,例如圖1B所示的子編碼單元SCU( to)的運動向量。因此,上述預處理模塊可利用如上所述的至少一運動向量來獲得運動向量V,例如利用當前幀F (to)中的其他編碼單元的子編碼單元A與B的運動向量Va與VB以及先前幀F(to-l)的編碼單元ClKto-1)的子編碼單元T的運動向量ντ來獲得運動向量V ο具體來說,上述其他編碼單元(或子編碼單元)為已編碼的編碼單元(或子編碼單元)。舉例來說,在上述編碼單元為區塊(block)的情況下,編碼單元CU(ttrl)可配置為編碼單元CU(to)的同位置塊(collocated block)。通常來說,子編碼單元S⑶(t0)的運動向量V可表示如下:
[0019]V= XkeK(wk(i)vk);
[0020]其中指數k在集合K中變化,記號V1J^wk(i)分別代表其他子編碼/編碼單元(更具體來說,一些已編碼的子編碼/編碼單元)的運動向量與其相關的加權參數。舉例來說,當變量k等于I時,則僅僅使用一個其他子編碼/編碼單元的一個運動向量Vk來獲得運動向量V,更準確地說,上述加權參數wk(i)簡單地等于I。在其他例子中,當變量k大于I時,上述至少一其他子編碼單元/編碼單元包含多個其他子編碼/編碼單元,并且上述至少一運動向量包含多個其他子編碼/編碼單元(更具體來說,一些已編碼的子編碼/編碼單元)的多個運動向量Ivk},特別地,上述加權參數{wk(i)}的總和等于I。上述操作的細節請參考圖2。
[0021]圖2為依據本發明的實施方式的在編碼單元的視頻編碼中執行局部運動向量推導的方法910的流程圖。方法910可應用于圖1A所示的裝置100,特別地,可應用在上述處理電路上。上述方法詳述如下:
[0022]在步驟912中,上述預處理模塊處理編碼單元CU(to)(例如,當前編碼單元)為多個子編碼單元,例如多個子編碼單元{SCU(to)},并且對多個子編碼單元{SCU(to)}中的每一個執行運動向量預測。舉例來說,上述預處理單元可接收包含多個子編碼{SCU(to)}的編碼單元⑶(to),并且解析(parse)上述編碼單元⑶(to)的數據。特別地,預處理模塊利用上述至少一子編碼/編碼單元的至少一運動向量(例如上述運動向量!>k})來獲得多個子編碼單元{SCU(to)}中的特定子編碼單元SCU(to)的運動向量V。預處理模塊可進一步使用至少一與獲得特定子編碼單元SCU (to)的運動向量所使用的運動向量不同的運動向量來獲得編碼單元CU(to)中的另一子編碼單元的運動向量。當僅使用一個運動向量來獲得另一子編碼單元(即,上述提及的編碼單元CU(to)中的另一子編碼單元)的運動向量時,獲得上述另一子編碼單元的運動向量所使用的運動向量與獲得特定子編碼單元SCU (to)的運動向量所使用的任何運動向量不同。當使用多個運動向量來獲得上述另一子編碼單元的運動向量時,獲得上述另一子編碼單元的運動向量所使用的運動向量與獲得特定子編碼單元SCU (to)的運動向量所使用的運動向量不完全相同。舉例來說,獲得上述另一子編碼單元的運動向量所使用的運動向量可為第一運動向量集合{ Va,Vb,Vc },而獲得上述特定子編碼單元的運動向量所使用的運動向量可為第二運動向量集合{ Va,Vb,Vd }。上述特定子編碼單元與上述另一子編碼單元為同一編碼單元中的任意兩個子編碼單元。
[0023]依據本發明的實施方式,例如圖3所示,編碼單元CU(to)可為一當前處理區塊,并且子編碼單元SCU(to)可為子區塊(sub-bl0Ck)SB,其中圖3所示的陰影部分可代表至少一部分已編碼區塊集合{CB}。參見圖3,上述已編碼區塊集合{CB}可包含已編碼左區塊CBl,已編碼左上區塊CBul,已編碼上區塊CBu,以及已編碼右上區塊CBur。并且運動向量集合{vk}可包含至少一部分(例如,部分或者全部)已編碼區塊{CB}的運動向量,例如一或多個已編碼區塊CBl、CBul、CBu與CBur的運動向量。
[0024]在步驟914,上述預處理模塊依據特定子編碼單元SCU(t0)的運動向量V對特定子編碼單元SCU(tO)進行運動補償。舉例來說,每一編碼單元(例如,編碼單元CU(to))可為一區塊,更具體來說,可為包含像素數組的區塊,例如擴展宏區塊、宏區塊、或者一部分宏區塊。因此,子編碼單元可為子區塊。依據本發明的實施方式,如圖3所示,上述預處理模塊可如上所述般依據運動向量V對處理中區塊進行運動補償,其中上述運動向量V可為多個已編碼區塊{CB}的至少一部分(例如一或多個已編碼區塊CBl、CBul、CBu以及CBur)的運動向量的加權總和。在本實施方式中,上述多個已編碼區塊{CB}可為運動補償區塊。
[0025]圖4是依據本發明的圖2所示的實施方式的方法910的相關細節圖。依據本實施方式,上述預處理模塊利用多個運動向量的加權總和(例如SkeK(Wk(i)Vk))作為上述特定子編碼單元的運動向量V。為了獲得更好的補償效果,已編碼區塊CBl、CBul、CBu以及CBur可與圖3所示相同。舉例來說,上述多個其他子編碼/編碼單元可包含已編碼區塊CBl、CBul、CBu以及CBur中的一或多個,并且上述多個運動向量可包含已編碼區塊CBl、CBul、CBu以及CBur所對應的運動向量VL、VUL、VU以及VUR中的一或多個。
[0026]更具體來說,對于上述圖4所示的每一子區塊,例如第i個子區塊匕,可依據已編碼區塊{CB}的多個運動向量來獲得子區塊bi的運動向量V ( i ),或稱為運動向量預測子(mot1n vector predictor),如下式所不:
[0027]v(i) = XkeK(wk(i)vk);
[0028]其中參數k在集合K中變化,并且記號Vk與wk(i)分別代表第k個參考運動向量以及相關的加權參數。舉例來說,,并且記號仏代表處理中區塊的子區塊集合。如圖4所示,運動向量集合{Vk}中的運動向量Vk在已編碼區塊CBu中,說明在此情況下,運動向量集合{vk}包含已編碼區塊CBu的運動向量集合{vu}。
[0029]在實施方式中,例如圖4所示的實施方式的變型中,上述預處理模塊可利用多個運動向量{vk}的最佳維納濾波(optimum Wiener filtering)來決定運動向量集合{vk}中的每一個對應的加權參數的集合{wk(i)},以產生上述加權總和(在此變型中即為XkeK(Wk(i)Vk))。舉例來說,上述預處理模塊可利用最佳維納濾波來依據下式獲得加權參數集合{wk(i)}:
[0030](wo*,...,WK*) =arg min | v*(i) - XkeK(wk(i)vk) I ;
[0031]上述算式表示加權參數集合|wk(i)}可通過搜尋在上述預處理模塊所執行的最佳維納濾波中I v*(i)_ XkeK(wk(i)vk) I的最小值所對應集合(wqV..,WK*)。上述說明僅僅用來舉例,而并非為本發明的限制。依據本發明的圖4所示的實施方式的變型,上述預處理模塊可依據至少一臨近(neighboring)編碼單元的內容來決定運動向量集合{vk}中的每一個所分別對應的加權參數的集合{Wk(i)},例如依據已編碼區塊CBl、CBul、CBu與CBur中的一或多個的內容(content)來產生加權總和(此變型中為XkEK(wk(i)Vk))。依據本發明的圖4所示的實施方式的另一變型,上述預處理模塊可依據多個其他子編碼/編碼單元的內容來決定運動向量集合Ivk}中的每一個所分別對應的加權參數的集合{wk(i)},以產生加權總和(此變型中為 XkeK(Wk(i)Vk))。
[0032]在其他實施方式中,例如本發明的圖4所示的實施方式的一些變型中,上述預處理模塊可利用離線訓練(offline training)或者線上訓練(online training)來決定上述運動向量集合Ivk}中的每一個所對應加權參數的集合{wk(i)},以產生加權總和(此變型中即為XkeK(Wk(i)Vk))。依據本發明的圖4所示的實施方式的另一些變型中,上述預處理模塊可利用多個運動向量Wk}的平均值為上述特定子編碼單元的運動向量V,這也代表了上述加權參數中集合{wk( i)}中的任意兩個相等。更確切地說,在此變型中,上述加權參數{wk( i)}中每一個等于l/n(K),其中n(K)代表集合K中的變量k的可能值。
[0033]圖5A-5D是依據本發明的圖2所示的方法910的不同實施方式的相關細節圖。在這些實施方式中,在k的可能值的數量大于I的情況下,上述至少一其他子編碼單元/編碼單元依然包含多個其他子編碼/編碼單元,并且上述至少一運動向量依然包含上述多個其他子編碼/編碼單元的運動向量Ivk}。然而,上述預處理模塊并不需要利用如上所述的加權總和(例如Σ kEK(wk( i) Vk))來作為特定子編碼單元的運動向量。依據上述實施方式,上述預處理模塊可預處理多個運動向量{vk}來獲得特定子編碼單元的運動向量V ο舉例來說,上述預處理模塊可計算多個運動向量的中值(median),濾波多個運動向量,計算上述多個運動向量的加權總和,或者執行計算多個運動向量的中值,濾波多個運動向量,計算上述多個運動向量的加權總和的任意組合。
[0034]具體來說,運動向量集合{Vk}可包含至少一子編碼單元的至少一運動向量。舉例來說,運動向量集合Ivk}可包含同一編碼單元CU(to)中的至少一其他子編碼單元(即為處理中的子編碼單元SCU(to)之外的子編碼單元)的至少一運動向量,例如圖5D所示的子編碼單元A、B、C以及D的運動向量VA、VB、VC以及VD中的一或多個。在另一舉例說明中,運動向量集合!>k}可包含其他編碼單元中的至少一子編碼單元的至少一運動向量,例如圖5A-5C所示的子編碼單元A、B、C以及D的運動向量VA、VB、VC以及VD中的一或多個。在另一舉例說明中,運動向量集合{vk}可包含至少一自時序(temporal direct1n)所獲得的運動向量,例如自時序上前一幀所包含的子編碼單元獲得。具體來說,當編碼單元為區塊時,圖5A-5D所示的子編碼單元A、B、C以及D可視為子區塊。
[0035]依據圖5A所示的實施方式,子編碼單元A、B、C以及D分別屬于已編碼區塊CBl、CBu、CBur以及CBul。此外,已編碼區塊CBl、CBu、CBur以及CBul分別為當前處理區塊的已編碼左區塊,已編碼上區塊,已編碼右上區塊,以及已編碼左上區塊。更具體來說,針對圖5A所示的第i個子區塊bi來說,在已編碼左區塊CBl中選擇子編碼單元A,在已編碼上區塊CBu中選擇子編碼單元B,在已編碼右上區塊CBur中選擇子編碼單元C,在已編碼左上區塊CBul中選擇子編碼單元D。此外,上述預處理模塊預處理圖5A所示的子編碼單元A、B以及C的運動向量VA、VB以及Vc來計算特定子編碼單元(例如第i個子區塊bi)的運動向量V ο本實施方式中的運動向量V可通過計算運動向量a、VB以及VC的中值(median)來獲得,表示如下:
[0036]v=Median(vA,VB,vc);
[0037]其中記號Median代表括號中的向量/值的中值。如果無法獲得運動向量vc,可用運動向量VD代替運動向量VC以計算運動向量V。在其他實施方式中,可向子編碼單元A、B以及C的運動向量VA、VB以及VC指定不同的加權參數。舉例來說,加權參數可依據特定子編碼單元(例如bi)與子編碼單元A、B以及C之間的距離來決定。較短的距離可對應較大的加權參數。在另一實施方式中,預處理模塊可過濾預先決定的已編碼子編碼單元的運動向量來獲得運動向量V。
[0038]上述預處理模塊可決定上述特定子編碼單元(例如第i個子編碼區塊bO的尺寸為編碼單元的視頻編碼的變換尺寸(transform size),并且用來獲得特定子編碼單元(例如第i個子編碼區塊bO的運動向量V的子編碼單元的尺寸可與變換尺寸相同(例如,4乘4,8乘8,16乘16等等)。
[0039]依據圖5B所示的實施方式,子編碼單元A屬于已編碼左區塊CBl,并且子編碼單元B、C以及D屬于已編碼上區塊CBu。更具體來說,針對圖5B所示的第i個子區塊匕來說,在已編碼左區塊CBl中選擇子編碼單元A,在已編碼上區塊CBu中選擇子編碼單元B。此外,針對子編碼單元B而言,子編碼單元C為已編碼上區塊CBu中右臨近子編碼單元(如果存在),并且子編碼單元D為已編碼上區塊CBu中左臨近子編碼單元(如果存在)。因此,針對圖5B所示的第i個子區塊h來說,在已編碼上區塊CBu中選擇三個子編碼單元B、C以及D。在其他實施方式中,當預處理模塊處理當前區塊的第一列(column)子編碼單元時,子編碼單元D可屬于已編碼左上區塊CBul,子編碼單元C可屬于已編碼右上區塊CBur。此外,上述預處理模塊可利用圖5B所示的子編碼單元A、B、C以及D的運動向量VA、VB、VC以及VD中的一或多個來計算運動向量V。舉例來說,計算上述預先決定的四個子編碼單元的運動向量的中值,來作為特定子編碼單元(例如第i個子區塊bi)的運動向量V。表示如下:
[0040]v=Median(vA, Vb ,VC,VD).
[0041]上述預處理模塊可決定上述特定子編碼單元的尺寸為編碼單元的視頻編碼的變換尺寸,并且圖5B所示的子編碼單元的尺寸可與變換尺寸相同(例如,4乘4,8乘8,16乘16等等)。依據其他實施方式,例如圖5B所示的實施方式以及一些變型,當利用中值函數Median(.)來計算運動向量V時所使用的運動向量(例如圖5B所示的實施方式中的運動向量VA、VB、VC以及VD)數目為偶數時,中值函數的定義可變化。利用中值函數來計算運動向量V所使用的運動向量存儲結果可依照順序寫成如下形式^^^…^^^即’假設^與^^叫代表所存儲結果V1,V2,…,V2N中的兩個臨近運動向量,貝Ij運動向量Vn小于運動向量V(n+1)(即| Vn |〈 | V(n+1))。在一些實施方式中,中值函數Median(.)可定義為vn、v(n+i)或(vn+v(n+i))/2。舉例來說,上述多個運動向量的數目為4(即2N = 4),并且上述多個運動向量可寫為V1、V2、V3與V4,貝Ij中值可為(V2+V3)/2,即代表了運動向量V等于(V2+V3)/2。在其他實施方式中,上述多個運動向量的數目等于4,并且上述多個運動向量可寫為V1、V2、V3與V4,并且中值可為V2,即代表了運動向量V等于V2。在另一實施方式中,上述多個運動向量的數目等于4,并且上述多個運動向量可寫為V1、V2、V3與V4,并且中值可為V3,即代表了運動向量V等于V3。
[0042]依據圖5C所示的實施方式,子編碼單元A屬于已編碼左區塊CBl,子編碼單元B以及C屬于已編碼上區塊CBu,子編碼單元D屬于已編碼左上區塊CBul。更具體來說,針對圖5C所示的第i個子區塊匕來說,在已編碼左區塊CBl中選擇子編碼單元A,在已編碼上區塊CBu中選擇子編碼單元B,在已編碼左上區塊CBul中選擇子編碼單元D。此外,針對子編碼單元B而言,子編碼單元C為已編碼上區塊CBu中右臨近子編碼單元(如果存在)。此外,上述預處理模塊可利用圖5(3所示的子編碼單元A、B、C以及D的運動向量va、vb、vc以及Vd中的一或多個來計算運動向量V。舉例來說,計算運動向量VA、VB、VC以及VD的中值,來作為特定子編碼單元(例如第i個子區塊bi)的運動向量V,或者如果無法獲得運動向量VC,則計算運動向量VA、VB以及VD的中值,來作為特定子編碼單元(例如第i個子區塊匕)的運動向量V。表示如下:
[0043]v=Median(vA,VB,vc).
[0044]上述預處理模塊可決定上述特定子編碼單元的尺寸為編碼單元的視頻編碼的變換尺寸,并且圖5C所示的子編碼單元的尺寸可與變換尺寸相同(例如,4乘4,8乘8,16乘16等等)O
[0045]依據圖5B-5C所示的實施方式的變型,上述預處理模塊可利用或多或少的子編碼單元的運動向量來獲得運動向量V ο屬于一或多個子編碼單元的運動向量的多種組合可用來推導特定子編碼單元的運動向量V。其精神在于特定子編碼單元的運動向量是從一組運動向量來局部導出,并且該組運動向量可與獲得當前處理區塊中的另一子編碼單元的運動向量所使用的一組運動向量不同,
[0046]依據圖5D所示的實施方式,上述預處理模塊可利用步驟912中提及的多個子編碼單元的一部分運動向量來獲得相同編碼單元中另一子編碼單元的運動向量。參見圖5D,子編碼單元A、B、C以及D屬于當前處理區塊,其中子編碼單元A、B、C以及D為步驟912中提及的多個子編碼單元的一部分。更具體來說,針對圖5D所示的第i個子區塊匕來說,子編碼單元A為左臨近子編碼單元,子編碼單元B為上臨近子編碼單元,子編碼單元C為右上臨近子編碼單元,子編碼單元D為左上臨近子編碼單元。在本實施方式中,上述預處理模塊可利用圖5D所示的子編碼單元A、B以及C的運動向量VA、VB以及vc的中值來作為特定子編碼單元(例如第i個子區塊bi)的運動向量V。表示如下:
[0047]v=Median(vA,VB,vc).
[0048]如果無法獲得子編碼單元C,上述預處理模塊則利用圖5D所示的子編碼單元A、B以及D的運動向量VA、VB以及VD的中值,來作為特定子編碼單元的運動向量V。
[0049]上述預處理模塊可決定上述特定子編碼單元的尺寸為編碼單元的視頻編碼的變換尺寸,并且圖f5D所示的子編碼單元的尺寸可與變換尺寸相同(例如,4乘4,8乘8,16乘16等等)O
[0050]依據另一實施方式,例如圖5D所示的實施方式的變型,上述預處理模塊可利用圖f5D所示的子編碼單元A、B、C以及D的運動向量va、vb、vc以及Vd的中值來作為特定子編碼單元(例如第i個子區塊bi)的運動向量V,并且表示如下:
[0051]v=Median(vA,VB,vc,vd).
[0052]本實施方式的細節在此不再贅述。依據本發明的一些實施方式以及其變型,當利用中值函數Median(.)來計算運動向量v時所使用的運動向量數目為偶數時,中值函數的定義可變化。相似地,利用中值函數Median(.)來計算運動向量V所使用的運動向量存儲結果可依照順序寫成如下形式v1、v2、...、V2N,中值函數Median(.)可定義為vn、v(n+i)或(vn+ν(Ν+υ)/2。相似的細節在此不再贅述。
[0053]依據圖5A-5D所示的實施方式的變型,上述預處理模塊可在不同的模式下(例如模式1、2、3與4)選擇性操作,其中模式1、2、3與4的操作分別與圖5Α-?所示的實施方式相同或的相似。舉例來說,在模式I中,上述預處理模塊可依據圖5Α所示的實施方式的相同方法來操作,而在其他模式中,例如模式2、3與4中,上述預處理模塊可分別依據圖5B-5D所示的實施方式的相同方法來操作。
[0054]依據圖5A-5D所示的任意實施方式的變型,在步驟912中,上述預處理模塊可依據至少一臨近編碼單元的至少一模式來分割編碼單元為多個子編碼單元,例如依據已編碼單元CBl、CBu、CBur以及CBul中的一或多個的模式1、2、3以及/或者4來分割編碼單元為多個子編碼單元。依據第5A-f5D圖所示的任意實施方式的另一變型,在步驟912中,上述預處理模塊可依據至少一個臨近編碼單元的內容來分割編碼單元為多個子編碼單元,例如依據已編碼單元CBl、CBu、CBur以及CBul中一或多個的內容來分割編碼單元為多個子編碼單元。
[0055]依據上述任意實施方式的變型,無論上述預處理單元是否利用加權總和(例如SkeK(wk(i)vk))或者利用中值(例如Median(VA, VB, vc)或Median(VA, Vb,vc,vd))作為上述特定子編碼單元的運動向量V,上述提及的至少一其他子編碼/編碼單元為已編碼的子編碼/編碼單元。舉例來說,在一部分實施方式變型中,上述提及的至少一其他子編碼/編碼單元包含至少一空間(spatial Iy)已編碼的子編碼/編碼單元,以及/或者至少一時間(temporally)已編碼的子編碼/編碼單元。在另一實施方式中,上述提及的至少一其他子編碼單元可為運動補償子編碼/編碼單元。
[0056]圖6是本發明的圖2所示的實施方式的方法910所涉及的細節圖。依據本實施方式,上述預處理模塊依然分割編碼單元CU(to)(例如當前處理編碼單元)為多個子編碼單元(例如子編碼單元{SCU(to)}),并且在步驟912中對每一子編碼單元{SCU(to)}執行運動向量預測。然而,當上述預處理模塊利用多個運動向量,例如如上所述的運動向量Ivk},來獲得特定子編碼單元SCU(to)的運動向量V時,對每一子編碼單元需指定一個運動向量(例如一個參考運動向量),從而可提供給其他子編碼/編碼單元后續參考。在編碼器與解碼器相互匹配的條件下,上述指定運動向量的準則可任意運用。在一些制定運動向量的預定規則中,包含H.264中定義的運動向量預測子,H.264中定義的運動向量預測具有運動向量縮放(scaling),自左區塊填充(padding),自上區塊填充以及自左上區塊填充。依據一種自左區塊與上區塊填充的實施方式,上述預處理模塊獲得上述特定子編碼單元SCU(to)的運動向量V,并且利用另一編碼單元(當前處理編碼單元CU(to)之外的編碼單元)的子編碼單元的運動向量來指定運動向量,舉例來說,利用編碼單元CU(to)的臨近編碼單元CUadj (to)的一個已編碼的子編碼單元。更具體來說,對于特定子編碼單元SCU(to)而言,其他編碼單元(例如編碼單元CUADj(to))的一個子編碼單元為上述其他編碼單元中最接近的子編碼單元,并且上述預處理模塊可利用其他編碼單元(例如編碼單元CUADj(to))中的最接近子編碼單元的運動向量來作為特定子編碼單元SCU( to)的指定的運動向量。上述指定一個編碼單元或者一個子編碼單元的運動向量主要用來作為其他編碼單元或者子編碼單元的一個參考運動向量,而并非一定用來運動預測。
[0057]如圖6所示,對于編碼單元CU(to)(例如當前處理區塊)而言,本實施方式中的臨近編碼單元{CUADj(to)}可包含至少一部分的已編碼左區塊CBl、已編碼上區塊CBln已編碼右上區塊CBur、以及已編碼左上區塊CBul,其中上述已編碼區塊CBl、CBu、CBur以及CBul中的子編碼單元可視為子區塊。為了獲得更好的補償效果,已編碼左區塊CBl中的最右列的子編碼單元的運動向量y1、y2、y3、y4、y5、y6、y7以及y8分另Il標示在最右列的子編碼單元中。相似地,已編碼上區塊0311中的最低行的子編碼單元的運動向量11^2、13、14、15、16、17以及18分別標示在最低行的子編碼單元中。此外,已編碼右上區塊CBur的右底子編碼單元的運動向量d以及已編碼左上區塊CBul的左底子編碼單元的運動向量X9分別標示其中。
[0058]依據本實施方式,上述預處理模塊接收包含多個子編碼單元{SCU(to)}的編碼單元CU(to),并且解析編碼單元CU(to)的數據,以及依據預先決定準則指定多個子編碼單元{SCU( to)}中的特定子編碼單元SCU(to)的參考運動向量,其中上述參考運動量是用來被至少一其他子編碼單元參考,而并非用于特定子編碼單元SCU(to)的運動向量預測。利用參考運動向量,上述預處理模塊可快速操作,而不需要等待特定子編碼單元SCU(to)的實際運動向量的復雜的計算。具體來說,上述預處理模塊可指定上述參考運動向量為臨近編碼單元的至少一部分的運動向量。更確切地說,上述臨近編碼單元的至少一部分可為上述臨近編碼單元中的最接近特定子編碼單元的一部分。
[0059]舉例來說,假設上述特定子編碼單元SCU(to)代表當前處理區塊中某一行(row)子編碼區塊的第j個子編碼區塊,其中j在I至8之間變化。在第一指定準則(例如垂直指定)中,上述預處理模塊可利用已編碼上區塊CBu中的最接近子編碼單元的運動向量Xj來作為特定子編碼單元SCU (to)的參考運動向量。
[0060]在另一實施方式中,假設上述特定子編碼單元SCU(to)代表當前處理區塊中某一列子編碼區塊的第j個子編碼區塊,其中j在I至8之間變化。在第二指定準則(例如水平指定)中,上述預處理模塊可利用已編碼左區塊CBl中的最接近子編碼單元的運動向量^來作為特定子編碼單元SCU (to)的參考運動向量。
[0061]在另一實施方式中,可選擇混合指定(hybrid designat1n)準則來決定上述參考運動向量。假設上述特定子編碼單元SCU(to)代表當前處理區塊中第4/8行子編碼區塊的第j個子編碼區塊,其中j在I至8之間變化。參見圖6中箭頭所指向的第4/8行子編碼區塊的第j個子編碼區塊,上述預處理模塊可利用已編碼上區塊CBu中的最接近子編碼單元的運動向量Xj來作為特定子編碼單元SCU(to)的參考運動向量。此外,假設上述特定子編碼單元SCU(to)代表當前處理區塊中第4/8列子編碼區塊的第j個子編碼區塊,其中j在I至7之間變化。參見圖6中箭頭所指向的第4/8列子編碼區塊的第j個子編碼區塊,上述預處理模塊可利用已編碼左區塊CBl中的最接近子編碼單元的運動向量^來作為特定子編碼單元SCU(to)的參考運動向量。在此實施方式中,編碼單元CU( to)中的剩余子編碼單元的參考運動向量可利用上述任意實施方式的相同或者相似方法來獲得。在此不再贅述。
[0062]需注意的是,在上述實施方式的一些變型中,上述預處理模塊可利用旗標(flag)來控制上述操作,更準確地說,可利用明確地發出一個旗標來控制上述操作。舉例來說,依據一或多個實施方式所實施的編碼器可發出指示上述指定準則為“垂直指定”還是“水平指定”(甚至為“混合指定”)的旗標,從而通過接收攜帶上述旗標的比特流,相應地解碼器可了解所應用的指定準則。
[0063]此外,在一些實施方式中,上述多種運動向量指定方法(例如“垂直指定”、“水平指定”以及“混合指定”)可用來執行局部運動向量推導。舉例來說,當應用“垂直指定”時,每一行子編碼單元的運動向量可由已編碼上編碼單元CBu的相應位置(例如已編碼上編碼單元CBu中的最接近子編碼單元)來分別獲得。
[0064]本發明的優勢在于編碼器與解碼器可適當地執行局部運動向量推導,更準確地說,本發明可通過預先決定準則自多個子編碼單元的多個運動向量中選擇一個運動向量來獲得較好的壓縮性能。通過利用本發明的方法與相應裝置,運動向量預測操作與運動補償操作可不引入相關的困擾(例如較低的編碼效率)。
[0065]以上所述僅為本發明的較佳實施方式,凡依本發明權利要求所做的均等變化與修飾,都應屬本發明的涵蓋范圍。
【主權項】
1.一種在編碼單元的視頻編碼過程中執行局部運動向量推導的方法,上述方法包含: 接收上述編碼單元,其中上述編碼單元包含多個子編碼單元; 解析上述編碼單元的數據;以及 依據預定準則指定上述編碼單元的特定子編碼單元的參考運動向量,其中上述參考運動向量是用來供給至少一其他子編碼/編碼單元參考,并且并非使用上述參考運動向量來進行上述特定子編碼單元的運動向量預測。2.根據權利要求1的方法,其特征在于,上述依據預定準則指定上述編碼單元的特定子編碼單元的參考運動向量的步驟更包含: 指定上述參考運動向量為臨近編碼單元的至少一部分的運動向量。3.根據權利要求2的方法,其特征在于,上述臨近編碼單元的上述至少一部分是在上述臨近編碼單元中最接近上述特定子編碼單元的部分。4.根據權利要求1的方法,其特征在于,上述依據預定準則指定上述編碼單元的上述特定子編碼單元的上述參考運動向量的步驟更包含: 指定上述參考運動向量為定義在H.264標準中的運動向量預測子。5.—種在編碼單元的視頻編碼過程中執行局部運動向量推導的方法,上述方法包含: 處理上述編碼單元中的多個子編碼單元; 依據預定準則推導上述編碼單元的特定子編碼單元的參考運動向量并指定上述參考運動向量,其中上述參考運動向量是用來供給至少一其他子編碼/編碼單元參考,并且并非使用上述參考運動向量來進行上述特定子編碼單元的運動向量預測;以及 依據上述參考運動向量執行上述至少一其他子編碼/編碼單元的運動向量預測。6.根據權利要求5的方法,其特征在于,上述依據預定準則指定上述編碼單元的特定子編碼單元的參考運動向量的步驟更包含: 指定上述參考運動向量為臨近編碼單元的至少一部分的運動向量。7.根據權利要求6的方法,其特征在于,上述臨近編碼單元的上述至少一部分是在上述臨近編碼單元中最接近上述特定子編碼單元的部分。8.根據權利要求6的方法,其特征在于,上述依據預定準則指定上述編碼單元的上述特定子編碼單元的上述參考運動向量的步驟更包含: 指定上述參考運動向量為定義在H.264標準中的運動向量預測子。9.根據權利要求6的方法,其特征在于,指定上述參考運動向量的上述預定準則由比特流中發送的旗標指示。
【文檔編號】H04N19/176GK105872558SQ201610395363
【公開日】2016年8月17日
【申請日】2011年4月11日
【發明人】林建良, 蔡玉寶, 雷少民
【申請人】聯發科技股份有限公司