版權聲明:本文為博主原創(chuàng )文章。 https://blog.csdn.net/nonmarking/article/details/47356791
本系列文章分為三個(gè)部分,首先對HEVC標準做一個(gè)介紹,然后回顧一下H.264中的碼率控制方法,分析為什么不能直接沿用舊的方法,最后具體分析HEVC的碼率控制方法和相應代碼。
HEVC標準介紹
首先我們需要明白的是,其實(shí)每一代視頻編碼標準的更新都是為了實(shí)現兩個(gè)大目標:更好的支持高分辨視頻;以更高的壓縮率達到同等的主觀(guān)質(zhì)量。除此之外,還有提高網(wǎng)絡(luò )適配性(比如在H.264中定義的網(wǎng)絡(luò )抽象層概念)、抗出錯性能(H.264中的數據分割、靈活宏塊順序)等等的小目標。當然,提升這些性能要付出的代價(jià)往往是復雜度的大幅增加。在這幾個(gè)問(wèn)題上,HEVC也不例外。當年JCT-VC確定的HEVC的核心目標就是在H.264 High Profile的基礎上將壓縮效率提高一倍。分辨率方面HEVC也可以支持到8K。
從編碼框架上來(lái)說(shuō),HEVC并沒(méi)有革命性的改變,依舊采用了混合編碼框架,也能看到在H.264中就有的變換、量化、熵編碼、幀內預測、幀間預測、環(huán)路濾波等模塊。但是HEVC在這個(gè)框架中幾乎所有模塊都引入了新的編碼技術(shù)。一路看過(guò)各種編碼標準之后就會(huì )發(fā)現,隨著(zhù)視頻編碼技術(shù)的不斷成熟,各種新推出的編碼標準基本都是這個(gè)模式:在保持原有框架基本不變的情況下采用更多的新技術(shù)。
從編碼框架上來(lái)說(shuō),HEVC并沒(méi)有革命性的改變,依舊采用了混合編碼框架,也能看到在H.264中就有的變換、量化、熵編碼、幀內預測、幀間預測、環(huán)路濾波等模塊。但是HEVC在這個(gè)框架中幾乎所有模塊都引入了新的編碼技術(shù)。一路看過(guò)各種編碼標準之后就會(huì )發(fā)現,隨著(zhù)視頻編碼技術(shù)的不斷成熟,各種新推出的編碼標準基本都是這個(gè)模式:在保持原有框架基本不變的情況下采用更多的新技術(shù)。
下面我們就來(lái)具體看看HEVC中的一些新概念以及在H.264已有概念上的一些創(chuàng )新。
1. 編碼結構與配置
為了應對不同應用場(chǎng)合, HEVC設立了GOP的3種編碼結構,即幀內編碼、低延時(shí)編碼和隨機訪(fǎng)問(wèn)編碼。在幀內編碼結構中,每一幀圖像都是按幀內方式進(jìn)行空間域預測編碼,不使用時(shí)間參考幀。在低時(shí)延( Low Delay)編碼結構中,只有第一幀圖像按照幀內方式進(jìn)行編碼,并成為 IDR幀,隨后的各幀都作為一般的P幀和B幀進(jìn)行編碼。這主要是為交互式實(shí)時(shí)通信設計的。隨機訪(fǎng)問(wèn)( Random Access) 編碼結構主要由分級B幀構成( Hierarchical B) ,周期性地(大約每隔 1秒) 插入隨機訪(fǎng)問(wèn)( Clean Random Access,CRA) 幀。這些CRA 幀成為編碼視頻流中的隨機訪(fǎng)問(wèn)點(diǎn)( Random Access Point,RAP) 。所謂隨機訪(fǎng)問(wèn)點(diǎn)是指對這些幀的解碼可以獨立進(jìn)行,不需要參考比特流中前面已經(jīng)解碼的圖像幀。這種對隨機訪(fǎng)問(wèn)方式有力地支持了信道轉換、 搜索以及動(dòng)態(tài)流媒體服務(wù)等應用。
2. 四叉樹(shù)單元劃分
在HEVC中依然采用分塊編碼方式,但不同于H.264中固定尺寸的宏塊,HEVC中塊的尺寸是可以自適應改變的。HEVC中定義了四個(gè)新的概念:編碼樹(shù)單元、編碼單元、預測單元和變換單元。
(1) 編碼樹(shù)單元
類(lèi)似于H.264 /AVC中的宏塊,HEVC將編碼幀分為若干編碼樹(shù)塊( Coding Tree Blocks,CTB),它們是進(jìn)行預測、變換、量化和熵編碼等處理的基本單元,其尺寸或者所包含的像素數可以是16×16、32×32或64×64。同一位置的亮度CTB和兩塊色度CTB,再加上相應的語(yǔ)法元素形成一編碼樹(shù)單元( Coding Tree Units,CTU)。一般來(lái)說(shuō),Unit是從語(yǔ)法結構角度進(jìn)行描述,而B(niǎo)lock是從采樣值角度進(jìn)行描述,并不特意區分這兩個(gè)概念。由于目前HEVC只支持4:2:0的像素格式,所以色度塊CTB的像素數為同等亮度塊的1 /4,即水平和垂直方向都是亮度塊的一半。
(2) 編碼單元
CTU 又可以按照四叉樹(shù)結構分解為若干方形編碼單元( Coding Units,CU),同一層次的CU必須是同一尺寸的4個(gè)方塊,最多可有4層分解,即64×64,32×32,16×16和8×8。如果不分解,則這個(gè)CTU僅包含一個(gè) CU。每個(gè)CU包含一塊亮度編碼塊( Coding Blocks,CB) 、兩個(gè)色度CB以及相應的語(yǔ)法元素。CB 的大小和圖像的特性是自適應的,在圖像比較平緩區域,選擇比較大的CB,而在圖像邊緣或紋理復雜的區域,選擇比較小的CU,有利于提高編碼效率。CU是決定進(jìn)行幀內預測還是幀間預測的單元,也就是說(shuō)整個(gè) CU只能是一種預測模式,不是幀內就是幀間。CU還可以按照四杈樹(shù)層次分解(或不分解) 為更小的預測單元( Prediction Units,PU) 和變換單元( TB,Transform Units) 。
(3) 預測單元
預測單元PU是進(jìn)行預測運算的基本單元,包括幀內和幀間預測兩類(lèi)。一個(gè)編碼單元CU可以包含一個(gè)或者多個(gè)預測單元,CU到PU僅允許一層劃分,最小的PU為4×4。劃分可以是對稱(chēng)的,也可以是不對稱(chēng)的。如圖所示, 一個(gè)2N×2N ( N可以是 4、8、16、32) 的CU可劃分為8種包含PU方式。幀間預測時(shí)可以在這 8 種方式中任意選擇,在幀間預測的跳過(guò)( skip) 模式中只允許選擇2N×2N這種模式,幀內預測時(shí)只允許選擇2N×2N或N×N方式。
(1) 編碼樹(shù)單元
類(lèi)似于H.264 /AVC中的宏塊,HEVC將編碼幀分為若干編碼樹(shù)塊( Coding Tree Blocks,CTB),它們是進(jìn)行預測、變換、量化和熵編碼等處理的基本單元,其尺寸或者所包含的像素數可以是16×16、32×32或64×64。同一位置的亮度CTB和兩塊色度CTB,再加上相應的語(yǔ)法元素形成一編碼樹(shù)單元( Coding Tree Units,CTU)。一般來(lái)說(shuō),Unit是從語(yǔ)法結構角度進(jìn)行描述,而B(niǎo)lock是從采樣值角度進(jìn)行描述,并不特意區分這兩個(gè)概念。由于目前HEVC只支持4:2:0的像素格式,所以色度塊CTB的像素數為同等亮度塊的1 /4,即水平和垂直方向都是亮度塊的一半。
(2) 編碼單元
CTU 又可以按照四叉樹(shù)結構分解為若干方形編碼單元( Coding Units,CU),同一層次的CU必須是同一尺寸的4個(gè)方塊,最多可有4層分解,即64×64,32×32,16×16和8×8。如果不分解,則這個(gè)CTU僅包含一個(gè) CU。每個(gè)CU包含一塊亮度編碼塊( Coding Blocks,CB) 、兩個(gè)色度CB以及相應的語(yǔ)法元素。CB 的大小和圖像的特性是自適應的,在圖像比較平緩區域,選擇比較大的CB,而在圖像邊緣或紋理復雜的區域,選擇比較小的CU,有利于提高編碼效率。CU是決定進(jìn)行幀內預測還是幀間預測的單元,也就是說(shuō)整個(gè) CU只能是一種預測模式,不是幀內就是幀間。CU還可以按照四杈樹(shù)層次分解(或不分解) 為更小的預測單元( Prediction Units,PU) 和變換單元( TB,Transform Units) 。
(3) 預測單元
預測單元PU是進(jìn)行預測運算的基本單元,包括幀內和幀間預測兩類(lèi)。一個(gè)編碼單元CU可以包含一個(gè)或者多個(gè)預測單元,CU到PU僅允許一層劃分,最小的PU為4×4。劃分可以是對稱(chēng)的,也可以是不對稱(chēng)的。如圖所示, 一個(gè)2N×2N ( N可以是 4、8、16、32) 的CU可劃分為8種包含PU方式。幀間預測時(shí)可以在這 8 種方式中任意選擇,在幀間預測的跳過(guò)( skip) 模式中只允許選擇2N×2N這種模式,幀內預測時(shí)只允許選擇2N×2N或N×N方式。
(4) 變換單元
變換單元TU是進(jìn)行變換和量化的基本單元,是在CU的基礎上劃分的,但受到所在的預測單元PU的限制。如PU是正方形,則TU也必須是正方形,尺寸為4×4、8×8、16×16、32×32。幀內編碼模式中變換單元的尺寸需小于或者等于預測單元,而幀間編碼模式中變換單元可以大于預測單元,但是不能超過(guò)編碼單元 CU。一個(gè)編碼單元中多個(gè)變換單元也是按照四叉樹(shù)的結構排列,即每向下一層劃分為4個(gè)小的正方形。如 PU為非正方形時(shí),TU 也需非正方形,其大小為32×8、8×32、16×4、4×16,可用于亮度分量,其中只有32×8、8×32 可用于色度分量。HEVC中允許使用的變換包括4x4、8x8、16x16和32x32整數DCT變換以及對于Intra預測中4x4亮度塊使用的整數DST變換。
雖然Intra預測的模式信息是以PU為單位傳遞的,但Intra預測是以TU為單位進(jìn)行的。所有PU內部的各個(gè)TU的預測方向是一致的,以TU為基本單元進(jìn)行Intra預測的目的是使已重建像素和待預測像素之間的距離盡量短,進(jìn)而提高預測效率,即進(jìn)行幀內預測的基本單元是TB。這也是在Intra編碼的CU中,TU永遠不會(huì )比PU大的原因。
變換單元TU是進(jìn)行變換和量化的基本單元,是在CU的基礎上劃分的,但受到所在的預測單元PU的限制。如PU是正方形,則TU也必須是正方形,尺寸為4×4、8×8、16×16、32×32。幀內編碼模式中變換單元的尺寸需小于或者等于預測單元,而幀間編碼模式中變換單元可以大于預測單元,但是不能超過(guò)編碼單元 CU。一個(gè)編碼單元中多個(gè)變換單元也是按照四叉樹(shù)的結構排列,即每向下一層劃分為4個(gè)小的正方形。如 PU為非正方形時(shí),TU 也需非正方形,其大小為32×8、8×32、16×4、4×16,可用于亮度分量,其中只有32×8、8×32 可用于色度分量。HEVC中允許使用的變換包括4x4、8x8、16x16和32x32整數DCT變換以及對于Intra預測中4x4亮度塊使用的整數DST變換。
雖然Intra預測的模式信息是以PU為單位傳遞的,但Intra預測是以TU為單位進(jìn)行的。所有PU內部的各個(gè)TU的預測方向是一致的,以TU為基本單元進(jìn)行Intra預測的目的是使已重建像素和待預測像素之間的距離盡量短,進(jìn)而提高預測效率,即進(jìn)行幀內預測的基本單元是TB。這也是在Intra編碼的CU中,TU永遠不會(huì )比PU大的原因。
3. 條和片的劃分
條( Slice)的劃分在H.264 /AVC 中就有,HEVC也允許將圖像幀劃分為若干條,條是HEVC 中獨立的編碼區域,條的劃分以CTU或更小的CU為界。為了支持并行計算和差錯控制,某一個(gè)條可以劃分為更小的條,謂之“熵條”( Entropy Slice,ES)。每個(gè)ES都可獨立地進(jìn)行熵解碼,而毋須參考其它的ES。如在多核的并行處理中,就可以安排每個(gè)核單獨處理一個(gè)ES。每個(gè)條編碼為一個(gè)NAL單元,其容量小于等于最大網(wǎng)絡(luò )傳輸單元( Maximum Transmission Unit,MTU) 容量。
在HEVC中新引入了片( Tile)的劃分,用水平和垂直的若干條邊界將圖像幀劃分為多個(gè)矩形區域,每個(gè)區域就是一個(gè)片,每一個(gè)片包含整數個(gè)CTU,片之間也可以互相獨立,以此實(shí)現并行處理。片劃分時(shí)并不要求水平或垂直邊界均勻分布, 可根據并行計算和差錯控制的要求靈活掌握。在編碼時(shí)圖像中的片也是按掃描順序進(jìn)行處理,每個(gè)片中的CTU 也是按掃描順序進(jìn)行。在HEVC中,允許條和片在同一圖像幀中同時(shí)使用,既可以一個(gè)條中包含若干片,又可以一個(gè)片中包含若干條。
4. 圖像格式
取樣結構方面還是以前那三樣,但是在比特深度方面,HEVC引入了一項新技術(shù),提供了一種對編碼器內外有別的比特深度表示方式,即內部比特深度增加( IBDI,Internal Bit Depth Increase)方式。這種方式允許在編碼器內采用高于8比特的像素深度(如10比特)進(jìn)行編碼運算,而編碼器外部,即編碼器的輸出圖像仍然是8比特深度。這是因為8比特深度對人眼來(lái)說(shuō)可能已經(jīng)足夠了,但是對編碼處理而言,有時(shí)顯得精度不夠,往往會(huì )帶來(lái)的計算誤差和累積誤差。除了比特深度之外,HEVC還有一點(diǎn)值得注意的是它沒(méi)有提供專(zhuān)用于隔行視頻的工具,而是將隔行視頻的一幀看作兩個(gè)獨立的場(chǎng),對各個(gè)場(chǎng)數據分別進(jìn)行編碼,簡(jiǎn)化了編碼器的實(shí)現。這也是因為隨著(zhù)數字視頻技術(shù)的快速發(fā)展,視頻的隔行掃描方式日漸式微。
5. 幀內預測
HEVC為亮度信息定義了 33 種不同的幀內預測方向,連同平面( Planar) 和直流( DC) 模式,總共35種幀內預測模式。DC模式和H.264 /AVC 類(lèi)似,對當前塊的所有像素使用同一個(gè)預測值,即它們的平均值。平面模式的預測值由水平和垂直兩個(gè)方向上已知像素的線(xiàn)性?xún)炔瀹a(chǎn)生,特別適用于圖像的平坦區域。在幀內編碼中色度信號也采用相應亮度信號所采用的預測模式。這樣,對于色度信息,HEVC有5種幀內預測模式: Planar 模式( 0) 、 垂直模式( 1)、水平模式( 2)、DC 模式( 3)和導出( derived) 模式( 4),即相應的亮度模式。6. 幀間預測
HEVC的幀間預測編碼總體上和H.264 /AVC 相似,但進(jìn)行了如下幾點(diǎn)改進(jìn)
(1) 非對稱(chēng)運動(dòng)劃分( Asymmetric Motion Partitions,AMP)
允許非對稱(chēng)地劃分64×64到16×16的CU為更小的PU,PU可以是方形的, 也可以是矩形的。每個(gè)采用幀間預測方式編碼的PU都有一套運動(dòng)參數,包括運動(dòng)矢量、參考幀索引和參考表標志。因為 AMP 允許 PU在運動(dòng)估計和運動(dòng)補償中更精確地符合圖像中運動(dòng)目標的形狀,而不需要進(jìn)一步的細分來(lái)解決,因此可以提高編碼效率。
(2) 運動(dòng)合并( Motion Merge)
HEVC對運動(dòng)參數的編碼有3種模式,簡(jiǎn)稱(chēng)之為Inter 模式、Skip 模式和Merge 模式。前兩種模式和 H.264 /AVC 類(lèi)似,Merge模式是HEVC新引入的。這樣, 對于每個(gè)幀間編碼的 PU,可以在下列 3 種編碼模式中選擇: (1) 采用對運動(dòng)參數直接編碼(如對運動(dòng)矢量進(jìn)行預測編碼)的Inter 模式,(2) 采用運動(dòng)合并技術(shù)的 Merge 模式,(3)采用改進(jìn)的 Skip 模式。Inter 模式需要傳送當前編碼 PU 的運動(dòng)矢量來(lái)完成基于運動(dòng)補償的幀間預測。HEVC中運動(dòng)矢量可采取空間或時(shí)間預測編碼的方式( H.264 /AVC 僅采用空間預測)。而Skip 模式和Merge模式都無(wú)需傳送MV 信息,只傳送候選PU塊的索引信息,由解碼端采用運動(dòng)推理( Motion Inference)方法(如拷貝)來(lái)獲得運動(dòng)信息,推理依據來(lái)自空域鄰近塊或時(shí)域鄰近塊(候選塊)的MV。在Skip 模式中連殘差信息也省略了,編碼器只需要編碼運動(dòng)合并候選者的索引信息,以保證解碼時(shí)Skip PU可以拷貝中選者的運動(dòng)參數作為
自己的運動(dòng)參數。這樣,對那些幀間變化很少,或者運動(dòng)靜止的區域編碼只需很少的比特。
在以往標準的幀間預測中,對以每個(gè)幀間預測塊都要傳輸一套運動(dòng)參數。為了進(jìn)一步提高編碼效率, 可對鄰近的PU塊進(jìn)行合并(Merge)處理,形成Merge幀間預測編碼模式,即將毗鄰的運動(dòng)參數相同或相近的幾個(gè)PU塊合并起來(lái)形成一個(gè)所謂的“小區”( Region),只要為每個(gè)小區傳輸一次運動(dòng)參數,不必為每個(gè)PU塊分別傳輸運動(dòng)參數。在運動(dòng)合并模式中,HEVC 為當前正在編碼的PU創(chuàng )建一個(gè)先前已編碼的鄰近PU (稱(chēng)為“候選”P(pán)U) 列表。其中候選PU既可以是在編PU的空間鄰近,也可以是時(shí)間鄰近。編碼器按照率失真準則選取并標注這個(gè)運動(dòng)合并列表中哪一個(gè)候選PU被選中,繼而使得當前編碼的PU在解碼時(shí)只要拷貝中選PU的運動(dòng)參數。顯然,運動(dòng)合并方式不需要為當前PU去編碼運動(dòng)矢量,取而代之的是只需要編碼運動(dòng)合并列表中候選者的簡(jiǎn)單索引信息。
Merge 模式的這種 MVP 候選集的設置和選擇方法在 HEVC 中稱(chēng)之為高級運動(dòng)矢量預測( Advanced Motion Vector Prediction, AMVP),它也同樣適用于 Skip 模式和Inter模式的最佳MVP塊的選擇。
(3) 參考圖片管理
H.264/MPEG-4 AVC中使用基于滑動(dòng)窗口(Sliding Window)和MMCO(Memo Management Control Operation,內存管理控制操作)的方式對DPB(Decoded Picture Buffer,解碼圖片緩存)中的圖片進(jìn)行操作。H.264/MPEG-4 AVC使用的是基于“命令”的參考圖片管理方式。由于HEVC中支持時(shí)間可分級,高時(shí)間級別的圖片可以人為的被丟棄。若被丟棄的圖片中含有控制DPB的命令,則會(huì )導致不正確的DPB狀態(tài)。故HEVC使用更為魯棒的基于狀態(tài)的RPS(Reference Picture Set,參考圖片集合)的方式對DPB中的參考圖片進(jìn)行管理。HEVC中的RPS并不是基于命令的,而是基于狀態(tài)的,故更為穩健,抗差錯性也更強。
(1) 非對稱(chēng)運動(dòng)劃分( Asymmetric Motion Partitions,AMP)
允許非對稱(chēng)地劃分64×64到16×16的CU為更小的PU,PU可以是方形的, 也可以是矩形的。每個(gè)采用幀間預測方式編碼的PU都有一套運動(dòng)參數,包括運動(dòng)矢量、參考幀索引和參考表標志。因為 AMP 允許 PU在運動(dòng)估計和運動(dòng)補償中更精確地符合圖像中運動(dòng)目標的形狀,而不需要進(jìn)一步的細分來(lái)解決,因此可以提高編碼效率。
(2) 運動(dòng)合并( Motion Merge)
HEVC對運動(dòng)參數的編碼有3種模式,簡(jiǎn)稱(chēng)之為Inter 模式、Skip 模式和Merge 模式。前兩種模式和 H.264 /AVC 類(lèi)似,Merge模式是HEVC新引入的。這樣, 對于每個(gè)幀間編碼的 PU,可以在下列 3 種編碼模式中選擇: (1) 采用對運動(dòng)參數直接編碼(如對運動(dòng)矢量進(jìn)行預測編碼)的Inter 模式,(2) 采用運動(dòng)合并技術(shù)的 Merge 模式,(3)采用改進(jìn)的 Skip 模式。Inter 模式需要傳送當前編碼 PU 的運動(dòng)矢量來(lái)完成基于運動(dòng)補償的幀間預測。HEVC中運動(dòng)矢量可采取空間或時(shí)間預測編碼的方式( H.264 /AVC 僅采用空間預測)。而Skip 模式和Merge模式都無(wú)需傳送MV 信息,只傳送候選PU塊的索引信息,由解碼端采用運動(dòng)推理( Motion Inference)方法(如拷貝)來(lái)獲得運動(dòng)信息,推理依據來(lái)自空域鄰近塊或時(shí)域鄰近塊(候選塊)的MV。在Skip 模式中連殘差信息也省略了,編碼器只需要編碼運動(dòng)合并候選者的索引信息,以保證解碼時(shí)Skip PU可以拷貝中選者的運動(dòng)參數作為
自己的運動(dòng)參數。這樣,對那些幀間變化很少,或者運動(dòng)靜止的區域編碼只需很少的比特。
在以往標準的幀間預測中,對以每個(gè)幀間預測塊都要傳輸一套運動(dòng)參數。為了進(jìn)一步提高編碼效率, 可對鄰近的PU塊進(jìn)行合并(Merge)處理,形成Merge幀間預測編碼模式,即將毗鄰的運動(dòng)參數相同或相近的幾個(gè)PU塊合并起來(lái)形成一個(gè)所謂的“小區”( Region),只要為每個(gè)小區傳輸一次運動(dòng)參數,不必為每個(gè)PU塊分別傳輸運動(dòng)參數。在運動(dòng)合并模式中,HEVC 為當前正在編碼的PU創(chuàng )建一個(gè)先前已編碼的鄰近PU (稱(chēng)為“候選”P(pán)U) 列表。其中候選PU既可以是在編PU的空間鄰近,也可以是時(shí)間鄰近。編碼器按照率失真準則選取并標注這個(gè)運動(dòng)合并列表中哪一個(gè)候選PU被選中,繼而使得當前編碼的PU在解碼時(shí)只要拷貝中選PU的運動(dòng)參數。顯然,運動(dòng)合并方式不需要為當前PU去編碼運動(dòng)矢量,取而代之的是只需要編碼運動(dòng)合并列表中候選者的簡(jiǎn)單索引信息。
Merge 模式的這種 MVP 候選集的設置和選擇方法在 HEVC 中稱(chēng)之為高級運動(dòng)矢量預測( Advanced Motion Vector Prediction, AMVP),它也同樣適用于 Skip 模式和Inter模式的最佳MVP塊的選擇。
(3) 參考圖片管理
H.264/MPEG-4 AVC中使用基于滑動(dòng)窗口(Sliding Window)和MMCO(Memo Management Control Operation,內存管理控制操作)的方式對DPB(Decoded Picture Buffer,解碼圖片緩存)中的圖片進(jìn)行操作。H.264/MPEG-4 AVC使用的是基于“命令”的參考圖片管理方式。由于HEVC中支持時(shí)間可分級,高時(shí)間級別的圖片可以人為的被丟棄。若被丟棄的圖片中含有控制DPB的命令,則會(huì )導致不正確的DPB狀態(tài)。故HEVC使用更為魯棒的基于狀態(tài)的RPS(Reference Picture Set,參考圖片集合)的方式對DPB中的參考圖片進(jìn)行管理。HEVC中的RPS并不是基于命令的,而是基于狀態(tài)的,故更為穩健,抗差錯性也更強。
7. 變換和量化
HEVC 的量化機理和 H.264 /AVC基本相同,是在整數DCT變換時(shí)一并完成的。HEVC采用了率失真優(yōu)化的量化( Rate Distortion Optimized Quantization,RDOQ) 技術(shù),在給定碼率的情況下選擇最優(yōu)的量化參數使重建圖像的失真最小。量化操作是在變換單元 TU 中分別對亮度和色度分量進(jìn)行的。在TU中所有的變換系數都是按照一個(gè)特定的量化參數 QP 統一進(jìn)行量化和反量化的。HEVC的RDOQ 可比H.264 /AVC提高編碼效率 5% 左右(亮度) ,當然帶來(lái)的負面影響是計算復雜度的增加。8. 熵編碼
HEVC只采用了CABAC進(jìn)行熵編碼,而沒(méi)有使用CAVLC。除此之外,考慮到高清、超高清視頻編碼的巨大運算量,在HEVC提供了基于條和基于片的便于并行編碼和解碼處理的機制。然而,這樣又會(huì )引起編碼性能的降低,因為這些條和片是獨立預測的,打破了穿越邊界的預測相關(guān)性,每個(gè)條或片的用于熵編碼的統計必須從頭開(kāi)始。為了避免這個(gè)問(wèn)題,HEVC 提出了一種波前并行處理( Wavefront Parallel Processing,WPP)的熵編碼技術(shù),在熵編碼時(shí)不需要打破預測的連貫性,可盡可能多地利用上下文信息。
在編碼的波前并行處理時(shí),一旦當前 CTU 行上邊的兩塊 CTU 已經(jīng)處理完了,立即用一個(gè)新的并行進(jìn)程(通常是一個(gè)新的線(xiàn)程) 開(kāi)始處理這新的一行CTU,其過(guò)程如圖所示。之所以需要兩塊 CTU,是因為幀內預測和運動(dòng)矢量預測需要依賴(lài)于來(lái)之當前CTU 上邊和右上邊的 CTU 的數據。WPP 熵編碼初始化的參數可來(lái)自于從當前行上邊的兩塊完全編碼的 CTU 獲得的信息,這樣就可在新的編碼線(xiàn)程中使用盡可能多的上下文信息。

9. 環(huán)路濾波
環(huán)路濾波( Loop Filtering)位于編碼器預測環(huán)路中的反量化/反變換單元之后、重建的運動(dòng)補償預測參考幀之前。因而,環(huán)路濾波是預測環(huán)路的一部分,屬于環(huán)內處理,而不是環(huán)外的后處理。環(huán)路濾波的目標就是消除編碼過(guò)程中預測、變換和量化等環(huán)節引入的失真。 由于濾波是在預測環(huán)路內進(jìn)行的,減少了失真,存儲后為運動(dòng)補償預測提供了較高質(zhì)量的參考幀。HEVC 除了采用和 H.264 /AVC類(lèi)似的環(huán)內去方塊濾波( DeBlocking Filter,DBF) 外,還增加了新的樣值自適應偏移( Sample Adaptive Offset,SAO)環(huán)內濾波工具,形成了2 個(gè)按順序進(jìn)行的處理: 去方塊濾波和SAO濾波。去方塊濾波方面,首先我們知道方塊效應是由于采用圖像分塊壓縮方法所形成的一種圖像失真,尤其在塊的邊界處更為明顯。為了消除這類(lèi)失真,提高重建視頻的主觀(guān)和客觀(guān)質(zhì)量,H.264 /AVC 在方塊的邊界按照“邊界強度”進(jìn)行自適應低通濾波,又稱(chēng)去方塊濾波。HEVC也使用了類(lèi)似的環(huán)內去方塊濾波來(lái)減輕各種單元邊界(如CU、PU、TU 等)的塊效應。HEVC 為了減少復雜性,利于簡(jiǎn)化硬件設計和并行處理,不對4×4的塊邊界濾波,僅對8x8邊界進(jìn)行濾波,且僅定義了3個(gè)邊界強度等級( 0、1 和2),濾波邊界附近的像素,省卻了對非邊界處像素的處理。在濾波前,對于每一個(gè)邊界需要判決: 是否需要進(jìn)行去方塊濾波? 如果需要,還要判決到底是進(jìn)行強濾波還是弱濾波。判決是根據穿越邊界像素的梯度值以及由此塊的量化參數 QP 導出的門(mén)限值共同決定的。HEVC的去方塊濾波對需要進(jìn)行濾波的各類(lèi)邊界統一進(jìn)行,先對整個(gè)圖像的所有垂直邊界進(jìn)行水平方向濾波,然后再對所有的水平邊界進(jìn)行垂直方向濾波。
樣值自適應偏移( SAO) 是HEVC的一項新的編碼工具,對要重建的圖像逐像素進(jìn)行濾波。它先按照像素的灰度值或邊緣的性質(zhì),將像素分為不同的類(lèi)型,然后按照不同的類(lèi)型為每個(gè)像素值加上一個(gè)簡(jiǎn)單的偏移值,達到減少失真的目的,從而提高壓縮率。加偏移值有兩種模式,帶偏移( Band Offset,BO)和邊緣偏移( Edge Offset,EO)。編碼器對圖像的不同區域選擇施加BO模式或EO模式的偏移,并在碼流中給出相應的標識。
BO模式將像素值從0到最大值分為32個(gè)相等的間隔——“帶( bands)”,例如對8比特而言,最大值是 255,則此時(shí)的帶的寬度就是256 /32 = 8,每個(gè)帶所包含的像素值都比較相近。如果某 CTB 的亮度值分布在4個(gè)相鄰的帶中間,說(shuō)明這原本是一個(gè)比較平坦的圖像區域,這樣的區域人為失真容易出現,則需對這些像素值施加偏移量(可正可負),使像素值的分布趨向更集中。當然這個(gè)偏移量也要作為帶偏移傳輸到解碼端。
EO模式使用一種3像素結構來(lái)對所處理的像素進(jìn)行分類(lèi)。在該像素所處邊緣(一維) 的方向上、以該像素為中心再加上最近鄰的2個(gè)像素,形成45°、垂直、水平和 135°四種“3 像素結構”,如圖所示。按照3像素值的不同分布,該像素可被分為峰值像素(如果其值大于相鄰的2個(gè)像素) ,谷值像素(如果其值小于相鄰的 2 個(gè)像素),邊緣像素(如果其值等于任何一個(gè)相鄰像素)和其它像素(如果不符合前 3 種) 共4類(lèi)。對4類(lèi)不同的像素所加的偏移值也不同。

最后來(lái)簡(jiǎn)單順一遍HEVC的編碼過(guò)程,如下圖

輸入HEVC編碼器的是原始視頻序列,原始視頻序列會(huì )先按照LCU(Largest Coding Unit,最大編碼單元)分成不重疊的矩形塊。對于每個(gè)LCU,編碼器先要選擇合適的CU四叉樹(shù)劃分方式。對于每個(gè)不再繼續劃分的CU,編碼器會(huì )選擇合適的預測方式進(jìn)行預測。CU可以繼續劃分為PU和TU。經(jīng)過(guò)預測后,原始信號和預測信號的差稱(chēng)作殘差信號,而殘差信號經(jīng)過(guò)變換量化后傳遞到解碼端。預測值加上經(jīng)過(guò)反變換和反量化后重建的殘差值構成了重建值。而此重建值需經(jīng)過(guò)濾波(包括去塊效應濾波和SAO)處理后,構成最終的輸出圖片。
以上介紹了HEVC標準的相關(guān)內容,并且在最后簡(jiǎn)單梳理了一下HEVC的編碼流程,下一篇文章中將會(huì )介紹HEVC所采用的全新的碼率控制算法。
各位看官,如果您覺(jué)得本人的博客對您有所幫助,可以?huà)呙枞缦露S碼進(jìn)行打賞,打賞多少您隨意~

