圖形壓縮、解壓縮探討JPEG 原理

圖形壓縮、解壓縮探討JPEG 原理

(一)、壓縮技術
GIF壓縮技術
GIF(Graphics Interchange Format;圖形交換格式)是CompuServe用在定義一般化彩色影像 (color raster image)所制定的規格:GIF的規格在不受原創者與使用者硬體的限制之下,對線上傳輸與電腦圖形資料的交換協定作了定義,所?#092;用的壓縮方式是由Lempel-Ziv壓縮演算法所演變的變動長度碼LZW壓縮方式,這種方式以變動長度碼取代原始資料的位元回樣(Pattern)資料,這個演算法?#092;用由原始資料圖樣所建立起的轉換表作處理,每個新的圖樣都曾輸入到這個轉換表內,而後在壓縮資料流內?#092;用索引值來取代圖樣資料。
這樣的編碼方式下,影像可以一邊作解壓縮一邊作顯示的工作,GIF的確提供了一個相當有效率的一次處理 (One-Pass)編碼法。1987年,訂定了GIF87a 的規格,相關規格的資料可參考網頁http://members.aol.com/royalef/gif87a.txt上的說明;而GIF87a延伸版的GIF89a,則於1989年問世,其規格的相關資料可參考網頁http://members.aol.com/royalef/gifspecs.txt上的說明。
由於GIF資料可以包含有多個影像,所以在此說明一下GIF處理與顯示的方法,GIF89a規格中透過多個影像顯示控制的方式來支援動羞圈形的表現(請參見網頁 http://members.aol.com/royale/gifanim.htm)。Microsoft GIF Animator是一個可以免費下載的GIF工具軟體,用來輔助Microsoft FrontPage 2000軟體中的影像組合工具,雖然Microsoft GIFAnimator1.0只是一個簡單的程式,但幾乎已提供了所有GIF動畫製作的功能。
GIF壓縮演算法為一項擁有專利的技術.目前由Unisys公司擁有該項專利權。1995年,Unisys開始向在產品中有使用到GIF LZW壓縮法的商業供應商收取權利金,但終端使用者、線上服務與非營利機構則不包含在內;然而供應商們為了避開這項專利,於是另行開發了稱為 PNG(Portable Network Graphic)的GIF取代方案,例如Microsoft在需要用到動畫的產品中便?#092;用了PNG的架構 (請參見網頁http://members.aol.com/royalef/gifanim.htm)。
最後,針對需要作圖片壓縮時,究竟何時使用G1F架構,又何時使用Jpeg架構.作一個簡單的介紹。一般而言,對於如一般照片等連續色調或灰階影像的應用上,JPEG的使用應該是一項極佳的選擇;然而對於一些如線條圖畫、簡單卡通等有明顯邊界、只包含少數顏色或只有2到16灰階的影像而言,JPEG的壓縮法則較不適用,反倒 GIF在這些JPEG無法處理得很好的影像上有不錯的表現。雖然GIF以高壓縮率對這些影像作壓縮,仍然可以保有原影像清晰的邊界,而這些明顯的邊界通常是不會存在一般真實的照片之中的。

(二)、壓縮與解壓縮
JPEG是一種對彩色或灰階之類連續色調圖形作壓縮和解壓縮的標準.這個標準是由ISO/IEC JTC1/SC29 WG10所訂定。JPEG可應用在許多如研討畫圖片、彩色電傳、影像資料庫、桌上出版系統、多媒體及醫療等的靜態影像的壓縮之上。JPEG最基本的概念就是將影像的一個區塊從空間域轉換為頻率域。一般而言影像高頻部份的量會比低頻部份要小得多.而由於人們的眼睛對空間高頻的部份較不敏感,因此高頻部份就可以用較大量化處理的方式來產生較為粗略的影像來表示,由於較粗略的影像需要較少的位元,於是可以大幅度地減少要儲存或通訊的資訊量,而縮減後的資訊影像也的確可以為人們的視覺感官所接受。
上圖大略地說明了JPEG的整個壓縮過程,首先影像被分割成許多8x8像素的區塊,這些的區塊再以上離散餘弦轉換(FDCT ; Forward Discrete Cosine Transform) 自空間域轉成頻率域,而後這些三維(2D)DCT係數再以8x8的量化矩陣作量化處理,由於原本的值在量化後,無法再完整地轉換回去.這個量化處理的過程會造成一些的失真。高頻部份的DCT係數比低頻部份DCT係數有較小的值,而且人的視力對高頻部份比對低頻部份還不敏感,因此在量化步驟時可對高頻部份做比低頻部份更大的量化處理,這也使得這個2D DCT係數的高頻部份產生許多的零值。量化後的2D DCT係數再經由斜向掃描(zig-zag scan)轉換成一維(lD)陣列,再經預先定義好的Huffman(霍夫曼)編碼表對這個一維陣列作編碼,斜向掃描的結果使許多高頻部份的零值緊臨在一起,加上Huffman編碼後便可以得到更好的壓縮率,一般而言.Huffman編碼法是一個無失真的壓縮方式,壓縮率大約可以達到兩倍,至於先前的量化處理則可以達到較高的壓縮率。最後的壓縮步驟則以JPEG語法產生JPEG檔案,以便檔案可以於解壓縮為JPEG所解讀。JPEG解壓縮的過程其實就如下圖所說明的一般,只是簡單地把壓縮過程給反了過來罷了,首先對JPEG語法作解碼,而後?#092;用Huffman表作Huffman解碼,於是產生了各個區塊的一維陣列數值.再經反向斜向掃描(1nversed zig-zag scan)將一維陣列轉換成二維陣列,再以原來的量化表作解量化處理重新產生一個二維DCT係數陣列.最後用逆離散餘弦轉換(IDCT: Inverse DCT)轉換回空間域重新將區塊建立起來。
為了因應不同的通訊及儲存狀況下之應用,JPEG提供二四種不同的編碼方式
1、循序模式 (Sequential mode):
循序模式編碼的方式將影像以掃瞄方式由左至右由上而下作編碼,這個循序模式的編碼架構簡單而有效率,對大部份的應用程式是相當合宜的,架構僅對資料作單一次處理的方式作影像編碼的工作,也就是所謂的循序編碼的模式了。這種方式對每個輸入資料提供8位元的解析度。
2、漸進模式(Progressive mode):
影像的建立無論是採取從模糊的低頻影像到清晰的高頻影像 (即頻譜選擇 方式),或是自最大有效位元到最小有效位元的建立方式(即連續近似法), 漸進模式的編碼都對影像作多重掃描來作處理。以頻譜選擇方式為例,影 像以DCT轉換到頻率域,而一些頻寬可立即從DCT係數得到,由於只執 行一次DCT,因此在這樣的方式下只有一種的空間解析度。漸進模式對於在頻寬受到限制的頻道上作影像傳輸相當有用,使用者可以先看到粗略的影像,再決定是否需要最終的影像。舉例來說,一個想購置房地產的顧客,可以在這種的模式下瀏覽產品,在看到產品粗略的影像不是自己所喜歡的時候,不用看到最後清晰的影像,就可以立即的跳過去以節省時間。漸進模式解壓縮後影像呈現的方式,先出現模糊的低頻影像,而後再顯現清晰的高頻影像。這種的編碼方式滿足了許多應用程式漸進呈現顯示、算術編碼以及對解析度 (如12位元)的較高需求,算術編碼法提供了比Huffman編碼法有5-10%更好的壓縮。另外此模式也對循序編碼和八位元的解析度提供了支援。
3、 層模式(Hierarchical mode):
階層模式的編碼方式乃是將影像以低空間解析度的影像先作編碼,再以此低解析度影像為基礎對較高解析度影像與低解析度影像問的差異作編碼以得到較高解析度的編碼影像。如圖3七所示的一般,相同一個影像可以以階層模式作好幾種不同解析度的編碼,階層模式可以同時滿足各種具有不同容量的設備上,使得即使低價的設備也可以將此一多解析度的影像作解碼後得到其所能達到的最佳品?#124;。相較之下.漸進模式只能採用單一解析度作影像的重建與顯現,階層模式的確為各種不同的設備提供了更佳的強性與解析度。
4、無失真模式(Losslessmode):
所謂的無失真表示了此模式可以將影像原原本本地將影像還原重建回來。為了重建時能得到和原來完全一樣的影像,在無失真模式下並沒有使用DCT,也因此無失真模式的壓縮率比使用DCT作壓縮處理的失真方式要低得多。這種模式一般只用在一些如重要的醫療影像等對影像有無失真需求的場合之中,而各個像素的數值從二位元到十六位元都可以。另外這種的處理模式對循序編碼也提供支援,使用者可選擇Huffmar編碼或算術編碼的方式作處理。

(三)、亮度與色度
JPEG將不同的色彩當作獨立的成份,因此各個成份可以被視為一個灰階影像來處理,如果各個顏色成份間沒有關聯性時.便可以將壓縮的效果處理得最好,因此把紅(R)、綠(G)、藍( cool.gif 的成份依以下公式轉換成亮度(Luminance)(Y)及色度 (Chrominance)(Cb和 Cr)乃的成分將使得各項沒有關聯的成份:
Y = 0.299R+0.587G+0.144B
Cb = -0.169R-0.331G+0.500B
Cr = 0.500R- 0.419G –0.081B
雖然JPEG並未對色彩空間作規劃,但大部份的JPEG應用程式都不用RGB的表示方式.而以YCbCr來表示;另外,也由於人的視力系統對色度的敏銳度比較不高 ,因此以YCbCr色度的方式來表示可以再做一次作取樣(Subsampling)來減低資訊量,這也是普遍使用YCbCr。另一個重要的理由。如下圖所示的,4:4:4格式代表YCbCr原來完整的資訊.而色度表示法可以再次取樣以4:2:2或4:2:0格式來表達;4:2:2格式將原本的資訊旦減少為三分之二,而4:2:0格式則可以將資訊三減少為一半。雖然色度的資訊量減少了.但對人的視覺神經而言卻僅僅感受到微小的差別而已。
(四)、離散餘弦轉換
為了說明執行離散餘弦轉換 (DCT: Discrete Cosine Transform)的影響,我們將以自一張圖取下的一個小區塊 (8X8像素)的亮度資料,並將之轉換成空間頻率域,而後再自每個像素值中減去128以期每個像素都可以符合在DcT演算法中的8位元?#092;算範圍。經過轉換後的二維 (2D)係數如下所示,這個2D頻率域的橫軸以fx表示而縱軸以fy來表示;左上角代表DC的係數值 -80,低頻部份包含了區塊的大部份能量.而對人眼較不敏感的高頻部份,則通常含有較低的能量。
-80 4 -6 6 2 -2 -2 0
24 -8 8 12 0 0 0 2
10 -4 0 -12 -4 4 4 -2
8 0 -2 -6 10 4 -2 0
-2 8 6 -4 0 -2 0 0
12 0 6 0 0 0 -2 -2
0 8 0 -4 -2 0 0 0
至於逆離散餘弦轉換(Inverse DCT)則進行反性操作,將頻率域係數轉換成空間域中像素點的值。

(五)、量化
以下所列為 JPEG所建議的量化(Quantization)矩陣,以期能對每秒 30個 720X576像素畫面的 CCIR-601 標準作影像的處理與顯示。
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
這個矩陣的目的是在對亮度(Luminance)係數作量化處理,至於色度(Chrominance)係數則還有另一個矩陣做處理。在亮度係數的量化方面,每個 2D DCT 係數除以相對的量化矩陣的值,在四捨五入後得到如下的量化後 DCT 係數:
-5 0 0 0 0 0 0 0
2 -1 1 1 0 0 0 0
1 0 0 -1 0 0 0 0
1 0 0 0 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

舉例來說,DC係數 -80除以其所相對應值16後得到量化值 -5。注意量化後區塊高頻部份出現許多零值,代表人類視覺系統對高頻部份並不敏感。由於四捨五入的部份並不能在解碼時重現,因此這個步驟將是個失真的過程。

(六)、掃瞄技術
區塊在量化之後,只有低頻的部份有非零值,為了能進一步地減少儲存空間與通訊容量的大小,盡可能地將零值放在一起,使得處理時能以幾個零來表示而非個別的處理每個零,因此?#092;用如下圖的方式做斜向掃描 (zigzag scan),這種斜向掃描的掃描線乃是沿著空間頻率大小增加的方向作掃描的,使得許多的零可以被串接在一起,達到原來的期望。下圖說明了對量化後係數作斜向掃描的情形,斜向掃描僅針對AC係數部份作處理,也就是跳過左上角DC係數的部份,至於DC係數的部分則另行以下圖的方式與其所相鄰的區塊作掃描。

(七)、字流長度與霍夫曼編碼法
掃描完成後,接下來的工作便?#092;用字流長度 (Run length)與霍夫曼(Huffman)編碼法混用的方式,以期使得位元的數量能夠達到最佳化的目的。首先自斜向掃描處理取得序列的AC係數,如上例得到以下數列:0,2,1,-1,0,0,1,0,1,1,0,0,1,0,0,0,-1,0,0,-1,..,0,而後字流長度或稱為變動長度(Variable length)編碼對這個序列作編碼以更進一步地降低所需的位元數,編碼的數值所得到的是由零值的數目按著非零值的數所構成,而得到如下的編碼序列格式:
(字流中零值的數目,下個非零值的數)
因此,如上面的例子就可以編碼成:(1,2),(0,1),(0,-1),(2,1),(1,1),(0,1),(0,1),(2,1),(3,-1),End of Block(EOB)來表示;而後再以霍夫曼編碼減少為了要代表字流長度編碼的位元數。霍夫曼編碼是依統計所推論出來讓最常用的碼以最少的位元數來表示,JPEG為亮度與色度的DC及AC的霍夫曼編碼提供了一個表格以為處理之需;另外在作階層模式或無失真模式編碼時,也可藉以算術編碼表的?#092;用來取代霍夫曼編碼表。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值