還記得從國小開始,一接觸影像檔案,其格式不是GIF就是JPEG,然而使用至今,一直都沒有特別去注意它的原理,實在可惜,既然因為研究接觸到影像壓縮格式,那我就簡潔地來瞭解JPEG的特色~所以什麼是JPEG?
起源
在電腦資訊科學中,JPEG是一種針對相片影像而廣泛使用的一種失真壓縮標準方法。這個名稱代表Joint Photographic Experts Group(聯合影像專家小組,超級難記憶,一直記不起來這個全名)。此團隊創立於西元1986年,1992年發布了JPEG的標準而在1994年獲得了ISO 10918-1的認定。JPEG與視訊音訊壓縮標準的MPEG(Moving Picture Experts Group)很容易混淆,但兩者是不同的組織及標準。
壓縮模式
- 順序式編碼(Sequential Encoding)
一次將影像由左到右、由上到下順序處理。 - 遞增式編碼(Progressive Encoding)
當影像傳輸的時間較長時,可將影像分數次處理,以從模糊到清晰的方式來傳送影像。這就是為何影像檔案過大,當網頁載入影像時,會先以模糊的影像顯示~ - 無失真編碼(Lossless Encoding)
- 階梯式編碼(Hierarchical Encoding)
影像以數種分辨率來壓縮,其目的是為了讓具有高分辨率的影像也可以在較低分辨率的設備上顯示。
壓縮步驟
由於JPEG的無損壓縮方式並不比其它的壓縮方法更優秀,因此我們著重來看它的有損壓縮。以一張24位元彩色影像為例,JPEG的壓縮有五個步驟:
1. 色彩空間轉換
由於JPEG只支援YUV色彩空間的資料結構,而不支援RGB色彩空間的資料結構,所以在將彩色影像進行壓縮之前,必須先對色彩空間進行資料轉換。各個值的轉換可以透過下面的轉換公式計算獲得:
Y=0.299R+0.587G+0.114B
U=-0.169R-0.3313G+0.5B
V=0.5R-0.4187G-0.0813B
其中,Y成份表示一個像素的亮度,U和V成份一起表示色調與飽和度。
這種編碼系統非常有用,因為人類的眼睛對於亮度差異的敏感度高於色彩變化。使用這種知識,編碼器(encoder)可以被設計得更有效率地壓縮影像。
2. 縮減取樣(Downsampling)
轉換完成之後還需要進行資料採樣。一般使用的採樣比例是4:1:1或4:2:2。由於在執行了此項工作之後,每兩行資料只保留一行,因此,採樣後影像資料量將壓縮為原來的一半。
3. 離散餘弦變換(Discrete cosine transform)
DCT(Discrete Cosine Transform)是將影像訊號在頻率域上進行變換,分離出高頻和低頻信息的處理過程。然後再對影像的高頻部分(即影像細節)進行壓縮,以達到壓縮影像資料的目的。
首先將影像劃分為多個8*8的矩陣。然後對每一個矩陣作DCT變換。變換後得到一個頻率係數矩陣,其中的頻率係數都是浮點數。
4. 量化(Quantization)
由於在後面編碼過程中使用的資料本都是整數,因此需要對變換後的頻率係數進行量化,將之轉換為整數。
由於進行資料量化後,矩陣中的資料都是近似值,於是和原始影像資料之間有了差異,這就是造成影像壓縮後失真的主要原因。
在這一過程中,質量因子的選取最為重要。值選得過大,可以大幅度提高壓縮比,然而影像質量就比較差;反之,質量因子越小(最小為1),影像重建質量越好,但是壓縮比越低。對此,ISO已經制定了一組供JPEG代碼實現者使用的標準量化值。
5. 熵編碼技術(entropy coding)
從前面過程我們可以看到,色彩空間轉換完成到編碼之前,影像並沒有得到進一步的壓縮,DCT變換和量化可以說是為編碼階段做準備。
編碼採用兩種機制:一是0值的行程長度編碼;二是熵編碼(Entropy Coding)。
在JPEG中,採用曲迴序列,即以矩陣對角線的法線方向作「之」字排列矩陣中的元素。這樣做的優點是使得靠近矩陣左上角、值比較大的元素排列在行程的前面,而行程的後面所排列的矩陣元素基本上為0值。行程長度編碼是非常簡單和常用的編碼方式。
編碼實際上是一種基於統計特性的編碼方法。在JPEG中允許採用HUFFMAN編碼或者算術編碼。
壓縮影像效果
以上說了那麼多,也許不太有感覺,直接以圖做實驗就可以知道效果,並比較不同壓縮度下檔案大小~








隨意留個言吧:)~