H.265 (HEVC) vs H.264 (AVC) Compression: Explained!
康橋科技 —— 白光攝影機專業廠商! |
維基百科
高效率視訊編碼(High Efficiency Video Coding,簡稱HEVC)是一種視訊壓縮標準,被視為是ITU-T H.264/MPEG-4 AVC標準的繼任者。
2004年開始由ISO/IEC Moving Picture Experts Group(MPEG)和ITU-T Video Coding Experts Group(VCEG)作為ISO/IEC 23008-2 MPEG-H Part 2或稱作ITU-T H.265開始制訂。
第一版的HEVC/H.265視訊壓縮標準,在2013年4月13日被接受為國際電信聯盟(ITU-T)的正式標準。HEVC被認為不僅提昇影像品質,同時也能達到H.264/MPEG-4 AVC兩倍之壓縮率(等同於同樣畫面品質下位元率減少了50%),可支援4K解析度甚至到超高畫質電視(UHDTV),最高解析度可達到8192×4320(8K解析度)。
數個基於HEVC延伸的編碼標準正在進行中,包含range extensions(支援進階的影片格式)、可調式編碼和3D視訊編碼標準。
發展歷史
標準制訂
‧2004年:Key Technical Areas(KTA)
在H.264/AVC標準制定完(2003年)的後一年,VCEG組織便開始研究更先進的視訊壓縮技術,期望能夠發展下一代視訊壓縮標準,或期望能大量提昇壓縮率成為H.264/AVC的延伸版。
2005年1月,VCEG開始將這些議題統整稱為Key Technical Areas(KTA),並且開發了一個同名的軟體編解碼器KTA Software來評估被提案的新技術。KTA software是基於H.264/AVC的標準參考軟體Joint Model(JM上,加入新的編碼技術並與JM的編碼效率做比較。到了2007年,KTA Software的編碼效率較JM提升了不少。
2005年1月,VCEG開始將這些議題統整稱為Key Technical Areas(KTA),並且開發了一個同名的軟體編解碼器KTA Software來評估被提案的新技術。KTA software是基於H.264/AVC的標準參考軟體Joint Model(JM上,加入新的編碼技術並與JM的編碼效率做比較。到了2007年,KTA Software的編碼效率較JM提升了不少。
‧JCT-VC
為此目的MPEG與VCEG聯合成立了一個Joint Collaborative Team on Video Coding(JCT-VC)作為共同開發HEVC的團隊。。並每四個月進行一次標準討論與制定的會議。並發布了HEVC的標準參考軟體HEVC Test Model(HM)。
規格書時程
HEVC標準(第一個版本)制訂的時程如下:
‧ 2012年2月:Committee Draft(complete draft of standard)
‧ 2012年7月:Draft International Standard
‧ 2013年1月:Final Draft International Standard and ITU-T Consent
技術細節
HEVC與H.264/AVC和許多其他視訊壓縮編碼一樣,都是採用Hybrid Video Coding的架構(如右圖),但在各部分加入了一些新技術,或者提升了原本編碼工具的效率。
編碼樹單元(Coding Tree Block)
編碼樹單元(Coding Tree Block, CTU)是HEVC的基本編碼單位,有如H.264/AVC的Macroblock。HEVC支援8x8到64×64像素的CTU大小。編碼樹單元可向下分割編碼單元(Coding Unit,CU)、預測單元(Prediction Unit,PU)及轉換單元(Transform Unit,TU)。
編碼樹單元(英語:Coding Tree Unit,縮寫:CTU)是H.265/高效率視訊編碼(High Efficiency Video Coding, HEVC)的處理單元。此處理單元類似H.264/高階視訊編碼(Advanced Video Coding, AVC)中的宏區塊(Macroblock)。編碼樹單元的大小,可以從16x16到64x64,使用比H.264更大的處理單元得到更好的壓縮效果。
圖一、編碼樹單元與編碼樹區塊的關係圖。 |
輸入影像進行編碼前,會先切割成相等大小的編碼樹單元,再輸入編碼器進行編碼,接著詳細介紹編碼樹單元的相關概念。首先解釋單元(Unit)與區塊(Block),區塊是真正儲存資料的地方,許多區塊加上語法元素組成一個單元。
輸入影像採用YUV的格式,所以一個編碼樹單元是由一個亮度(Luma)編碼樹區塊(Coding Tree Block,CTB)、兩個色度(Chroma)編碼樹區塊及語法元素(Syntax Element)。由於輸入影像採用4:2:0的取樣方式,因此亮度編碼樹區塊的大小,為色度編碼樹區塊的四倍,如圖一所示。
輸入影像採用YUV的格式,所以一個編碼樹單元是由一個亮度(Luma)編碼樹區塊(Coding Tree Block,CTB)、兩個色度(Chroma)編碼樹區塊及語法元素(Syntax Element)。由於輸入影像採用4:2:0的取樣方式,因此亮度編碼樹區塊的大小,為色度編碼樹區塊的四倍,如圖一所示。
編碼樹單元與AVC的宏區塊最大的不同,之為編碼樹單元可以變得更大,且大小可以調整,而宏區塊的大小固定為16。
HEVC的編碼樹單元支援更大的大小,可以讓編碼器對高解析度的影像編碼時更有效率。編碼樹單元的大小定義在序列參數集(Sequence Parameter Set, SPS)內,高效率視訊編碼內支援的大小為LxL,其中L=16、32或64。
除了編碼樹單元,高效率視訊編碼(HEVC)中還有另外三種單元分別為編碼單元(Coding Unit, CU)、預測單元(Prediction Unit, PU)及轉換單元(Transform Unit, TU)。下面小節將詳細介紹另外三種單元以及所有單元間的關係。
編碼單元
編碼樹單元(CTU)可以包含有一個編碼單元(Coding Unit, CU)或是切割成多個較小的編碼單元,如圖二(左)所示。高效率視訊編碼,利用編碼單元指出這個單元,是利用畫面內預測(Intra Prediction)或是畫面間預測(Inter Prediction)。
這些編碼單元可以很方便地,利用四分樹(Quadtree)的方式呈現,如圖二(右)所示。四分樹是一種遞迴結構,四分數上的數字,表示這個節點是否繼續做分割,若此節點會繼續分割則為1,若不繼續分割則為0。
由圖二可看出節點上的數字為0時,此節點為編碼單元。換句話說,在編碼樹內葉子節點(Leaf Node)為編碼單元。編碼樹的順序如圖三左的虛線所示,在編碼單元上採用Z-scan的方式,對編碼樹來說即為深度優先遍歷。
編碼單元的大小支援2Nx2N,其中N=4、8、16或32,因此高效率視訊編碼(HEVC)的四分樹最高深度(Depth)為4。
這些編碼單元可以很方便地,利用四分樹(Quadtree)的方式呈現,如圖二(右)所示。四分樹是一種遞迴結構,四分數上的數字,表示這個節點是否繼續做分割,若此節點會繼續分割則為1,若不繼續分割則為0。
由圖二可看出節點上的數字為0時,此節點為編碼單元。換句話說,在編碼樹內葉子節點(Leaf Node)為編碼單元。編碼樹的順序如圖三左的虛線所示,在編碼單元上採用Z-scan的方式,對編碼樹來說即為深度優先遍歷。
編碼單元的大小支援2Nx2N,其中N=4、8、16或32,因此高效率視訊編碼(HEVC)的四分樹最高深度(Depth)為4。
基本介紹
一個編碼單元(CU)可以根據預測模式的切割類型(Splitting Type)分割成一個、兩個或是四個預測單元(Prediction Units, PUs)。編碼單元與預測單元的不同之處,在於預測單元只能被切割一次,而且是基於編碼單元做切割。
預測單元是一個預測資訊的呈現區塊,在一個預測單元內使用同預測方式(Prediction Process)。高效率視訊編碼依照不同的預測模式將編碼單元分成三類,分別為以下三種,其分割方法:
‧畫面內編碼單元(Intra Coded CU):採用的預測方式為使用周圍影像做重建的取樣樣本,即畫面內預測(Intra Prediction)。畫面內編碼單元內僅允許方形(Square)的切割方法,分別為2Nx2N或NxN兩種。
以上八種方法又可分為兩大類, (a)一為方形與矩形(Square and Rectangular)切割,這種類型的切割方法所產生的區塊皆為對稱的方式,總共含括了其中四種分割,分別為2Nx2N、NxN、2NxN及Nx2N。
而另一類 (b)分割方式是相對於前一類的對稱方式來說,所有的分割會產生出兩個不對稱的區塊,因此稱為非對稱式(Asymmetric)切割,分別為2NxnU、NxnD、nLx2N及nRx2N(nX:表示較短的邊的位置)。
這種非對稱式的切割對於輪廓或是物件邊緣的分割可以達到較好的分割效果,如圖四的Racinghorse範例所示。
‧略過的編碼單元(Skipped CU):此為畫面間編碼單元的特例,意指移動向量差值(Motion Vector Difference)與殘餘能量(residual energy)皆為零。略過的編碼單元內只允許2Nx2N的方式。
限制
預測單元的切割在不同的預測模式,有不同的限制,討論如下:
‧畫面內編碼單元(Intra Coded CU):由於輸入影像是採用YUV4:2:0的影像格式,因此對於亮度(Luma)與色度(Chroma)的切割及大小需要討論。當亮度的畫面內預測的大小為4x4的區塊,由於區塊大小最小為4x4,因此色度區塊不會繼續切割,而繼續使用4x4方式。換句話說,每一個4x4的色度區塊,會對應到4個4x4的亮度區塊。
‧畫面間編碼單元(Inter Coded CU):為了節省記憶體頻寬,當編碼單元的大小為8x8時,畫面間的編碼單元就不採用NxN的方式做切割,在此即為4x4的區塊大小不會出現。而且不對稱分割的方式,在編碼單元的大小不等於最小時,此種切割方式才是允許的。
轉換單元
基本介紹
轉換單元是呈現殘量(Residual)或是轉換係數(Transform Coefficients)的區塊,這個區塊主要是做整數轉換(Integer Transform)或是量化(Quantization)。
轉換單元(Transform Unit, TU)與預測單元(PU)相似,因為編碼單元可以只有一個轉換單元,或是由許多個較小的轉換單元所組成。不同之處為轉換單元可以遞迴地往下繼續分割,也是用四分樹(Quadtree)的方式儲存,而預測單元只能在編碼單元做分割一次。
圖五顯示出編碼單元與轉換單元的關係,實線為編碼單元,虛線為轉換單元,虛線的四分樹會長在實線四分樹的葉子節點,這是因為只有實線四分樹的葉子節點是編碼單元。轉換單元內只有支援方形的分割方割(Square Partition),其大小為64、32、16、8、4。
預測單元是一個預測資訊的呈現區塊,在一個預測單元內使用同預測方式(Prediction Process)。高效率視訊編碼依照不同的預測模式將編碼單元分成三類,分別為以下三種,其分割方法:
而另一類 (b)分割方式是相對於前一類的對稱方式來說,所有的分割會產生出兩個不對稱的區塊,因此稱為非對稱式(Asymmetric)切割,分別為2NxnU、NxnD、nLx2N及nRx2N(nX:表示較短的邊的位置)。
這種非對稱式的切割對於輪廓或是物件邊緣的分割可以達到較好的分割效果,如圖四的Racinghorse範例所示。
轉換單元(Transform Unit, TU)與預測單元(PU)相似,因為編碼單元可以只有一個轉換單元,或是由許多個較小的轉換單元所組成。不同之處為轉換單元可以遞迴地往下繼續分割,也是用四分樹(Quadtree)的方式儲存,而預測單元只能在編碼單元做分割一次。
圖五顯示出編碼單元與轉換單元的關係,實線為編碼單元,虛線為轉換單元,虛線的四分樹會長在實線四分樹的葉子節點,這是因為只有實線四分樹的葉子節點是編碼單元。轉換單元內只有支援方形的分割方割(Square Partition),其大小為64、32、16、8、4。
圖五、編碼單元與轉換單元的關係,實線為編碼單元,虛線為轉換單元。 |
殘量四分樹
轉換單元的編碼樹可以稱為轉換樹(Transform Tree)或是殘量四分樹(Residual Quadtree, RQT)。殘量四分樹可以分成兩類,分別為方形殘量四分樹(Square Residual Quadtree, SRQT)或是非方形殘量四分樹(Nonsquare Residual Quadtree, NSRQT),但是在最後的草案中非方形殘量四分樹(NSRQT)被移除掉。圖六為非方形殘量四分樹的切割方式。
圖六、非方形殘量四分樹的切割方式。 |
限制
在相同編碼單元(CU)內的預測單元(PU)與轉換單元(TU),轉換單元的大小可以比預測單元的大小,還要來的大,在同一個編碼單元內,不同預測單元的殘量(Residuals)可以一起被轉換。
換句話說,當編碼單元的大小,等於轉換單元的大小時,轉換是對整個編碼單元去做轉換,而不是對單一的預測單元一個一個做轉換。而這種情況只會出現在畫面間編碼單元(Inter Coded CU)中,因為畫面內編碼單元(Intra Coded CU)總是會造成轉換單元(TU)分割。
影格內編碼(Intra Coding)
HEVC影格內編碼將預測的方向性增加到33種,並加入平面預測(Planar Prediction)產生平滑的取樣面。
換句話說,當編碼單元的大小,等於轉換單元的大小時,轉換是對整個編碼單元去做轉換,而不是對單一的預測單元一個一個做轉換。而這種情況只會出現在畫面間編碼單元(Inter Coded CU)中,因為畫面內編碼單元(Intra Coded CU)總是會造成轉換單元(TU)分割。
高效率視訊編碼(HEVC)中的幀內編碼(英語:Intra Coding,又稱畫面內編碼)可以視為高階視訊編碼(Advanced Video Coding,H.264/AVC)的擴展,因為他們都是利用空間上的取樣預測來編碼,而高效率視訊編碼的幀內編碼包含以下基本元素:
藉由參考樣本Rx,y得到預測樣本Px,y,區塊大小為N×N。 |
1基於四元樹(Quadtree)編碼結構
2有33種預測方向的角度預測(Angular Prediction)
3藉由平面預測(Planar Prediction)產生平滑的取樣面
4參考取樣自適應的平滑性
5過濾預測區塊邊界的樣本
6依照預測模式的殘量轉換(Residual Transform)和係數掃描(Coefficient Scanning)
7基於前後文資訊的幀內模式編碼
此外,高效率視訊編碼中的幀內編碼過程,與幀間編碼,共用部分的處理步驟,包含轉換(Transformation)、量化(Quantization)、熵編碼(Entropy Coding)、降低區塊的效應、取樣自適應偏移(Sample Adaptive Offset)。
架構
高階視訊編碼的幀內編碼,是藉由前一個解碼影像區塊,且基於空間上的樣本來推斷,而高效率視訊編碼也沿用此準則,但是更進一步擴展,至能夠有效呈現更大範圍的圖像材質,及結構的資訊。高效率視訊編碼的幀內編碼設計,基於下列考量:
1可支援的編碼區塊大小(Coding block sizes)範圍:高階視訊編碼只支援到16×16像素,不夠有效呈現高階定義的圖像。
2方向性結構預測:高階視訊編碼支援8種方向的幀內預測模式,當使用更大的區塊大小時,此數量不足以精確呈現影像和圖像的內容。
3同質區域(Homogeneous Regions)預測:高階視訊編碼的平面模式用來編碼同質的影像區域,但是此種模式不保證區塊邊界的連續性,因此需要有一種模式可以保證在取樣平面的預測為連續性。
4跨區塊大小的一致性:高階視訊編碼根據區塊大小使用不同的方法來預測區塊。在高效率視訊編碼支援更大範圍的區塊大小情況下,需要一個更一致性的設計。
5幀內編碼的轉換:對於每一區塊大小,高階視訊編碼採用固定的離散餘弦轉換(Discrete Cosine Transform),這樣的設計沒有考慮到統計不同水平和垂直方向的預測錯誤。
6幀內模式編碼(Intra Mode Coding):高效率視訊編碼大幅增加編碼模式,因此需要更有效率的編碼技術。
幀內編碼使用的編碼結構,遵循邊高效率視訊編碼的編解碼器架構,圖像會由編碼樹單元分割為數個(或不分割)編碼單元、預測單元、轉換單元,因為高效率視訊編碼包含上列,提及的數種改善幀內編碼的方式,因此可逐漸改變取樣值,使得不同方向的結構和區域更精準,而且藉由參考樣本的自適應平滑性和使直流(DC)、垂直、水平模式產生的預測邊界樣本平滑,可避免分區塊編碼所造成的邊緣效應。
所有預測模式皆使用相同集合的參考樣本(Reference Samples),而這些參考樣本位於影像區塊的左側及上側,在此定義參考樣本為Rx,y,預測樣本(Predicted samples)為Px,y,如圖一所示。
位於圖片或片(Slice)的邊界,或是被限制的編碼單元邊界,附近的參考樣本可能無法使用,此時左邊界的遺漏參考樣本,會由最近下面的參考樣本產生,若是下邊沒有參考樣本,則使用上邊的參考樣本;
相同地,上邊界的遺漏參考樣本,會由最近左邊的參考樣本產生;若是沒有任何參考樣本可以使用,則所有樣本被指定為位元深度的平均值。
高效率視訊編支援35種幀內預測模式,包含平面、直流、以及角度,幀內預測模式0為平面幀內預測,模式1為直流預測,模式2至34為角度預測模式,如圖二所示。
相同地,上邊界的遺漏參考樣本,會由最近左邊的參考樣本產生;若是沒有任何參考樣本可以使用,則所有樣本被指定為位元深度的平均值。
高效率視訊編支援35種幀內預測模式,包含平面、直流、以及角度,幀內預測模式0為平面幀內預測,模式1為直流預測,模式2至34為角度預測模式,如圖二所示。
圖二、角度幀內預測模式。 |
角度幀內預測
高效率視訊編碼的角度幀內預測,被設計成可以有效支援多種不同的方向結構,特別是針對影像及圖片內容,會選擇特定的幀內預測模式數量,以及角度,是為了在編碼複雜度,和編碼效率中,取得平衡。
因此樣本的預測程序,會被設計成符合低運算量,以及維持跨區塊大小間,及預測方向的一致性,也就是說可以最小化硬體,實現上的晶片面積,或是軟體實踐上的代碼數量,以及更容易在不同環境下,優化成高效率及高處理能力(Throughput)。
在高效率視訊編碼中,共有4種有效的幀內預測區塊大小-4×4至32×32,以及33種角度幀內預測模式,因此解碼器必須支援132種區塊大小和預測方向的組合。
角度定義(Angle Definitions)
對一般圖片而言,垂直和水平的圖形發生的頻率,會比其他方向的圖形更高,這33種預測角度,是根據觀察而定義出最佳化精準度的集合,四分圓包含8個預測角度,如圖二所示。
對於垂直和水平的方向,有著小偏移參數,可以提供垂直和水平圖形更精確的預測,越靠近對角線,預測方向的偏移係數越大,對於使用頻率較小的圖形,可以有效減少預測模式的密度。
對於垂直和水平的方向,有著小偏移參數,可以提供垂直和水平圖形更精確的預測,越靠近對角線,預測方向的偏移係數越大,對於使用頻率較小的圖形,可以有效減少預測模式的密度。
參考像素處理(Reference Pixel Handling)
高效率視訊編碼的幀內樣本預測過程,是由重建的參考樣本,以及固定方向推斷,為了簡化過程,根據選定的預測模式,在一個預測區塊內的所有樣本,會被投影至單一的參考行或列,預測模式2至17會採用左邊的參考行,預測模式18至34則會使用上方參考列。
在一些情況下,被投影的像素位於負的座標軸上,此時參考的行或列,會藉由投影左邊參考行至上方參考列,或投影上方參考列,至左邊參考行來擴展,這樣的方法只會造成,壓縮表現一點可被忽略的影響。圖三描述擴展左邊參考行,至上方參考列。
在一些情況下,被投影的像素位於負的座標軸上,此時參考的行或列,會藉由投影左邊參考行至上方參考列,或投影上方參考列,至左邊參考行來擴展,這樣的方法只會造成,壓縮表現一點可被忽略的影響。圖三描述擴展左邊參考行,至上方參考列。
圖三、擴展左邊參考行至上方參考列,此為8×8像素的區塊。 |
任意數量方向的樣本預測(Sample Prediction for Arbitrary Number of Directions)
假設每一預測樣本Px,y由參考列投影而來,以及使用差值法得到1/32像素精準度,如下
Px,y = ((32 - Wy).Ri,0 + Wy.Ri+1,0 + 16) >> 5 (1)
Wy為兩參考樣本Ri,0和Ri+1,0的權重,>>代表位元向右位移,參考樣本索引i和Wy藉由投影位移d、選擇的預測方向計算,而投影位移d範圍是-32至32,&代表對每位元作按位與(AND)計算。
Cy = (y.d) >> 5
Wy = (y.d) & 31
i = x + cy (2)
公式(1)和(2)定義在預測模式18至34,如何獲得預測樣本值,而在預測模式2至17,也是相同的推導方式,只要替換公式中的x和y。
平面預測(Plana Prediction)
當邊緣出現時,雖然提供一有效的預測很重要,不是所有的圖像內容,會符合邊緣模型(Edge Model),因此提供直流預測(DC Prediction)此一替換的模式,此模式致力於保持區塊邊界的連續性,其值為兩線性預測的平均,如下:
PVx,y = (N - y). Rx,0 + y.R0,N+1
PHx,y = (N - y).R0,y + x.RN+1,0
Px,y = (PVx,y + PHx,y) >> (log2(N) + 1)
參考樣本平滑濾波
高階視訊編碼對於8×8的預測亮度區塊,採用三階平滑濾波器(Three-tap Smoothing Filter),而高效率視訊編碼對於8×8,及更大的預測亮度區塊,也採用相同的濾波器,第一個參考樣本R0,2N和R2N,0不被過濾;對於32×32大小的區塊,除了垂直和水平的所有角度模式,皆使用一個過濾參考;在16×16大小的區塊,這些不使用一個過濾參考的模式,增加至4個模式(9、11、25、27),包含很接近水平和垂直的模式;此外,平滑濾波也使用在平面模式。
根據選擇的區塊大小及預測方向,採用參考樣本平滑濾波,可以減少編碼造成的邊緣輪廓。
影格間編碼(Inter Coding)
運動補償是一種描述相鄰幀(相鄰在這裡表示在編碼關係上相鄰,在播放順序上兩幀未必相鄰)差別的方法,具體來說是描述前面一幀(相鄰在這裡表示在編碼關係上的前面,在播放順序上未必在當前幀前面)的每個小塊,怎樣移動到當前幀中的某個位置去。
這種方法經常被視頻壓縮/視頻編解碼器,用來減少視頻序列中的時域冗餘。它也可以用來進行去交織(deinterlacing)以及運動插值(motion interpolation)的操作。
一個視頻序列包含一定數量的圖片--通常稱為幀(frame)。相鄰的圖片通常很相似,也就是說,包含了很多冗餘。使用運動補償的目的,是通過消除這種冗餘,來提高壓縮比。
最早的運動補償的設計,只是簡單的從當前幀中減去參考幀,從而得到通常含有較少能量(或者稱為訊息)的"殘差",從而可以用較低的碼率進行編碼。解碼器可以通過簡單的加法,完全恢復編碼幀。
一個稍微複雜一點的設計,是估計一下整幀場景的移動,和場景中物體的移動,並將這些運動,通過一定的參數編碼到碼流中去。這樣預測幀上的像素值,就是由參考幀上具有一定位移的相應像素值而生成的。
這樣的方法比簡單的相減,可以獲得能量更小的殘差,從而獲得更好的壓縮比--當然,用來描述運動的參數不能在碼流中占據太大的部分,否則就會抵消複雜的運動,估計帶來的好處。
通常,圖像幀是一組一組進行處理的。每組的第一幀(通常是第一幀)在編碼的時候不使用運動估計的辦法,這種幀稱為幀內編碼幀(Intra frame)或者I幀。該組中的其它幀使用幀間編碼幀(Inter frame),通常是P幀。這種編碼方式通常被稱為IPPPP,表示編碼的時候第一幀是I幀,其它幀是P幀。
在進行預測的時候,不僅僅可以從過去的幀,來預測當前幀;還可以使用未來的幀,來預測當前幀。當然在編碼的時候,未來的幀,必須比當前幀更早的編碼,也就是說,編碼的順序和播放的順序是不同的。
通常這樣的當前幀,是使用過去和未來的I幀,或者P幀,同時進行預測,被稱為雙向預測幀,即B幀。這種編碼方式的編碼順序的一個例子為IBBPBBPBBPBB。
全局運動補償
在全局運動補償中,運動模型基本上就是反映攝影機的各種運動,包括平移,旋轉,變焦等等。這種模型特別適合對沒有運動物體的靜止場景的編碼。 全局運動補償有下面的一些優點:
‧該模型僅僅使用少數的參數,對全局的運行進行描述,參數所占用的碼率基本上可以忽略不計。
‧該方法不對幀進行分區編碼,這避免了分區造成的塊效應。
‧在時間方向的一條直線的點,如果在空間方向具有相等的間隔,就對應了在實際空間中,連續移動的點。其它的運動估計算法,通常會在時間方向引入非連續性。
但是,缺點是,如果場景中有運動物體的話,全局運動補償就不足以表示了。這時候應該選用其它的方法。
分快運動補償
在分塊運動補償(BMC for block motion compensation)中,每幀被分為若干像素塊(在大多數視頻編碼標準,如MPEG中,是分為16x16的像素塊)。從參考幀的某個位置的等大小的塊,對當前塊進行預測,預測的過程中只有平移,平移的大小被稱為運動矢量。
對分塊運動補償來說,運動矢量是模型的必要參數,必須一起編碼加入碼流中。由於運動矢量之間並不是獨立的(例如屬於同一個運動物體的相鄰兩塊,通常運動的相關性很大),通常使用差分編碼來降低碼率。
這意味著在相鄰的運動矢量,編碼之前對它們作差,只對差分的部分進行編碼。使用熵編碼對運動矢量的成分進行編碼,可以進一步消除運動矢量的統計冗餘(通常運動矢量的差分集中於0矢量附近)。
運動矢量的值可以是非整數的,此時的運動補償,被稱為亞像素精度的運動補償。這是通過對參考幀像素值,進行亞像素級插值,而後進行運動補償做到的。最簡單的亞像素精度運動補償,使用半像素精度,也有使用1/4像素和1/8像素精度的運動補償算法。更高的亞像素精度,可以提高運動補償的精確度,但是大量的插值操作,大大增加了計算複雜度。
分塊運動補償的一個大缺點,在於在塊之間引入的非連續性,通常稱為塊效應。當塊效應嚴重時,解碼圖像看起來會有像馬賽克一樣的效果,嚴重影響視覺品質。
另外一個缺點是,當高頻分量較大時,會引起振鈴效應。關於高頻分量,請參見對運動補償後的殘差,進行變換的方法:變換編碼。
可變分快運動補償
可變分塊運動補償(VBSMC,全稱 Variable Block Size Motion Compensation)是BMC的變種,編碼器可以動態選擇分塊大小。進行影像編碼時,使用大的分塊,可以減少表徵運動向量所需的比特數,使用小的分塊則可以在編碼時,產生更少的預測餘量資料。
較老的設計,象H.261和MPEG-1視頻編碼,典型的使用了固定分塊,而較新的設計,像H.263、MPEG-4 Part 2、H.264/MPEG-4 AVC和VC-1則賦予了編碼器,動態選擇何種分塊來表徵運動圖像的能力。
重疊分快運動補償
重疊分塊運動補償(OBMC for Overlapped block motion compensation)是一種更好的解決方案,它不但能增加預測精度,而且能夠避免塊失真。 因此,每個像素第屬於4個分塊。基於此方案,每個像素的4個預測值求和後,得到一個加權平均數。
為此目的,分塊被關聯到一個窗口函數,該窗口函數具有任何地方的4個重疊窗口的總和為1的特質。
運動估計
運動估計,就是尋找最優或次優的運動向量的過程。某個塊的預測誤差量,常常是指在運動補償區域所有像素中,預測像素和實際像素數值的均方差,或者絕對差別總和。
發現最優向量,一個最基本的方法,是不得不為在固定探測範圍內,給每一個運動向量,計算塊的預測誤差,計算鄰近禎之中找尋前後frame之中,相似的Macro Block,兩者之間的差異值。以及估算表示此Motion Vector所需的位元數目,和在錯誤數和比特數之間,挑選一個最折中作為運動向量值。
運動估計技術,儘量簡單的測試,在執行前一個簡單的探測測試技術為:估計所有可能的運動表現,比如這樣的最優化被稱做全探測。
一個稍快但不是最優的方法,是用第一個近似值,作為一個粗略探測柵格,然後在接下來的步驟裡,在近似值的周圍精確柵格。
一個通用辦法是3步探測,用3次探測柵格;3個運動向量和3個精確步驟,來得到15次15個像素範圍內的全面探測。
對於分塊運動估計,一個塊的像素預測誤差,和它的附近搭接塊,根據此前自乘的窗函數,都被測重和求和。
分塊運動估計最主要的缺點,是增加計算的複雜性,和實際的預測誤差,因而最友向量依靠於臨近運動塊向量。
因此,沒有一個多項式(計算的複雜性)算法可以保證最優運動向量。
然而,在可接受的計算的複雜性上,存在最接近最理想疊代和非疊代方法。
轉換編碼(Transform Coding)
離散餘弦變換
根據選擇的區塊大小及預測方向,採用參考樣本平滑濾波,可以減少編碼造成的邊緣輪廓。
這種方法經常被視頻壓縮/視頻編解碼器,用來減少視頻序列中的時域冗餘。它也可以用來進行去交織(deinterlacing)以及運動插值(motion interpolation)的操作。
這樣的方法比簡單的相減,可以獲得能量更小的殘差,從而獲得更好的壓縮比--當然,用來描述運動的參數不能在碼流中占據太大的部分,否則就會抵消複雜的運動,估計帶來的好處。
通常這樣的當前幀,是使用過去和未來的I幀,或者P幀,同時進行預測,被稱為雙向預測幀,即B幀。這種編碼方式的編碼順序的一個例子為IBBPBBPBBPBB。
這意味著在相鄰的運動矢量,編碼之前對它們作差,只對差分的部分進行編碼。使用熵編碼對運動矢量的成分進行編碼,可以進一步消除運動矢量的統計冗餘(通常運動矢量的差分集中於0矢量附近)。
另外一個缺點是,當高頻分量較大時,會引起振鈴效應。關於高頻分量,請參見對運動補償後的殘差,進行變換的方法:變換編碼。
較老的設計,象H.261和MPEG-1視頻編碼,典型的使用了固定分塊,而較新的設計,像H.263、MPEG-4 Part 2、H.264/MPEG-4 AVC和VC-1則賦予了編碼器,動態選擇何種分塊來表徵運動圖像的能力。
運動估計技術,儘量簡單的測試,在執行前一個簡單的探測測試技術為:估計所有可能的運動表現,比如這樣的最優化被稱做全探測。
2d DCT(type II) 與離散傅立葉變換的比較. |
離散餘弦變換(英語:DCT for Discrete Cosine Transform)是與傅立葉變換相關的一種變換,類似於離散傅立葉變換,但是只使用實數。
離散餘弦變換,相當於一個長度大概是它兩倍的離散傅立葉變換,這個離散傅立葉變換,是對一個實偶函數進行的(因為一個實偶函數的傅立葉變換,仍然是一個實偶函數),在有些變形裡面需要將輸入或者輸出的位置,移動半個單位(DCT有8種標準類型,其中4種是常見的)。
離散餘弦變換,相當於一個長度大概是它兩倍的離散傅立葉變換,這個離散傅立葉變換,是對一個實偶函數進行的(因為一個實偶函數的傅立葉變換,仍然是一個實偶函數),在有些變形裡面需要將輸入或者輸出的位置,移動半個單位(DCT有8種標準類型,其中4種是常見的)。
最常用的一種離散餘弦變換的類型,是下面給出的第二種類型,通常我們所說的離散餘弦變換,指的就是這種。它的逆,也就是下面給出的第三種類型,通常相應的被稱為"反離散餘弦變換","逆離散餘弦變換"或者"IDCT"。
應用
這是由於離散餘弦變換,具有很強的"能量集中"特性:大多數的自然信號(包括聲音和圖像)的能量,都集中在離散餘弦變換後的低頻部分,而且當信號具有接近馬爾可夫過程的統計特性時,離散餘弦變換的去相關性,接近於K-L變換(Karhunen-Loève變換——它具有最優的去相關性)的性能。
這時對應第二種類型離散餘弦變換中的n通常是8,並用該公式對每個8x8塊的每行進行變換,然後每列進行變換。得到的是一個8x8的變換係數矩陣。其中(0,0)位置的元素就是直流分量,矩陣中的其他元素,根據其位置表示不同頻率的交流分量。
離散餘弦變換,也經常被用來使用譜方法來解偏微分方程,這時候離散餘弦變換的不同的變量,對應著數組兩端不同的奇/偶邊界條件。
形式化定義
DCT-I
一個的對實數abcde的DCT-I型變換,等價於一個8點的對實數abcdedcb(偶對稱)的DFT變換,結果再除以2(對應的,DCT-II~DCT-IV相對等價的DFT,有一個半個抽樣的位移)。需要指出的是,DCT-I不適用於的情況(其它的DCT類型都適用於所有的整數n)。
所以,DCT-I暗示的邊界條件是:相對於點偶對稱,並且相對於點偶對稱; 對的情況也類似。
DCT-II
DCT-II大概是最常用的一種形式,通常直接被稱為DCT。
所以,DCT-II暗示的邊界條件是:相對於點偶對稱,並且相對於點偶對稱; 對相對於點偶對稱,並且相對於點奇對稱。
DCT-III
因為這是DCT-II的逆變換(再乘一個係數的話),這種變形通常被簡單的稱為——逆離散餘弦變換。
所以,DCT-III暗示的邊界條件是:相對於點偶對稱,並且相對於點奇對稱; 對相對於點偶對稱,並且相對於點奇對稱。
DCT-IV
DCT-IV對應的矩陣是正交矩陣(再乘一個係數的話)。
一種DCT-IV的變形,將不同的變換的數據重疊起來,被稱為改進的離散餘弦變換。
DCT-IV暗示的邊界條件是:相對於點偶對稱,並且相對於點奇對稱;對類似。
DCT V~VIII
上面提到的DCT I~IV是和偶數階的實偶DFT對應的。原則上,還有四種DCT變換(Martucci, 1994)是和奇數階的實偶DFT對應的,它們在分母中都有一個的係數。但是在實際應用中,這幾種變型很少被用到。
最平凡的和奇數階的實偶DFT,對應的DCT是1階的DCT(1也是奇數),可以說變換隻是乘上一個係數而已,對應於DCT-V的長度為1的狀況。
反變換
DCT-I的反變換是把DCT-I乘以係數。 DCT-IV的反變換是把DCT-IV乘以係數。 DCT-II的反變換是把DCT-III乘以係數,反之亦然。
和離散傅立葉變換類似,變化前面的歸一化係數,僅僅是常規而已,改變這個係數並不改變變換的性質。例如,有些人喜歡在DCT-II變換的前面乘以,這樣反變換從形式上,就和變換更相似,而不需要另外的歸一化係數。
儘管直接使用公式進行變換,需要進行次操作,但是和快速傅立葉變換類似,我們有複雜度為的快速算法,這就是常常被稱做蝶形變換的一種分解算法。
另外一種方法是通過快速傅立葉變換來計算DCT,這時候需要的預操作和後操作。
另外一種方法是通過快速傅立葉變換來計算DCT,這時候需要的預操作和後操作。
環路濾波器(Loop Filtering)
HEVC有兩個環路濾波器,解塊濾波器(DBF)與樣本自適應偏移量(SAO)濾波器
去區塊濾波器(Deblocking Filter)
H.265/HEVC的DBF使用H.264/MPEG-4 AVC類似的設計,更好的支援並行處理是類似的。在HEVC的DBF只適用於一個8×8個採樣網格,而與H.264 / MPEG-4 AVC的DBF適用的一個4×4個採樣網格不同。
HEVC的DBF使用一個8×8個採樣網格,因為沒有導致明顯的降解,並顯著提高了並行處理,因為的DBF不再導致級聯與其他操作的相互作用。
另一個變化,是HEVC只允許為0~2的三個DBF的深度。HEVC的DBF也是的先做畫面的垂直邊緣的水平濾波之後,再做對於水平邊緣的垂直濾波,有利於平行處理(多線程)。
HEVC的DBF使用一個8×8個採樣網格,因為沒有導致明顯的降解,並顯著提高了並行處理,因為的DBF不再導致級聯與其他操作的相互作用。
另一個變化,是HEVC只允許為0~2的三個DBF的深度。HEVC的DBF也是的先做畫面的垂直邊緣的水平濾波之後,再做對於水平邊緣的垂直濾波,有利於平行處理(多線程)。
取樣自適應偏移(Sample Adaptive Offset)
在DBF之後的使用SAO過濾器,並使用偏移以產生更好地重建原始信號。每個CTB的SAO濾波器可有兩個模式:邊緣偏移模式或帶偏移模式。
邊緣偏移量模式中,通過比較的取樣的值,根據比較兩個鄰居,將樣品分為五類之一:最小,兩種邊緣,最大值,或兩者都不是,對於每個第一四類施加一個偏移量。
能帶偏移的模式可分類成32個頻帶,並選擇四個連續頻帶傳送偏移量。SAO濾波器設計,來以提高圖像品質,並減少振盪效應
邊緣偏移量模式中,通過比較的取樣的值,根據比較兩個鄰居,將樣品分為五類之一:最小,兩種邊緣,最大值,或兩者都不是,對於每個第一四類施加一個偏移量。
能帶偏移的模式可分類成32個頻帶,並選擇四個連續頻帶傳送偏移量。SAO濾波器設計,來以提高圖像品質,並減少振盪效應
熵編碼(Entropy Coding)
平行化編碼工具
切片(Slice)
方塊(Tile)
波前處理(Wavefront Processing)
編碼規範
Profile
HEVC定義了包含Main和High 2種「層級」(tiers)註:目前沒有公定譯名,以及13種「等級」(levels)註:目前沒有公定譯名。層級是被設計來面對不同的應用,對其最大位元率做限制。其中Main tier是被設計給大部分的應用,而High tier是被設計給高要求的應用。等級則是針對位元流設定了一組限制,與Profile相似。
當一個解碼器符合給定了的層級與等級,代表此解碼器也被要求必須,能解碼用該層級/等級及較低層級/等級所編碼出來的位元流。
當一個解碼器符合給定了的層級與等級,代表此解碼器也被要求必須,能解碼用該層級/等級及較低層級/等級所編碼出來的位元流。
編碼效率
視訊編碼標準 | 較之H.264/MPEG-4 AVC HP減少碼率的比例 | ||||
---|---|---|---|---|---|
480p | 720p | 1080p | 4K UHD | ||
HEVC | 52% | 56% | 62% | 64% |
沒有留言:
張貼留言