• 沒有找到結果。

3. 數位影像壓縮系統

3.1. 概論

一般而言,多媒體的資料都是很龐大的,所以要紀錄或是傳遞都需要很大的容量 和頻寬,但是現有的資料儲存媒介(CD、DVD)和網路的頻寬都是有限的,所以資料壓 縮是一種必要的技術。在日常生活中,我們也可以看到類似的例子:當我們想從甲地 運送兩公噸的橘子汁到乙地,常用的手法便是先將橘子汁的水份分離出來,變成乾燥 的橘子汁粉加上一張兩公噸的字條,然後將這些東西運送到乙地,乙地的人只要根據 這張兩公噸的字條和橘子粉便能變回類似原來風味的橘子汁。這種手法是大多數人都 可以接受的,而且也達到經濟的目的。在視訊影像方面,我們也是想透過類似的手法 來達到減少資料量和頻寬的需求,以一個解析度為 720x480、每秒 30 張的視訊影像 (RGB)而言,在未經過壓縮之前每秒約 31MB 的資料量,換言之一張 700MB 的 CD 光 碟片大概只能儲存 22 秒的畫面。所以我們對視訊的壓縮有強烈的需求,但是也要盡量 達到無失真的程度以滿足使用著的需求。一般的視訊系統大概如下圖所示:

color

conversation Coder

Decoder color

conversation

RGB YCbCr

YCbCr RGB

Network/Storage

color

conversation Coder

Decoder color

conversation

RGB YCbCr

YCbCr RGB

Network/Storage

Fig. 8 Video System

當我們從機器擷取下來的影像,通常一個像素(Pixel)是由三個分量所組成的,分

11

別代表:紅色(Red)、綠色(Green)和藍色(Blue)三個原色。但是由於人眼對各個顏色的 敏銳度不同,所以在影像處理上又定義了明度像素(Luminance Pixel,以 Y 表示)和色 度像素(Chrominance Pixel,以 Cb 和 Cr 表示)[6]。藉由人眼對明度像素的高敏感度和 色度像素比較不敏感的特性,我們將影像資料從 RGB 轉到 YCbCr 以符合人眼的感光 特性。因為人眼對色度像素比較不敏感的特性,所以我們會將色度像素作取樣 (sub - sampling)的動作,藉以達到資料壓縮的目的。

4:4:4

4:1:1

4:2:2

4:2:0 croma sample luma sample

4:4:4

4:1:1

4:2:2

4:2:0 croma sample luma sample croma sample luma sample

Fig. 9 Chrominance Pixel Sub-Smapling

這樣的動作(RGB 轉到 YCbCr420)可以達到壓縮一半資料量的效果,這是影像壓 縮的第一步,也是影像失真的第一步,不過運用人眼的特性,這種失真是可以被接受 的。本篇論文探討的方向都是在於影像格式為 YCbCr420。

壓縮端的模組我們稱為 Coder 或 Encoder,主要的工作便是去除影像資料間的空 間 上 的 資 料 多 餘 量 (Spatial Redundancy) 和 時 間 上 的 資 料 多 餘 量 (Temporal Redundancy),把影像資料壓縮到最精簡的程度(橘子粉),再透過網路或儲存媒介傳給 解壓端。解壓縮端的模組我們稱為 Decoder,主要的工作便是透過傳過來的影像壓縮 資料(橘子粉)和訊息(字條),把經過壓縮的影像資料一步一步的還原(橘子汁)。

temporal domain spatial domain

temporal domain spatial domain

Fig. 10 Characteristics of video sequence

一般的視訊壓縮系統都是階層式的壓縮系統(Layer coding),以一個畫面(frame)為 中心,連續的畫面組成序列(sequence)。當針對畫面作壓縮時,因為每種畫面的解析度 不盡相同,為了壓縮效率和標準化作業,所以會把畫面切割成固定大小的巨區塊 (macroblock)來做影像壓縮處理的基本單位。以 YCbCr420 的一般切分法是:明度 (luminance)畫面的巨區塊是 16x16,兩個色度(chrominance)畫面相對應的便是 8x8 的區 塊。

Y

16 16

Cb

8 8

Cr

8

Y

8 16

16

Cb

8 8

Cr

8 8

Fig. 11 Macroblock Layer

一般會把這編碼器和解碼器兩個模組合稱為 Codec (Coder/Decoder),在一般的編 碼 器 中 往 往 是 由 四 個 大 的 模 組 所 組 成 , 包 括 : 預 測 編 碼 (prediction) 、 轉 換 處 理 (transform)、量化處理(quantization)和熵編碼(entropy coding)。這四個模組的介紹如下:

3.1.1. 預測編碼 (prediction)

假設有一連串的數列要壓縮:【0, 1, 2, 3, 4, 5, …】,如果我們要直接編碼的話,每

13

一個符號(symbol)至少要用 3 個位元來表示。但是換個方向思考,我們只需要告訴解 碼端我們傳遞過去的是差值(residual),接下來我們要處理的便是像這樣的數列:【0, 1, 1, 1, 1, 1, …】,每一個符號我們只需要用 2 個位元就可以表示了,每個符號就可以節省 一個位元數,達到壓縮的效果。

相對於視訊序列中也包含許多這樣的特性,我們稱這種特性為資料的多餘性 (redundancy),預測編碼的目的就是要去除這種資料的多餘性,讓視訊序列的資料能用 最小的位元數來表示。視訊序列中的資料多餘性分為兩大類,包括畫面內的空間多餘 性(spatial redundancy)和畫面間的時間多餘性(temporal redundancy)。

想像我們所要壓縮的畫面是一扇藍色的大門,在這個大門內的每個像素值都是相 似的,當我們要壓縮目前的像素值,可以考慮用這個像素周圍的像素來做預測,我們 所需要做處理便是一些值域範圍較小差值(residual)。這種方法便是利用去除畫面內的 資料多餘性來達到壓縮的目的。

在空間多餘性方面,考慮我們所擷取的畫面間,很多時候畫面與畫面之間會有許 多重複的地方,例如我們在拍攝演講節目,畫面中除了演講人之外,其餘的背景幾乎 都是不動的。一般當我們壓縮目前的畫面時,我們會考慮用巨區塊(macroblock)或是更 小的區塊去前幾張的畫面作比對,找到一個最符合的區塊,我們所要壓縮的便是目前 區塊與最符合區塊的差值。我們必須要傳遞過去給解碼端的資料包括:區塊差值 (residual)和最符合區塊的位址(motion vector)。這種作區塊比對、尋找最佳區塊的動 作,稱為 Motion Estimation (ME);而作區塊差值的運算稱為 Motion Compensation (MC)。

previous frame current frame

current macroblock

search space

match macroblock

previous frame current frame

current macroblock

search space

match macroblock

Fig. 12 block motion estimation

預測編碼模組的優點是能有效的提高壓縮率,但是在做資料比對、找出最佳的預 測區塊的複雜度相當高,這是它的缺點之一。預測編碼基本上是建構在做為預測的像 素或是區塊是正確的條件上,但是如果是在網路的傳輸情況下,很有可能會有封包丟 失(packet lose)或位元錯誤(bit error)的情況產生,這時就會有錯誤延續(error propagation) 的情況出現。

3.1.2. 轉換處理 (transform)

轉換編碼是將區塊內的像素大小從時間域(time domain)轉到頻率域(frequency domain),因為人眼對低頻率的訊號比較敏感,對高頻的訊號比較不敏感。透過轉換基 底的特性,可以把能量集中在我們感興趣的低頻上,忽略比較不重要的高頻信號來達 到壓縮的效果。

一般在影像處理方面常見的轉換方式有兩種:DCT (discrete cosine transform)和 DWT (discrete wavelet transform) [7]。在視訊序列的壓縮標準上,一般還是以 DCT 為 主,透過 DCT 的矩陣轉換,會使能量集中在左上角(即低頻的區域),我們稱頻率最低 的 DCT 係數(即左上角的值)為 DC Term,其他的稱為 AC Term。DC Term 是最重要的 一個係數,可以代表整個畫面的平均;其他 AC Term 的值通常會趨近於 0,這種現象 在愈高頻的地方愈明顯。所以轉換處理後,在經過量化處理,會使高頻的區域出現一 堆 0,透過特殊的排列方式(如 Zig-zag Scan)可以將這些 0 集中在一起,便很適合熵編

15

碼(entropy coding)的處理。

original block dct coefficients

high frequency

high frequency

DC term DC term

high frequency

⎥⎥

original block dct coefficients

high frequency 援運算較昂貴的浮點數運算,所以常常在逆轉換(inverse transform)後會出現失真的情 況,稱為【iDCT mismatch】。

3.1.3. 量化處理 (quantization)

在經過轉換處理後的值域範圍通常都會放大,放大的結果我們必須用更多的位元

理來處理經過轉換處理後較高頻的係數,因為這些係數是比較不會影響解壓縮後的影 像品質,所以利用量化處理把這些高頻數值盡量量化成 0,來提升壓縮率。

original coefficients quantized values rescaled coefficients

quantize rescale

coefficient value may be anywhere

in this range

coefficients may only take a limited number of values

original coefficients quantized values rescaled coefficients

quantize rescale

coefficient value may be anywhere

in this range

coefficients may only take a limited number of values

Fig. 14 Quantization and rescaling [8]

3.1.4. 熵編碼 (entropy coding)

編碼法可以分為兩類:一種是固定長度的編碼法(FLC, fixed length coding),另一 種則是不固定長度的編碼法(variable length coding)。固定長度的編碼法使指每個符號 用固定長度的位元數來代表;不固定長度的編碼法是利用每個符號出現的機率不盡相 同,機率高的符號用比較少的位元數來代表,機率比較低的用較多的位元數來代表,

使的壓完一連串的符號後能使用較少的位元數。最有名的不定長度編碼法就是霍夫曼 編碼法(Huffman coding),利用符號出現的機率來建立霍夫曼樹(Huffman tree)來編碼。

但是在影像壓縮時,當我們還沒壓縮完整個的影像序列時,我們根本不清楚每個符號 出現的機率,所以影像壓縮標準(video coding standardization)會先根據一般的狀況統 計、分析來設計符號表,使的壓縮端和解壓端都能根據這些表來做熵編碼和解碼。

相關文件