Jpeg

**JPEG** 或稱 **JPG**，是一種針對相片影像而廣泛使用的失真壓縮標準方法，由**聯合圖像專家小組**（英語：**J**oint **P**hotographic **E**xperts **G**roup）開發。此團隊創立於 1986 年，1992 年發布了 JPEG 的標準而在 1994 年獲得了 ISO 10918-1 的認定。JPEG 與視訊音訊壓縮標準的 MPEG（Moving Picture Experts Group）很容易混淆，但兩者是不同的組織及標準。

JPEG 本身只有描述如何將一個影像轉換為位元組的數據串流（streaming），但並沒有說明這些位元組如何在任何特定的儲存媒體上受封存起來。JPEG 的壓縮方式通常是失真壓縮，即在壓縮過程中圖像的品質會遭受到可見的破壞，有一種以 JPEG 為基礎的標準 Lossless JPEG 是採用無失真的壓縮方式，但 Lossless JPEG 並沒有受到廣泛的支援。

一個由 C-Cube Microsystems 等公司所建立的額外標準，稱為 **JFIF**（**J**PEG **F**ile **I**nterchange **F**ormat，JPEG 檔案交換格式，聯合圖像專家小組檔案交換格式）詳細說明如何從一個 JPEG 串流，產出一個適合於電腦儲存和傳輸（像是在網際網路上）的檔案。在普遍的用法，當有人稱呼一個 "JPEG 檔案 "，一般而言他是意指一個 JFIF 檔案，或有時候是一個 Exif JPEG 檔案。然而，也有其他以 JPEG 為基礎的檔案格式，像是 JNG。

使用 JPEG 格式壓縮的圖片檔案一般也稱為 JPEG Files，最普遍使用的副檔名格式為.jpg，其他常用的副檔名還包括.JPEG、.jpe、.jfif 以及.jif。JPEG 格式的資料也能受嵌進其他類型的檔案格式中，像是 TIFF 類型的檔案格式。

JPEG/JFIF 是全球資訊網上最普遍的用來儲存和傳輸相片的格式。它並**不**適合於線條繪圖（drawing）和其他文字或圖示（iconic）的圖形，因為它的壓縮方法用在這些類型的圖形上，得到的結果並不好（PNG 和 GIF 通常是用來儲存這類的圖形；GIF 每個像素只有 8 位元，並不很適合於儲存彩色相片，PNG 可以無失真地儲存相片，但是檔案太大的缺點讓它不太適合在網路上傳輸）。

對於 JFIF 的 MIME 媒體類型是 _image/JPEG_（定義於 RFC 1341）。

## JPEG 編 / 解碼器範例

### 編碼

JPEG 標準中許多選項很少使用，大多數圖像軟體在建立 JPEG 檔案時使用更簡單的 JFIF 格式。當應用到一個擁有每個像素 24 位元（24 bits per pixel，紅、藍、綠各有八位元）的輸入時，這邊只有針對更多普遍編碼方法之一的簡潔描述。這個特定的選擇是一種失真資料壓縮方法。

#### 色彩空間轉換

首先，影像由 RGB（紅綠藍）轉換為一種稱為 YUV 的不同色彩空間。這與類比 PAL 格式彩色電視傳輸所使用的色彩空間相似，但是更類似於 MAC 電視傳輸系統運作的方式。但不是類比 NTSC，類比 NTSC 使用的是 YIQ 色彩空間。

* Y 成份表示一個像素的亮度
* U 和 V 成份一起表示色調與飽和度。

YUV 分量可以由 PAL 制系統中歸一化（經過伽馬校正）的 R',G',B' 經過下面的計算得到：

* Y=0.299R'+0.587G'+0.114B'
* U=-0.147R'-0.289G'+0.436B'
* V=0.615R'-0.515G'-0.100B'

這種編碼系統非常有用，因為人眼對亮度差異的敏感度高於色彩變化。在此前提下可以設計更加高效壓縮圖像的編碼器（encoder）。

#### 縮減取樣（Downsampling）

經過 RGB 到 YUV 顏色空間的轉換後，開始進行縮減採樣來減少 U 和 V 的成份（稱為 "縮減取樣" 或 "色度抽樣"（chroma subsampling）。在 JPEG 上這種縮減取樣的比例可以是 4:4:4（無縮減取樣），4:2:2（在水平方向 2 的倍數中取一個），以及最普遍的 4:2:0（在水平和垂直方向 2 的倍數中取一個）。對於壓縮過程的剩餘部份，Y、U、和 V 都是以非常類似的方式來個別地處理。

#### 離散餘弦變換（Discrete cosine transform）

下一步，將影像中的每個成份（Y, U, V）生成三個區域，每一個區域再劃分成如瓷磚般排列的一個個的 8×8 子區域，每一子區域使用二維的離散餘弦變換（DCT）轉換到頻率空間。

如果有一個如這樣的的 8×8 的 8 - 位元（0~255）子區域：

　
: ${\begin{bmatrix}52&55&61&66&70&61&64&73\\63&59&55&90&109&85&69&72\\62&59&68&113&144&104&66&73\\63&58&71&122&154&106&70&69\\67&61&68&104&126&88&68&70\\79&65&60&70&77&68&58&75\\85&71&64&59&55&61&65&83\\87&79&69&68&65&76&78&94\end{bmatrix}}$

接著推移 128，使其範圍變為 -128~127，得到結果為

　
: ${\begin{bmatrix}-76&-73&-67&-62&-58&-67&-64&-55\\-65&-69&-73&-38&-19&-43&-59&-56\\-66&-69&-60&-15&16&-24&-62&-55\\-65&-70&-57&-6&26&-22&-58&-59\\-61&-67&-60&-24&-2&-40&-60&-58\\-49&-63&-68&-58&-51&-60&-70&-53\\-43&-57&-64&-69&-73&-67&-63&-45\\-41&-49&-59&-60&-63&-52&-50&-34\end{bmatrix}}$

且接著使用離散餘弦變換，和捨位取最接近的整數，得到結果為

　
: ${\begin{bmatrix}-415&-30&-61&27&56&-20&-2&0\\4&-22&-61&10&13&-7&-9&5\\-47&7&77&-25&-29&10&5&-6\\-49&12&34&-15&-10&6&2&2\\12&-7&-13&-4&-2&2&-3&3\\-8&3&2&-6&-2&1&4&2\\-1&0&0&-2&-1&-3&4&-1\\0&0&-1&-4&-1&0&1&2\end{bmatrix}}$

左上角之相當大的數值稱為 DC 係數（直流係數）；其他 63 個值稱為 AC 係數（交流係數）。下面將對所有 8×8 表格中的 DC 係數使用差分編碼，對 AC 係數使用行程編碼。

#### 量化（Quantization）

人類眼睛在一個相對大範圍區域，辨別亮度上細微差異是相當的好，但是在一個高頻率亮度變動之確切強度的分辨上，卻不是如此地好。這個事實讓我們能在高頻率成份上極佳地降低資訊的數量。簡單地把頻率領域上每個成份，除以一個對於該成份的常數就可完成，且接著捨位取最接近的整數。這是整個過程中的主要失真運算。以這個結果而言，經常會把很多更高頻率的成份捨位成為接近 0，且剩下很多會變成小的正或負數。

一個普遍的量化矩陣是：

　
: ${\begin{bmatrix}16&11&10&16&24&40&51&61\\12&12&14&19&26&58&60&55\\14&13&16&24&40&57&69&56\\14&17&22&29&51&87&80&62\\18&22&37&56&68&109&103&77\\24&35&55&64&81&104&113&92\\49&64&78&87&103&121&120&101\\72&92&95&98&112&100&103&99\end{bmatrix}}$

使用這個量化矩陣與前面所得到的 DCT 係數矩陣逐項相除，得到結果為：

　
: ${\begin{bmatrix}-26&-3&-6&2&2&-1&0&0\\0&-2&-4&1&1&0&0&0\\-3&1&5&-1&-1&0&0&0\\-3&1&2&-1&0&0&0&0\\1&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0\end{bmatrix}}$

舉個例子，使用−415（DC 係數）且捨位得到最接近的整數

　
: $\mathrm {round} \left({\frac {-415}{16}}\right)=\mathrm {round} \left(-25.9375\right)=-26$

#### 熵編碼技術（entropy coding）

熵編碼是無失真資料壓縮的一個特別形式。它牽涉到將影像成份以 Z 字型（zigzag）排列，把相似頻率群組在一起（矩陣中往左上方向是越低頻率之係數，往右下較方向是較高頻率之係數），插入長度編碼的零，且接著對剩下的使用霍夫曼編碼。
JPEG 標準也允許（但是並不要求）在數學上優於霍夫曼編碼的算術編碼之使用。然而，這個特色幾乎很少獲使用，因為它被專利所涵蓋，且它相較於霍夫曼編碼在編碼和解碼上會更慢。使用算術編碼一般會讓檔案更小約 5%。

對於前者量化的係數所作的 Z 字型序列會是：

−26, 

−3, 0, 

−3, −2, −6, 

2, −4, 1, −3, 

1, 1, 5, 1, 2, 

−1, 1, −1, 2, 0, 0, 

0, 0, 0, −1, −1, 0, 0, 

0, 0, 0, 0, 0, 0, 0, 0, 

0, 0, 0, 0, 0, 0, 0, 

0, 0, 0, 0, 0, 0, 

0, 0, 0, 0, 0, 

0, 0, 0, 0, 

0, 0, 0, 

0, 0, 

0

當剩下的所有係數都是零，對於過早結束的序列，JPEG 有一個特別的霍夫曼編碼用詞。使用這個特殊的編碼用詞，EOB，該序列變為

−26, 

−3, 0, 

−3, −2, −6, 

2, −4, 1 −3, 

1, 1, 5, 1, 2, 

−1, 1, −1, 2, 0, 0, 

0, 0, 0, −1, −1, EOB

#### 壓縮比率與不自然痕跡（artifact）

按：artifact 在這個領域又解釋為贗像、非自然訊號、人為現象。

在量化階段時，依照除數的不同，會使結果的壓縮比率可能有很多變化。10:1 通常可得到無法使用肉眼分辨與原圖差異的影像。100:1 壓縮通常是可行的，但與原圖相較，會看出明顯的不自然痕跡。壓縮的適當等級是依據要壓縮那一種影像而定。

使用全球資訊網的人，可能熟悉這種出現在 JPEG 數位影像，已知壓縮人為現象的不規則現象。這是由於 JPEG 演算法的量化步驟所造成的結果。這種現象在臉部相片中的眼睛四周特別明顯。他們可以藉由選擇壓縮的較低水平（使用較低的壓縮率）來減少這種現象；他們可能藉由使用無失真檔案格式來儲存一個影像來消除這種現象，然而針對相片影像，這樣通常會使檔案大小增加。

### 解碼

解碼來顯示影像，包含反向作以上所有的過程

取 DCT 係數矩陣（在把 DC 係數差異加回去之後）

　
: ${\begin{bmatrix}-26&-3&-6&2&2&-1&0&0\\0&-2&-4&1&1&0&0&0\\-3&1&5&-1&-1&0&0&0\\-3&1&2&-1&0&0&0&0\\1&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0\end{bmatrix}}$

且以前面的量化矩陣乘以它，得到

　
: ${\begin{bmatrix}-416&-33&-60&32&48&-40&0&0\\0&-24&-56&19&26&0&0&0\\-42&13&80&-24&-40&0&0&0\\-42&17&44&-29&0&0&0&0\\18&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0\end{bmatrix}}$

左上角的部份與原本 DCT 係數矩陣非常接近地相似。使用反向 DCT 得到一個有數值的影像（仍然受移位 128）

　
: $\left[{\begin{array}{rrrrrrrr}-66&-63&-71&-68&-56&-65&-68&-46\\-71&-73&-72&-46&-20&-41&-66&-57\\-70&-78&-68&-17&20&-14&-61&-63\\-63&-73&-62&-8&27&-14&-60&-58\\-58&-65&-61&-27&-6&-40&-68&-50\\-57&-57&-64&-58&-48&-66&-72&-47\\-53&-46&-61&-74&-65&-63&-62&-45\\-47&-34&-53&-74&-60&-47&-47&-41\end{array}}\right]$

且對每一個項目加上 128

　
: $\left[{\begin{array}{rrrrrrrr}62&65&57&60&72&63&60&82\\57&55&56&82&108&87&62&71\\58&50&60&111&148&114&67&65\\65&55&66&120&155&114&68&70\\70&63&67&101&122&88&60&78\\71&71&64&70&80&62&56&81\\75&82&67&54&63&65&66&83\\81&94&75&54&68&81&81&87\end{array}}\right].$

這是解壓縮的子影像，且可以用來與原本子影像相比（也可以看右方的影像），藉由取兩者之間的差異（原本 — 解壓縮）得到誤差值。

　
: $\left[{\begin{array}{rrrrrrrr}-10&-10&4&6&-2&-2&4&-9\\6&4&-1&8&1&-2&7&1\\4&9&8&2&-4&-10&-1&8\\-2&3&5&2&-1&-8&2&-1\\-3&-2&1&3&4&0&8&-8\\8&-6&-4&-0&-3&6&2&-6\\10&-11&-3&5&-8&-4&-1&-0\\6&-15&-6&14&-3&-5&-3&7\end{array}}\right]$

每個像素大約是 5 的平均絕對誤差，也就是說， ${\frac {1}{64}}\sum _{x=1}^{8}\sum _{y=1}^{8}|e(x,y)|=4.8750$ 。誤差在左下角顯而易見，左下方的像素變得比它鄰近右方的像素還更暗。

## 用法

JPEG 在色調及顏色平滑變化的相片或是寫實繪畫（painting）上可以達到它最佳的效果。在這種情況下，它通常比完全無失真方法作得更好，仍然可以產生非常好看的影像（事實上它會比其他一般的方法像是 GIF 產生更高品質的影像，因為 GIF 對於線條繪畫（drawing）和圖示的圖形是無失真，但針對全彩影像則需要極困難的量化）。

### 相片

JPEG 壓縮的不自然現象可以很好地調和到細微非均勻材質的相片中，因此允許得到更高的壓縮率。

附註：以上的影像並不是 IEEE/CCIR/EBU 測試影像，且壓縮編碼器的設定並沒有指明或是可以得到。

中等品質的相片只有六分之一的儲存空間，但是幾乎沒有明顯的細節損失或是看得到的人為效果。然而，一旦超過一個某整的壓縮限度，壓縮的影像逐漸地顯現出可以看得到的瑕疵。參考比率失真理論（rate distortion theory）的文章有針對這種限度效果的數學上之解釋。

### 醫學影像：少見的 JPEG 12 位元支援模式

有很多醫學的影像系統可以建立和處理 12 位元 JPEG 影像。12 位元 JPEG 格式已經是 JPEG 規格的一部份，但是非常少商業軟體程式（或網頁瀏覽器）支援這種不常使用的 JPEG 格式。

## 其他失真壓縮的編碼格式

更新的失真方法，尤其是小波壓縮（wavelet compression），在這些情況下甚至能作得更好。然而，JPEG 是一種建立得相當好的標準，擁有很多可使用的軟體，包含自由軟體，因此到 2005 年它持續獲大量使用。很多小波演算法受到專利保護，要在很多軟體專案中自由地使用他們是困難或是不可能的。

JPEG 委員會現在也已經建立其自有的小波基礎標準－JPEG 2000，希望最終能取代原來的 JPEG 標準。

## 潛在的專利爭議

在 2002 年 Forgent Networks 主張他擁有且將會履行在 JPEG 技術上的專利權，起因於一個在 1986 年已經歸檔的專利（美國專利第 4,698,672 號）。這個公告已經引起一陣大騷動，令人想起 Unisys 試圖主張對於 GIF 影像壓縮標準的權利。

JPEG 委員會審慎調查這個在 2002 年所主張的專利，且發現他們因為前案而無效作廢。其他的也已推斷 Forgent 並無擁有涵蓋 JPEG 的專利。儘管如此，在 2002 年和 2004 年之間，Forgent 藉由把他們的專利授權給某些 30 家公司，而獲得大約 9 千萬美元。在 2004 年 4 月，Forgent 控告 31 家其他公司來強求更多的授權支付。同年的七月，21 家較大的電腦公司組成的協會提出反控告，包含使該專利無效的目標。然而，到 2005 年 7 月的時候，這場官司仍然持續中。

JPEG 委員會在他的明確目標中有一項，是他們的標準在不支付授權金之下是可以受實作的，且他們已從超過 20 個大型組織中，得到適當的授權權利給他們即將到來的 JPEG 2000 標準。

### 專利案結束

經過數年的糾纏，於 2006 年 11 月，JPEG 專利持有者 Forgent Networks 終於與 30 家 PC 廠商結束了侵權官司，代價是 PC 廠商向 Forgent 賠款 800 萬美元，而不是 Forgent 期望的 1 億美元。

在與 PC 廠商大打官司之前，Forgent 已經與 60 多家公司和解，獲得的專利費用總額高達 1.1 億美元。包括雅虎在內的 45 家 PC 廠商拒絕就 4698672 號專利問題和解，而是選擇了對簿公堂，不過其中 15 家在此之前已經與 Forgent 和解。

雖然還是賠了款，但 PC 廠商們並沒有輸掉官司；雖然沒能得到自己想要的大筆美金，Forgent 也沒有徹底失敗。在非盈利性組織美國公共專利基金會（PPF）的協助下，他們設法獲得了美國專利和商標局（USPTO）的認可，對 Forgent 專利的有效性在 2 月和 6 月兩次重新進行了鑑定，最終法庭限制了 Forgent 專利的應用範圍。而從另一方面看，Forgent 的專利也得到了一定的維護，這要比被徹底推翻好得多，Forgent 也表示對結果感到很滿意。

Forgent CEO Richard Snyder 稱：「在 '672 專利的有效期內，我們已經獲得了 1.1 億多美元。很快，Forgent 還會再次有所行動。我們的精力現在已經轉移到 '746 專利上，並等待 2007 年 5 月的陪審團裁決，同時我們還會繼續促進（分公司）NetSimplicity 的軟體業務。」

## 無損耗旋轉（lossless JPEG rotation）

雖然任何對 JPEG 圖像的處理都有可能導致因為解壓後再壓縮而引起的損耗，然而，對於簡單的旋轉動作，數學上是可以有辦法使圖像得以旋轉而無損圖像本身的資料。也就是說，有一種方法可以在無需把圖像解壓後才可以旋轉。這是因為 JPEG 的檔案格式本身是以一個個模組為單位來壓縮，所以，只需要把模組重排，再對每個模組旋轉，就可以達至無損耗的旋轉。

使用者在操作上加以注意。例如：在 Adobe Photoshop 裡，使用者若要作無損耗旋轉前，必須在載入圖像之後立刻用「Save As...」功能儲存一個備份。然後當圖像旋轉過後，由於 Photoshop 已掌握了圖像的基本資料，所以在儲存時得以使用原來的設定。若沒有作事先儲存，Photoshop 就會把旋轉後的圖像重新計算各項參數，並重新對圖像進行壓縮處理。這樣就會造成資料的損耗。

## 壓縮標準

JPEG 是由國際標準組織（ISO）和國際電話電報諮詢委員會（CCITT）為靜態圖像所建立的第一個國際數位影像壓縮標準，也是至今一直在使用的、應用最廣的圖像壓縮標準。JPEG 由於可以提供失真壓縮，因此壓縮比可以達到其他傳統壓縮演算法無法比擬的程度。

JPEG 的壓縮模式有以下幾種：

* 順序式編碼（Sequential Encoding）

　
: 一次將圖像由左到右、由上到下順序處理。

* 遞增式編碼（Progressive Encoding）

　
: 當圖像傳輸的時間較長時，可將圖像分數次處理，以從模糊到清晰的方式來傳送圖像（效果類似 GIF 在網路上的傳輸）。

* 無失真編碼（Lossless Encoding）
* 階梯式編碼（Hierarchical Encoding）

　
: 圖像以數種解析度來壓縮，其目的是為了讓具有高解析度的圖像也可以在較低解析度的裝置上顯示。

在 Independent JPEG Group 所提供的原始碼上，有 jpegtran 程式，就提供了優化 Huffman，轉成漸進式，鏡射，旋轉這些無損耗轉換。

參看：無損耗 JPEG 旋轉程式列表 （頁面存檔備份，存於網際網路檔案館）（英語）

## 參見

* 數位相機 - 數位相框
* 影像壓縮
* JPEG-LS 非失真壓縮標準
* JPEG 2000
* JPEG XR
* Motion JPEG
* 影像編輯程式
* 獨立 JPEG 小組（Independent JPEG Group）的 Libjpeg

## 參考來源

## 外部連結

* Official JPEG 官方網站 （頁面存檔備份，存於網際網路檔案館）
* JPEG 常見問題與回答（FAQ） （頁面存檔備份，存於網際網路檔案館）
* Wotsit.org 在 JPEG 格式的進入點
* ITU T.81 JPEG 壓縮 （頁面存檔備份，存於網際網路檔案館）（PDF）
* JFIF 檔案格式 （頁面存檔備份，存於網際網路檔案館）（PDF）
* JPEG 靜態圖像壓縮標準，Gregory K. Wallace 簡編
* JPEG 壓縮（Gernot Hoffmann）
* JPEG 資源的開放列表 （頁面存檔備份，存於網際網路檔案館）
* Jpeg Decoder Open Source Code , Copyright (C) 1995-1997, Thomas G. Lane. （頁面存檔備份，存於網際網路檔案館）