6. H.264/AVC編碼器原理


1. H.264/AVC的應用

H.264 不僅具有優異的壓縮性能,而且具有良好的網絡親和性,這對實時的視頻通信是十分重要的。和 MPEG-4 中的重點是靈活性不同,H.264 着重在壓縮的高效率和傳輸的高可靠性,因而其應用面十分廣泛H.264 支持三個不同檔次:
  1. 基本檔次:主要用於“視頻會話”,如會議電視,可視電話,遠程醫療、遠程教學等;
  2. 擴展檔次:主要用於網絡的視頻流,如視頻點播;
  3. 主要檔次:主要用於消費電子應用,如數字電視廣播,數字視頻存儲等。

2. H.264/AVC編解碼器

H.264 並不明確地規定一個編解碼器如何實現,而是規定了一個編了碼的視頻比特流的句法,和該比特流的解碼方法, 各個廠商的編碼器和解碼器在此框架下應能夠互通,在實現上具有較大靈活性,而且有利於相互競爭。
H.264 和基於以前的標准(如 H.261、 H.263、 MPEG-1、 MPEG-4)中的編解碼器功能塊的組成並沒有什么區別,主要的不同在於各功能塊的細節。視頻內容的多變和信道的多變帶來了自適應壓縮技術的復雜性, H.264 就是利用實現的復雜性獲得壓縮性能的明顯改善

2.1.編碼器

編碼器采用的仍是變換和預測的混合編碼法 。H.264 編碼器的功能組成如下圖所示

 

輸入的幀或場 Fn 以宏塊為單位被編碼器處理。首先,按幀內或幀間預測編碼的方法進行處理。如果采用幀內預測編碼,其預測值 PRED(圖中用 P 表示)是由當前片中前面已編碼的參考圖像經運動補償(MC)后得出,其中參考圖像用 F’n-1 表示。為了提高預測精度,從而提高壓縮比,實際的參考圖像可在過去或未來(指顯示次序上)已編碼解碼重建和濾波的幀中進行選擇。預測值 PRED 和當前塊相減后,產生一個殘差塊 Dn,經塊變換、量化后產生一組量化后的變換系數 X,再經熵編碼,與解碼所需的一些邊信息(如預測模式量化參數、運動矢量等)一起組成一個壓縮后的碼流,經 NAL(網絡自適應層)供傳輸和存儲用。
為了提供進一步預測用的參考圖像,編碼器必須有重建圖像的功能。因此必須使殘差圖像經反量化、反變換后得到的 Dn’與預測值 P 相加,得到 uFn’(未經濾波的幀)。為了去除編碼解碼環路中產生的噪聲,為了提高參考幀的圖像質量,從而提高壓縮圖像性能,設置了一個環路濾波器,濾波后的輸出 Fn’即重建圖像可用作參考圖像。

2.2.解碼器

H.264解碼器的功能組成如下圖所示
由編碼器的 NAL 輸出一個壓縮后的 H.264 壓縮比特流。經熵解碼得到量化后的一組變換系數 X,再經反量化、反變換,得到殘差 Dn’。利用從該比特流中解碼出的頭信息,解碼器就產生一個預測塊 PRED,它和編碼器中的原始 PRED 是相同的。當該解碼器產生的 PRED與殘差 Dn’相加后,就產生 uFu’,再經濾波后,最后就得到濾波后的 Fn’,這個 Fn’就是最后的解碼輸出圖像。

3. H.264/AVC的結構

3.1.術語

1.場和幀
視頻的一場或一幀可用來產生一個編碼圖像。通常,視頻幀可分成兩種類型:連續或隔行視頻幀。在電視中,為減少大面積閃爍現象,把一幀分成兩個隔行的場。顯然,這時場內鄰行之間的空間相關性較強,而幀內鄰近行空間相關性強,因此活動量較小或靜止的圖像宜采用幀編碼方式,對活動量較大的運動圖像則宜采用場編碼方式
2.宏塊、片
一個 編碼圖像通常划分成若干宏塊組成,一個宏塊由一個 16×16 亮度像素和附加的一個 8×8 Cb和一個 8×8 Cr 彩色像素塊組成。每個圖象中,若干宏塊被排列成片的形式。
I 片只包含 I 宏塊, P 片可包含 P 和 I 宏塊,而 B 片可包含 B 和 I 宏塊。
I 宏塊利用從當前片中已解碼的像素作為參考進行幀內預測(不能取其它片中的已解碼像素作為參考進行幀內預測)。
P 宏塊利用前面已編碼圖象作為參考圖象進行幀內預測,一個幀內編碼的宏塊可進一步作宏塊的分割:即 16×16、 16×8、 8×16 或 8×8 亮度像素塊(以及附帶的彩色像素);如果選了 8×8 的子宏塊,則可再分成各種子宏塊的分割,其尺寸為 8×8、 8×4、 4×8 或 4×4 亮度像素塊(以及附帶的彩色像素)。
B 宏塊則利用雙向的參考圖象(當前和未來的已編碼圖象幀)進行幀內預測。

3.2.檔次和級

H.264 規定了三種檔次,每個檔次支持一組特定的編碼功能如下圖所示,並支持一類特定的應用。每一檔次設置不同參數(如取樣速率、圖像尺寸、編碼比特率等),得到編解碼器性能不同的級。
  1. 基本檔次:利用 I 片和 P 片支持幀內和幀間編碼,支持利用基於上下文的自適應的變長編碼進行的熵編碼(CAVLC)。主要用於可視電話、會議電視、無線通信等實時視頻通信
  2. 主要檔次:支持隔行視頻,采用 B 片的幀間編碼和采用加權預測的幀內編碼;支持利用基於上下文的自適應的算術編碼(CABAC)。主要用於數字廣播電視與數字視頻存儲;
  3. 擴展檔次:支持碼流之間有效的切換(SP 和 SI 片)、改進誤碼性能(數據分割),但不支持隔行視頻和 CABAC。展檔次包括了基本檔次的所有功能,而不能包括主要檔次的。

3.3.編碼數據格式

H.264 支持  4:2:0 的連續或隔行視頻的編碼和解碼
制訂 H.264 的主要目標有二個:
  • 高的視頻壓縮比;
  • 良好的網絡親和性,即可適用於各種傳輸網絡。
為此,  H.264 的功能分為兩層,即視頻編碼層(VCL)和網絡提取層(NAL, Network Abstraction Layer)。 VCL 數據即編碼處理的輸出,它表示被壓縮編碼后的視頻數據序列。在 VCL 數據傳輸或存儲之前,這些編碼的 VCL 數據,先被映射或封裝進 NAL 單元中。每個 NAL 單元包括一個原始字節序列負荷(RBSP)、一組對應於視頻編碼數據的 NAL 頭信息。NAL 單元序列的結構如下圖所示
1.參數圖像
為了提高預測精度,  H.264 編碼器可從一組前面或后面已編碼圖像中選出一個或兩個與當前最匹配的圖像作為幀間編碼間的參數圖像,使匹配后的預測精度顯著改進。 H.264 中最多可從 15 個參數圖像中進行選擇,選出最佳的匹配圖像。
對於 P 片中幀間編碼宏塊和宏塊分割的預測可從表“0”中選擇參數圖像;對於 B 片中的幀間編碼宏塊和宏塊分割的預測,可從表“0”和“1”中選擇參考圖像。
2.片
一個視頻圖像可編碼成一個或更多個片, 每片包含整數個宏塊(MB),即每片至少一個 MB,最多時每片包含整個圖像的宏塊。總之,一幅圖像中每片的宏塊數不一定固定
設片的目的是為了限制誤碼的擴散和傳輸,應使編碼片相互間是獨立的。某片的預測不能以其它片中的宏塊為參考圖像,這樣某一片中的預測誤差才不會傳播到其它片中去。
編碼片共有 5 種不同類型, 除已講過的 I 片、 P 片、 B 片外,還有 SP 片和 SI 片。其中 SP(切換P)是用於不同編碼流之間的切換;它包含 P 和/或 I 宏塊。它是擴展檔次中必須具有的切換,它包含了一種特殊類型的編碼宏塊,叫做 SI 宏塊, SI 也是擴展檔次中的必備功能。
片的句法結構如下圖所示

其中片頭規定了片的類型,該片屬於哪個圖像,有關的參考圖像等,片的數據包含一系列的編碼 MB(宏塊),和/或跳編碼(不編碼)數據。每個 MB 包含頭單元(如下表所)示和殘差數據

3.片組
片組是一個編碼圖象中若干 MB 的一個子集,它可包含一個或若干個片在一個片組中,每片的 MB 按光柵掃描次序被編碼,如果每幅圖象僅取一個片組,則該圖象中所有的 MB 均按光柵掃描次序被編碼(除非使用 ASO,即任意的片次序,即一個編碼幀中的片之后可跟隨任一解碼程序的片)。還有一種片組,叫靈活宏塊次序(FMO),它可用靈活的方法,把編碼 MB 序列映射到解碼圖象中 MB 的分配用 MB 到片組之間的映射來確定,它表示每一個 MB 屬於哪個片組。下表為 MB 到片組的各種映射類型。

3.4.幀內預測

在幀內預測模式中,預測塊 P 是基於已編碼重建塊和當前塊形成的。對亮度像素而言, P 塊用於 4×4 子塊或者 16×16 宏塊的相關操作。 4×4 亮度子塊有 9 種可選預測模式,獨立預測每一個 4×4亮度子塊,適用於帶有大量細節的圖像編碼; 16×16 亮度塊有 4 種預測模式,預測整個 16×16 亮度塊,適用於平坦區域圖像編碼;色度塊也有 4 種預測模式,類似於 16×16 亮度塊預測模式。編碼器通常選擇使 P 塊和編碼塊之間差異最小的預測模式。此外, 還有一種幀內編碼模式稱為 I_PCM 編碼模式。該模式下,編碼器直接傳輸圖像像素值,而不經過預測和變換。在一些特殊的情況下,特別是圖像內容不規則或者量化參數非常低時該模式比起“常規操作”(幀內預測—變換—量化—熵編碼)效率更高。 I_PCM 模式用於以下目的:
  • 允許編碼器精確的表示像素值
  • 提供表示不規則圖像內容的准確值,而不引起重大的數據量增加。
  • 嚴格限制宏塊解碼比特數,但不損害編碼效率。
在以往 H.263+、 MPEG-4 等視頻壓縮編碼標准中,幀內編碼被引入變換域。 H.264 幀內編碼則參考預測塊左方或者上方的已編碼塊的鄰近像素點,被引入空間域。但是,如果參考預測塊是幀間編碼宏塊,該預測會因參考塊的運動補償引起誤碼擴散。所以,參考塊通常選取幀內編碼的鄰近塊。
1. 4x4亮度預測模式
 

如上圖 所示, 4×4 亮度塊的上方和左方像素 A~Q 為已編碼和重構像素,用作編解碼器中的預測參考像素。 a~p 為待預測像素,利用 A~Q 值和 9 種模式實現。其中模式 2(DC 預測)根據 A~Q 中已編碼像素預測,而其余模式只有在所需預測像素全部提供才能使用。圖 下圖 箭頭表明了每種模式預測方向。對模式 3~8,預測像素由 A~Q 加權平均而得。例如,模式 4 中,p=round(B/4+C/2+D/4)。下表給出了這 9 種模式的描述。

2. 16x16亮度預測模式
宏塊的全部 16×16 亮度成分可以整體預測,有 4 種預測模式,如表 6.4 和圖 6.17 所示

3. 8x8色度塊預測模式
每個幀內編碼宏塊的 8×8 色度成分由已編碼左上方色度像素預測而得,兩種色度成分常用同一種預測模式。 4 種預測模式類似於幀內 16×16 預測的 4 種預測模式,只是模式編號不同。其中 DC(模式 0)、水平(模式 1)、垂直(模式 2)、平面(模式 3)。
4.信號化幀內預測模式
每個 4×4 塊幀內預測模式必須轉變成信號傳給解碼器。該信息可能需大量比特表示,但鄰近塊的幀內模式通常是相關的。例如, A、 B、 E 分別為左邊、上邊和當前塊,如果 A 和 B 預測模式為模式 1, E 的最佳預測模式很可能也為模式 1。所以通常利用這種關聯性信號化 4×4 幀內模式。幀內預測以絕對誤差和(SAE)為標准選取最佳預測模式,使預測幀更加接近原始幀,減少了相互間的差異,去除時間上的數據冗余,提高了編碼的壓縮效率。

3.5.幀間預測

H.264 幀間預測是利用已編碼視頻幀/場和基於塊的運動補償的預測模式。與以往標准幀間預測的區別在於塊尺寸范圍更廣(從 16×16 到 4×4)、亞像素運動矢量的使用(亮度采用 1/4 像素精度MV)及多參考幀的運用等等。
1.樹狀結構運動補償
每個宏塊(16×16 像素)可以 4 種方式分割:一個 16×16,兩個 16×8,兩個 8×16,四個 8×8。其運動補償也相應有四種。而 8×8 模式的每個子宏塊還可以四種方式分割:一個 8×8,兩個 4×8 或兩個 8×4 及 4 個 4×4。這些分割和子宏塊大大提高了各宏塊之間的關聯性。這種分割下的運動補償則稱為樹狀結構運動補償
每個分割或子宏塊都有一個獨立的運動補償。每個 MV 必須被編碼、傳輸,分割的選擇也需編碼到壓縮比特流中。對大的分割尺寸而言, MV 選擇和分割類型只需少量的比特,但運動補償殘差在多細節區域能量將非常高。小尺寸分割運動補償殘差能量低,但需要較多的比特表征 MV 和分割選擇。分割尺寸的選擇影響了壓縮性能。 整體而言,大的分割尺寸適合平坦區域,而小尺寸適合多細節區域。
宏塊的色度成分(Cr 和 Cb)則為相應亮度的一半(水平和垂直各一半)。  色度塊采用和亮度塊同樣的分割模式,只是尺寸減半(水平和垂直方向都減半)。例如, 8×16 的亮度塊相應色度塊尺寸為 4×8, 8×4 亮度塊相應色度塊尺寸為 4×2 等等。色度塊的 MV 也是通過相應亮度 MV 水平和垂直分量減半而得
下圖顯示了一個殘差幀(沒有進行運動補償)。 H.264 編碼器為幀的每個部分選擇了最佳分割尺寸,使傳輸信息量最小,並將選擇的分割加到殘差幀上。在幀變化小的區域(殘差顯示灰色),選擇 16×16 分割;多運動區域(殘差顯示黑色或白色),選擇更有效的小的尺寸。
2.運動矢量
幀間編碼宏塊的每個分割或者子宏塊都是從參考圖像某一相同尺寸區域預測而得。兩者之間的差異(MV)對亮度成分采用 1/4 像素精度,色度 1/8 像素精度。亞像素位置的亮度和色度像素並不存在於參考圖像中,需利用鄰近已編碼點進行內插而得。下圖中,當前幀的 4×4 塊通過鄰近參考圖像相應區域預測。如果 MV 的垂直和水平分量為整數,參考塊相應像素實際存在(灰色點)。如果其中一個或兩個為分數,預測像素(灰色點)通過參考幀中相應像素(白色點)內插獲得。
3.內插像素生成
首先生成參考圖像亮度成分半像素像素。半像素點(如 b,h,m)通過對相應整像素點進行 6 抽頭濾波得出,權重為(1/32 ,-5/32 ,5/8, 5/8, -5/32, 1/32)。 b 計算如下:

類似的, h 由 A、 C、 G、 M、 R、 T 濾波得出。一旦鄰近(垂直或水平方向)整像素點的所有像素都計算出,剩余的半像素點便可以通過對 6 個垂直或水平方向的半像素點濾波而得。例如, j 由cc, dd, h,m,ee,ff 濾波得出。這里說明的是, 6 抽頭濾器比較復雜,但可明顯改善運動補償性能

半像素點計算出來以后, 1/4 像素點就可通過線性內插得出,如圖 6.23 所示。 1/4 像素點(如 a, c, i, k, d, f, n, q)由鄰近像素內插而得,如

剩余 1/4 像素點(p, r)由一對對角半像素點線性內插得出。如, e 由 b 和 h 獲得。相應地,色度像素需要 1/8 精度地 MV,也同樣通過整像素地線性內插得出,如圖 6.24 所示。

4.MV預測
每個分割 MV 的編碼需要相當數目的比特,特別是使用小分割尺寸時。為減少傳輸比特數,可利用鄰近分割的 MV 較強的相關性, MV 可由鄰近已編碼分割的 MV 預測而得。預測矢量 MVp 基於已計算 MV 和 MVD(預測與當前的差異)並被編碼和傳送。 MVp 則取決於運動補償尺寸和鄰近MV 的有無。
E 為當前宏塊或宏塊分割子宏塊。 A、 B、 C 分別為 E 的左、上、右上方的三個相對應塊。如果E 的左邊不止一個分割,取其中最上的一個為 A;上方不止一個分割時,取最左邊一個為 B。圖 6.25顯示所有分割有相同尺寸時的鄰近分割選擇。圖 6.26 給出了不同尺寸時臨近分割的選擇。
其中:
  • 傳輸分割不包括 16×8 和 8×16 時, MVp 為 A、 B、 C 分割 MV 的中值;
  • 16×8 分割,上面部分 MVp 由 B 預測,下面部分 MVp 由 A 預測;
  •  8×16 分割,左面部分 MVp 由 A 預測,右面部分 MVp 由 C 預測;
  •  跳躍宏塊(skipped MB),同 1)。
如果圖 6.26 所示的已傳送塊不提供時(如在當前片外), MVp 選擇需重新調整。在解碼端, MVp以相同方式形成並加到 MVD 上。對跳躍宏塊,不存在 MVD,運動補償宏塊也由 MV 直接生成。
 
5.B片預測
B 片中的幀間編碼宏塊的每個子塊都是由一個或兩個參考圖像預測而得。該參考圖像在當前圖像的前面或者后面。參考圖像存儲於編解碼器中,其選擇有多種方式。下圖顯示了三種方式:一個前向和一個后向的(類似於 MPEG 的 B 圖像預測);兩個前向;兩個后向

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM