HEVC視頻編碼框架
HEVC編碼框架與H.26X標准的編碼框架類似,均采用基於塊的混合模型。
圖1 HEVC編碼框架
如上圖所示,HEVC編碼器的工作過程為:
1.首先,視頻編碼器將輸入視頻圖像划分為互不重疊的編碼單元。
2.再進行預測編碼,主要利用視頻的空間相關性和時間相關性,分別采用幀內預測和幀間預測去除時空域冗余信息,從而得到預測圖像塊。
3.然后將預測圖像塊與原始圖像塊作差得到預測殘差塊,再對預測殘差進行離散余弦變換(DCT)和量化,獲得量化的DCT系數。
4.最后對量化后的DCT系數進行熵編碼,得到壓縮碼流。
HEVC融入了許多關鍵技術以提高性能,例如基於四叉樹划分編碼單元,預測方向更精細的幀內預測技術,采用運動合並技術和先進運動矢量預測模式的幀間預測技術,高精度運動補償技術,用於改善重構圖像質量的去方塊濾波和像素自適應補償技術等。
HEVC編碼單元
HEVC編碼單元的概念和作用與H.264中的宏塊相同,只是HEVC種編碼快的分割更加靈活。編碼單元CU采用四叉樹結構,首先將一幀圖像分成若干個一定大小互不重疊的矩形塊,每一個塊即為最大編碼單元(LCU)。每個LCU又可以分為從64*64到8*8不同大小的CU,且對CU的最大/最小值在配置文件中還可以修改。
CU采用四叉樹的分割方式,具體的分割過程用兩個變量進行標記:分割深度(Depth)和分割標記符(Split_flag)。
圖2 LCU四叉樹分割過程
如上圖所示,LCU的大小為64*64,深度為0,用CU0表示,CU0可以分成四個大小為32*32的深度為1的編碼單元CU1,以此類推,直到可以分為深度為3的CU3則不可再分。因此,對於編碼單元CUd的大小為2N*2N,深度為d,此時若它的split_flag值為0,則CUd不再被划分;否則被分為四個大小為N*N的深度d+1的編碼單元CUd+1。
PU是預測的基本單元,規定了編碼單元的所有預測模式,其最大單元與當前的CU大小相同。HEVC中對於skip模式,幀內模式和幀間模式,PU分割大小是不同的。
圖3 預測單元PU划分方式
如上圖所示,對於skip模式,PU的大小是2N*2N。而幀內預測模式PU的大小可以為2N*2N和N*N,其中,當且僅當CU的大小為8*8時,幀內PU才可以取N*N。
幀間預測PU分割模式共有8種,主要分為兩類:對稱分割和非對稱分割。其中,2N*2N,2N*N,N*2N和N*N為4種對稱模式,2N*nU,2N*nD,nL*2N和nR*2N為4種非對稱模式,U、D、L和R分別表示上下左右,且非對稱划分形式只用於大小為32*32和16*16的CU中,對稱划分形式的N*N只用於大小為8*8的CU中。例如,2N*nU和2N*nD分別以上下1:3和3:1划分,nL*2N和nR*2N分別以左右1:3和3:1划分。
TU是變換和量化的基本單元,變換樹是由變換單元組成的四叉樹。從CU大小開始,變換單元以迭代方式四等分,是否划分成四個子塊根據語法元素split_transform_flag標定。根據迭代划分的深度不同,其大小可以是32*32,16*16,8*8和4*4中的一個。在序列參數集中可以設定變換單元的最大/最小值。
圖4 變換單元TU划分方式
如上圖所示,TU的最大划分深度為3,其大小可以大於PU但不能超過CU。當PU為正方形時,TU采用正方形變換,且當PU為長方形時,TU采用長方形變換,其大小可以是32*8,8*32,16*4和4*16中的一個。
預測編碼
HEVC預測編碼相對於H.264有較大改進,使其更適用於高效編碼。預測編碼是基於前后兩幀或同一圖像的相鄰像素存在的相關性,利用當前幀和一組預測系數,推測出下一幀圖像,也可以利用周圍像素推測出當前像素。然后將實際值和預測值作差,對差值進行編碼,從而去除冗余。預測編碼分為幀內預測和幀間預測,下面分別進行介紹。
幀內編碼
幀內預測從H.264開始使用,4*4亮度塊的幀內預測有9種預測模式,16*16亮度塊的幀內預測有4種預測模式(H.264的宏塊大小?)。HEVC沿用H.264幀內預測的思路,但對其進行擴展。
圖5 幀內預測33種方向
如上圖所示,HEVC采用35種幀內預測模式,其中包括DC模式、33種角度模式和Planar模式。HEVC對幀內預測模式的選擇過程更細致,不同大小的PU對應不同的預測模式。這使得幀內預測更加精確,且能減少空間冗余。幀內預測具體過程如下:
1.首先遍歷所有的預測模式,計算各個模式下預測的SAD(定義?)並由小到大排序。
2.SAD最小的一組預測模式作為該預測模式的子集。
3.確定預測子集后,判斷該PU左和上已經編碼像素塊的方向是否在子集內,若不在則將該模式加入子集。
4.最后對子集中的所有預測模式進行率失真優化(RDO)。
表1 不同大小塊對應的不同模式個數
如上表所示,HEVC中預測單元大小不同,則預測模式數也不同,最終的預測子集個數也不同。
幀間編碼
HEVC幀間預測提出了運動合並技術、先進運動矢量預測等新工具來提高編碼效率。幀間預測模式分為skip模式、運動合並技術(merge模式)、先進運動矢量預測技術(AMVP)。其中,skip模式是merge中的一種特殊模式,其區別在於傳輸時不需要傳殘差信息和MV信息。下面對幀間預測模式分別進行介紹。
merge模式
merge模式采用相鄰PU塊的運動信息估計當前PU塊的運動信息,編碼器從時空域相鄰PU塊構成的參考列表中選擇出最優的運動信息,並將其傳到解碼端。
圖6 merge模式運動參數候選列表構建過程
如上圖所示,候選列表主要包括兩個子集,空域候選列表和時域候選列表,總個數為MaxNumMergeCand(在片頭?中顯示輸出,且默認值為5)。
圖7 運動合並空域候選位置
如上圖所示,空域候選列表從5個空間相鄰塊位置進行選取,選取的順序為A1->B1->B0->A0->(B2)。其中,B2只有在A1,B1,B0和A0中有一個不存在或幀內預測(35種模式?)的情況下才可以使用。
圖8 N*2N和2N*N第二個PU的相鄰候選位置
為了防止虛化(指什么),對於N*2N,nL*2N和nR*2N模式的第二個PU的候選位置A1是不可用的,這種情況下的選取順序為B1->B0->A0->B2。同理,對於2N*N,2N*nU和2N*nD模式第二個PU的候選位置B1是不可用的,這種情況下的選取順序是A1->B0->A0->B2。例如上圖所示。
圖9 用於時域運動合並的縮放式預測運動矢量
如上圖所示,對於時域候選子集的推導過程為:
1.首先當前預測單元(curr_PU)從參考隊列中找出和它所處圖像(curr_pic)的POC序列差值最小的參考圖像(col_pic),以及curr_pic的參考圖像(curr_ref)。
2.其次從參考圖像col_pic中找出兩個預測位置作為候選位置,並從兩個位置中選擇一個作為參考預測單元(col_PU)。
3.最后根據當前預測單元和參考圖像的POC距離tb,以及col_pic和col_ref的POC距離td,對時域預測單元col_PU的運動矢量進行縮放,從而得到當前預測單元的預測矢量。
圖10 時域運動合並候選位置C3和H
如上圖所示,col_PU的位置從C3和H中進行選擇。一般情況下首先考慮H位置,當H位置不存在或編碼模式使用的是幀內預測(35種?),或者超出了CTU(全稱,與CU關系?)的邊界時,選擇C3位置。
AMVP技術
AMVP技術和merge模式預測過程部分相似,也是利用空域和時域相鄰塊的運動信息預測當前PU塊的運動信息。AMVP技術利用周圍信息估計當前編碼塊運動信息的過程和merge模式相同,包括候選列表的構建過程和最優運動矢量的選擇過程,只是候選數目不同,
圖11 AMVP候選列表構建流程
如上圖所示,AMVP候選列表構建流程中空域的5個位置和merge模式下空域的5個位置完全相同,但最終選擇的是兩個最優位置,其中一個來自上邊塊,另一個來自左邊塊。而時域運動矢量的選取是利用兩個不同預測方向的時域相鄰預測單元的運動矢量作為測量值,並選取最優的一個作為時域運動矢量。當時域和空域候選子集選取完成后,首先去除重復的運動矢量,其次檢查運動矢量的總數是否為2,若大於2則保留前兩個即去除索引值大於1的,若小於2則添加零運動矢量。
空域運動矢量最多有2個預測運動矢量,是從圖7中5個位置中選取的。預測運動矢量選取順序為:
1.左相鄰塊:A0->A1->縮放的A0->縮放的A1。
2.上相鄰塊:B0->B1->B2->縮放的B0->縮放的B1->縮放的B2。
左候選子集和上候選子集均有四種處理預測運動矢量的方式,且可以划分為兩類:運動矢量不縮放情形和運動矢量縮放情形。而且總是先處理不縮放情形,再處理縮放情形。對於兩種情形的規定如下:
1.不需要縮放的情形:
(1)使用同一個參考列表,同一個參考圖像索引。
(2)使用不同參考列表,同一個參考圖像索引。
2.需要縮放的情形:
(1)同一個參考列表,不同參考圖像索引。
(2)不同參考列表,不同參考圖像索引。
因此,具有相同圖像參考索引的不需要進行縮放操作,其他情況要進行縮放操作。時域運動矢量候選的選取方式與merge模式的時域候選方式相同,且對於空域縮放過程和時域縮放過程相同。
變換編碼
變換編碼是將空間的圖像變換到頻域,產生相關性很小的變換系數,並對其進行編碼壓縮。HEVC采用自適應的變換編碼技術,其沿用了H.264的自適應塊大小變換技術(ABT),並在此基礎上進行擴展和改進。
HEVC變換大小更靈活,采用更大的塊和非正方形變換。例如,在H.264的4*4和8*8變換基礎上,增加了16*16,32*32,16*4,4*16,32*8和8*32的變換大小。同時,HEVC又增加了基於模式方向的掃描技術(MDCS),該技術主要針對幀內編碼塊,根據幀內編碼塊預測模式的水平或垂直相關性決定當前變換系數的掃描順序。
圖12 8*8變換塊掃描方式
如上圖所示,對於幀內4*4和8*8變換塊的掃描方式主要分為對角掃描,水平掃描和垂直掃描。
熵編碼
HEVC視頻編碼標准中只采用一種熵編碼器,即基於上下文的自適應二進制算數編碼器(CABAC),且去除了基於上下文的自適應可變長編碼(CAVLC)。
圖13 熵編碼流程
如上圖所示,HEVC的CABAC熵編碼流程與H.264基本類似。主要包括:二進制化,文本模型選擇,概率估計和二進制算術編碼,但HEVC在概率估計精確度和自適應速度加快等方面進行了改進。
重構圖像后處理技術
為降低重建圖像和原始圖像之間的失真程度,HEVC對重構圖像進行后處理,包括去方塊濾波和像素自適應補償技術。其中,SAO是HEVC新增技術,主要對重構圖像基於像素進行補償以減小重建圖像和原始圖像之間的差異。
去方塊濾波
HEVC的去方塊濾波與H.264類似,但由於HEVC中TU的大小可以大於PU,因此不能像H.264選擇塊邊界,而是從TU和PU中選擇較小的邊界進行濾波。而且為了降低負責讀,其不對4*4塊邊界進行濾波。
圖14 去方塊濾波流程
如上圖所示,邊界濾波分為三種情況:不進行濾波,弱濾波和強濾波。且濾波類型由邊界強度BS,閾值β和tc決定。
像素自適應補償
SAO在去方塊濾波后執行,是HEVC新增的編碼技術。SAO是以LCU為單元,對每個LCU經過去方塊濾波后的重建像素進行自適應補償,從而減小重建圖像的失真。SAO分為兩類:邊帶補償(BO)和邊界補償(EO)。
圖15 BO補償
如上圖所示,BO首先將亮度等級(0-255)分成32個條帶,然后統計一個LCU內的像素分別落入每個條帶的數目。對32個條帶,每四個為一組,其左邊界標記為起始位置。計算出連續4個條帶應該補償的值,對LCU中的像素進行補償,最后進行RDO,選擇RDO最小的4連續條帶進行補償。
圖16 EO補償的四類方向
如上圖所示,EO主要是對圖像的輪廓進行補償,其補償方向主要分為四類,其中每一類又可以分成圖17中的四種情況。統計出每種情況下的補償值,按照像素所屬類型以LCU為單位基於像素進行補償。
圖17 EO補償每一類方向的四種情況
總結:HEVC對H.264關鍵技術進行了改進,並引入了新技術,提高了視頻編碼效率,同時適用於高清視頻序列的編碼壓縮。