第四章 可變區塊大小的方法
4.1 可變區塊大小的種類
在編碼的過程中,一個巨區塊為編碼的重要基本單位,大小為 16x16( pixels ) 的大小,因此每一個畫面都會被區分成為 N*M 個的巨區塊(N, M 為正整數),而 在 H.264 中每一個巨區塊都可以再細分成數個區塊(Block),分別把每一個區塊 都經過編碼器編碼。
4.1.1 畫面內預測( Intra Prediction )
當一個巨區塊或區塊被以 Intra Mode 來編碼的時候,必須根據此區塊附近所 編碼後再重建的區塊為依據,建立出預測區塊,再把此預測區塊和原始的區塊相
減,可以求得誤差值再進行編碼。對於亮度(Luminance)的部分,(圖 4.2 )可以把 巨區塊分成 16 個 4x4 區塊 或是 1 個 16x16 的巨區塊。4x4 的 Block 總共有 9 種的預測方向,16x16 的巨區塊總共有 4 種的預測方向。
在 H.264 標準中,I (Intra)畫面中,所有的巨區塊都必須以上述的方法編碼 而成。通常經過 Intra Prediction 的巨區塊所使用的資料量會比較大,但相對的壓 縮的影像也會較為接近原始影像。
圖 4.2 Macroblock:16x16, 4x4, 2 種區塊大小
4.1.2 運動估測(Motion Estimation)
當一個畫面在編碼的時候,需要使用到時間序列在前面或後面的畫面來編碼 時,稱為畫面間的預測(Inter Prediction)並且必須做運動估測找出運動向量 (Motion Vector)。在 H.264 之中主要支援運動估計的區塊大小範圍由 16x16 到 4x4(Luminance),每一個巨區塊 (16x16 pixels)可以分成 4 種,如圖 4.3,而其中 8x8 的 Mode 又可以再細分成 4 種,如圖 4.4 所示,如此每一個巨區塊,總共有 7
圖 4.3 Macroblock : 16x16, 8x16, 16x8, 8x8, 4 種區塊大小
圖 4.4 8x8 block : 8x8, 4x8, 8x4, 4x4, 4 種區塊大小
對於上面所分出來的每一個區塊,都必須要計算出一個運動向量 (Motion Vector),而每一個運動向量和區塊的種類也都需要被編碼後傳送。如果選擇一個 較大的區塊(如: 16x16, 16x8, 8x16),則所需要的運動向量的和區塊的種類資料量 會比較少,但卻也因為較多細節的畫面經過運動補償(Motion Compensation)之後 剩下的預測誤差(Prediction Error)資料量會比較多。如選擇一個較小的區塊(如:
8x4, 4x4 等),雖然可以在運動補償過後,使得預測誤差資料量變小,但是因為區 塊變小而會增加的運動向量和區塊種類的資料量,而這些都會影響到資料壓縮的 效果。一般來說,較平滑的畫面通常用較大的區塊而較多細節部分的畫面則用較 小的區塊整體效能會比較好。
在 H.264 標準中,P(Prediction)和 B(Bi-Prediction)畫面,是屬於 Inter Prediction,
除了上述了區塊大小,也可以使用 4.1.1 的 Intra Prediction 的 2 種區塊大小,所 使用的方法是一樣的,另外 P 畫面還有一種區塊模式,當一個巨區塊沒有編碼 後剩下的預測誤差需要傳送,並且也不需要傳送運動向量的資訊時候,叫做 Skip Mode,此種類在解碼的過程中,並不使用到運動向量來表示預測後的結果。另
外,在 B 畫面之中,當一個巨區塊 (或 8x8 區塊)種類是利用參考畫面 (Reference Frame)裡相對位置的巨區塊(Co-located Macroblock)所產生的時候,此區塊的運動 向量則是依據和參考畫面的時間距離的比率 (Temporal Distance Scaling)來產 生,叫做 Direct Mode。表 4.2 為對 I、P、B 畫面使用所有區塊大小的整理。
表 4.2 對於 I 、P、 B 畫面所可以使用到的巨區塊(區塊)的種類
Frame Type Skip Direct 16x16 16x8 8x16 8x8 8x4 4x8 4x4 Intra16x16 Intra4x4
I √ √
P √ √ √ √ √ √ √ √ √ √
B √ √ √ √ √ √ √ √ √ √