JPEG

维基百科,自由的百科全书
跳转至: 导航搜索
JPEG
Phalaenopsis JPEG.png
由左至右,相繼以更高壓縮率壓縮的相片。
扩展名 .jpeg, .jpg, .jpe
.jfif, .jfi, .jif(容器)
互联网媒体类型 image/jpeg
类型代码 JPEG
统一类型标识 public.jpeg
開發者 Joint Photographic Experts Group

電腦中,JPEG(發音為jay-peg, IPA[ˈdʒeɪpɛg])是一種針對相片影像而廣泛使用的一種失真壓縮標準方法。這個名稱代表Joint Photographic Experts Group(聯合圖像專家小組)。此團隊創立於西元1986年,1992年發布了JPEG的標準而在1994年獲得了ISO 10918-1的認定。JPEG與視訊音訊壓縮標準的MPEG(Moving Picture Experts Group)很容易混淆,但兩者是不同的組織及標準。

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

一個由C-Cube Microsystems等公司所建立的額外標準,稱為JFIFJPEG File Interchange Format,JPEG檔案交換格式)詳細說明如何從一個JPEG串流,產出一個適合於電腦儲存和傳輸(像是在網際網路上)的檔案。在普遍的用法,當有人稱呼一個"JPEG檔案",一般而言他是意指一個JFIF檔案,或有時候是一個Exif JPEG檔案。然而,也有其他以JPEG為基礎的檔案格式,像是JNG

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

JPEG/JFIF是全球資訊網(World Wide Web)上最普遍的被用來儲存和傳輸照片的格式。它並適合於線條繪圖(drawing)和其他文字或圖示(iconic)的圖形,因為它的壓縮方法用在這些类型的圖形上,得到的結果并不好(PNGGIF格式通常是用來存储这类的圖形;GIF每个像素只有8位元,並不很適合於存储彩色照片,PNG可以無失真地儲存照片,但是檔案太大的缺点讓它不太适合在網路上传输)。

對於JFIF的MIME媒體类型是image/jpeg(定義于RFC 1341)。

編碼[编辑]

在JPEG標準中這個選項大多都是很少使用。當應用到一個擁有每個像素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)[编辑]

上面所作的轉換使下一步驟變為可能,也就是減少U和V的成份(稱為"縮減取樣"或"色度抽样"(chroma subsampling)。在JPEG上這種縮減取樣的比例可以是4:4:4(無縮減取樣),4:2:2(在水平方向2的倍數中取一個),以及最普遍的4:2:0(在水平和垂直方向2的倍數中取一個)。對於壓縮過程的剩餘部份,Y、U、和V都是以非常類似的方式來個別地處理。

離散餘弦變換(Discrete cosine transform)[编辑]

以8-位元灰階所顯示的8x8子影像

下一步,將影像中的每個成份(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系数使用行程编码[1]

量化(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 \\
  -4 &  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字型掃描矩陣的順序

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

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

−26,
−3, 0,
−3, −2, −6,
2, −4, 1, −4,
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 −4,
1, 1, 5, 1, 2,
−1, 1, −1, 2, 0, 0,
0, 0, 0, −1, −1, EOB

壓縮比率與不自然痕跡(artifact)[编辑]

失真壓縮導致的人為現象(上)與原圖(下),200%放大

按:artifact在這個領域又被解釋為膺像、非自然信號、人為現象。

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

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

解碼[编辑]

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

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


\begin{bmatrix}
 -26 & -3 & -6 &  2 &  2 & -1 & 0 & 0 \\
   0 & -3 & -4 &  1 &  1 &  0 & 0 & 0 \\
  -3 &  1 &  5 & -1 & -1 &  0 & 0 & 0 \\
  -4 &  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 \\
  -56 &  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)

JPEG example image.jpg

JPEG example image decompressed.jpg
注意原來(上)與解壓縮影像(下)的些微差異,在左下角可以輕易地看出來

\begin{bmatrix}
 -68 & -65 & -73 & -70 & -58 & -67 & -70 & -48 \\
 -70 & -72 & -72 & -45 & -20 & -40 & -65 & -57 \\
 -68 & -76 & -66 & -15 &  22 & -12 & -58 & -61 \\
 -62 & -72 & -60 &  -6 &  28 & -12 & -59 & -56 \\
 -59 & -66 & -63 & -28 &  -8 & -42 & -69 & -52 \\
 -60 & -60 & -67 & -60 & -50 & -68 & -75 & -50 \\
 -54 & -46 & -61 & -74 & -65 & -64 & -63 & -45 \\
 -45 & -32 & -51 & -72 & -58 & -45 & -45 & -39
\end{bmatrix}

且對每一個項目加上128


\begin{bmatrix}
  60 & 63 & 55 &  58 &  70 &  61 & 58 & 80 \\
  58 & 56 & 56 &  83 & 108 &  88 & 63 & 71 \\
  60 & 52 & 62 & 113 & 150 & 116 & 70 & 67 \\
  66 & 56 & 68 & 122 & 156 & 116 & 69 & 72 \\
  69 & 62 & 65 & 100 & 120 &  86 & 59 & 76 \\
  68 & 68 & 61 &  68 &  78 &  60 & 53 & 78 \\
  74 & 82 & 67 &  54 &  63 &  64 & 65 & 83 \\
  83 & 96 & 77 &  56 &  70 &  83 & 83 & 89
\end{bmatrix}

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


\begin{bmatrix}
 -8 &  -8 &  6 &  8 &  0 &   0 &  6 & -7 \\
  5 &   3 & -1 &  7 &  1 &  -3 &  6 &  1 \\
  2 &   7 &  6 &  0 & -6 & -12 & -4 &  6 \\
 -3 &   2 &  3 &  0 & -2 & -10 &  1 & -3 \\
 -2 &  -1 &  3 &  4 &  6 &   2 &  9 & -6 \\
 11 &  -3 & -1 &  2 & -1 &   8 &  5 & -3 \\
 11 & -11 & -3 &  5 & -8 &  -3 &  0 &  0 \\
  4 & -17 & -8 & 12 & -5 &  -7 & -5 &  5
\end{bmatrix}

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

用法[编辑]

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

照片[编辑]

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

低品質(10%),檔案大小為1.7 KB.
中等品質(50%),檔案大小為5.7 KB.
最高品質(100%),檔案大小為36 KB.


附註:以上的影像並不是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年所主張的專利,且發現他們因為前案而無效作廢[2]。其他的也已推斷Forgent並無擁有涵蓋JPEG的專利[3]。儘管如此,在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的软件业务。”[4]

無損耗旋轉(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旋轉程式列表(英語)

參見[编辑]

參考來源[编辑]

  1. ^ 吕凤军. 数字图像处理编程入门. 清华大学出版社. 1999年. 
  2. ^ [1]
  3. ^ [2]
  4. ^ JPEG: PC厂商向JPEG专利持有者赔偿800万美元_第三媒体频道. 

外部連結[编辑]