影象壓縮

影象壓縮是資料壓縮技術在數字影象上的應用，目的是減少影象資料中的冗餘資訊，從而用更加高效的格式儲存和傳輸資料。壓縮的原理.資料越一致，代表統計特性越集中，包括傅立葉轉換域(Fourier transform domain)、直方圖(histogram)、特徵值(eigenvalue)...等方面的集中度。壓縮的通則即是利用資料的一致性，越一致的資料，越能夠進行壓縮。除此之外，也可利用資料的規則性與可預測性來對其作壓縮。通常而言，若可以用比較精簡的自然語言來描述一個東西，那麼也就越能夠對這個東西作壓縮。影像的一致性.空間上的一致性.影像中每一點的值，會和相鄰的點的值非常接近。formula_1 ≈ formula_2formula_3 ≈ formula_2直方圖(histogram)是統計出現次數的一種方法，它會去計算一個向量(vector)或一個矩陣(matrix)當中，有多少個點會等於某一個值。舉例來說，formula_5則 formula_6的直方圖(histogram)為formula_7，formula_8，formula_9，formula_10，formula_11將影像相臨值的差異，利用直方圖(histogram)來統計，會發現值幾乎都落在0附近。頻率上的一致性.一張影像的頻譜大多集中在低頻的地方。影像的「頻率」是在空間域(space domain)作分析：常用影像壓縮技術.壓縮的技術分成兩種：失真壓縮(lossy compression)的壓縮率較高，但無法重建原來的資料，例如：DFT、DCT、KLT(搭配量化(quantization)與截斷(truncation))、4：2：2或4：2：0、多項式曲線的近似(polynomial approximation)；無失真壓縮(lossless compression)的壓縮率較低，但可以重建原來的資料，例如：二元編碼(binary coding)、霍夫曼編碼(Huffman coding)、算術編碼(arithmetic coding)、格倫布編碼 (Golomb coding)。4：2：2或4：2：0.此技術運用的是空間上的一致性。將畫素(pixel)的RGB值，利用以下的公式轉換成YCbCrY = 0.299 R + 0.578 G + 0.114 BCb = -0.169 R - 0.331 G + 0.500 B ( Cb = 0.565 (B - Y) )Cr = 0.500 R - 0.419 G - 0.081 B ( Cr = 0.713 (R - Y) )其中 Y 是亮度(Luminance)，Cb是藍色色差(chrominance) ，Cr 是紅色色差(chrominance)。人類的視覺系統，對於亮度比較敏感，而對於彩度比較不敏感。因此我們可以利用人類視覺的特性，減少Cb、Cr的取樣個數，取樣格式有4：2：2 與 4：2：0兩種。假設一張圖片原本壓縮前(即4：4：4)的Y、Cb、Cr各有M×N個值，4：2：2的壓縮Y保留為M×N個值、Cb、Cr則取樣到各剩下M/2×N個值；4：2：0的壓縮Y同樣保留為M×N個值、Cb、Cr則進一步取樣到各剩下M/2×N/2個值。從4：4：4到4：2：2，壓縮率約為2/3；從4：4：4到4：2：0，壓縮率約為1/2。從4：4：4壓縮到4：2：2，再壓縮到4：2：0，單一畫素(pixel)儲存的bit 數可以等效為：24 bits/pixel → 16 bits/pixel → 12 bits/pixel。還原時，則是利用插值(interpolation)的方式：formula_12 = 1/2 ×(formula_13 + formula_14 )8×8 離散餘弦轉換(DCT).此技術運用的是頻率上的一致性。通常我們會將影像切成8×8的方格作離散餘弦轉換(DCT)，原因如下：經過離散餘弦轉換(DCT)後的8×8矩陣稱為DCT矩陣。DCT矩陣最左上角的係數稱為直流(DC)成分，而其他63個係數則稱為交流(AC)成分。越靠近DC值的AC值係數表示頻率較低的部分，而越往右下角方向的AC值代表的頻率則越高。2D的8×8 DCT的輸出通常會按照"zigzag"的順序，將2D轉為1D的型態。按照此順序排列，能量可能較大的會被擺在前面，而後面的高頻成分從某個值開始後幾乎為零，以符號EOB(end of block)表示，指後面的高頻的部分經過量化(quantization)之後皆為0。差分編碼(Differential coding).此技術運用的是空間上的一致性。差分編碼指的是，除第一個元素外，將其中各元素都表示為各該元素與其前一元素的差的編碼。對formula_15 ，是針對 formula_15 - formula_17 去編碼，而不是直接對formula_15作編碼。霍夫曼編碼(Huffman coding).霍夫曼編碼(Huffman coding)的編碼原則：(Greedy Algorithm)不滿足以上的條件則往上推一層。算術編碼(Arithmetic coding).霍夫曼編碼(Huffman coding)是將每一筆資料分開編碼，算術編碼(Arithmetic coding)則是將多筆資料一起編碼，因此壓縮效率比霍夫曼編碼(Huffman coding)更高，近年來的壓縮資料大多使用算術編碼(Arithmetic coding)。假設要對X來作二進位的編碼，且經過事先的估計，formula_23 的機率為0.8，formula_24 的機率為0.2。若實際上輸入的資料為 formula_25Initial(formula_26)：lower =0，upper=0.8When i = 2 (formula_27)：lower =0，upper=0.64When i = 3 (formula_28)：lower =0，upper=0.512When i = 4 (formula_29)：lower =0.4096，upper=0.512When i = 5 (formula_30)：lower =0.4096，upper=0.49152When i = 6 (formula_31)：lower =0.4096，upper=0.475136由於 lower =0.4096，upper=0.475136lower &lt;= 14*formula_32 &lt; 15*formula_32 &lt;= upper所以編碼的結果為formula_34動態影像之編碼.MPEG(Moving Picture Experts Group)為動態影像編碼的國際標準。動態影像編碼的使用原理為：不同時間，同一個畫素(pixel)之間的相關度通常極高，只需對有移動的物件(objects)記錄移動向量(motion vector)。formula_35 ：時間為t的影像如何由formula_36 ，formula_37 來預測formula_38？(1)移動向量formula_39，formula_40(2)預測formula_38：formula_42 = formula_43(3)計算「預測誤差」formula_44 = formula_38 - formula_42對預測誤差 formula_44 作編碼。影像檔案的處理(Matlab).基本概念..bmp: 沒有經過任何壓縮處理的圖檔.jpg: 有經過JPEG 壓縮的圖檔例如，若要對影像做2D離散傅立葉轉換(Discrete Fourier transform)：im=imread('C:\Program Files\MATLAB\pic\Pepper.bmp');im=double(im);Imf=fft2(im);範例.im=double(imread('C:\Program Files\MATLAB\pic\Pepper.bmp'));size(im);image(im);colormap(gray(256));im2=double(imread('C:\Program Files\MATLAB\pic\Pepper512c.bmp'));size(im2);壓縮方法.影象壓縮可以是有損資料壓縮也可以是無損資料壓縮。常見的應用有raw和tiff格式等。gif和jpeg是有失真壓縮。透過DCT變換後選擇性丟掉人眼不敏感的訊號分量，實現高壓縮比率。無失真壓縮.對於如繪製的技術圖、圖表或者漫畫，優先使用無失真壓縮，這是因為有失真壓縮方法，尤其是在低的位速條件下，將會帶來壓縮失真，如醫療影象或者用於存檔的掃描影象……等，這些有價值的內容的壓縮也儘量選擇無失真壓縮方法。有失真壓縮.有損方法非常適合於自然的影象，例如一些應用中影象的微小損失是可以接受的，這樣就可以大幅度地減小位速。特性.影象壓縮的目的就是在給定位速或者壓縮比下實現最好的影象質量。但是，還有一些其它的影象壓縮機制的重要特性：壓縮方法的質量經常使用峰值信噪比來衡量，峰值信噪比用來表示圖象有失真壓縮帶來的噪聲。但是，觀察者的主觀判斷也認為是一個重要的、或許是最重要的衡量標準。Jian-Jiun Ding, “Advanced Digital Signal Processing”, NTU, 2021.