【數據壓縮】JPEG標準與原理解析
轉載請註明出處:http://blog.csdn.net/luoshixian099/article/details/50392230
CSDN-勿在浮沙築高臺
為了滿足不同應用的需求,JPEG標準包含兩種主要的壓縮方法:1.基於DCT的有損壓縮算法;2.基於預測方法的無損壓縮算法。
基於DCT的基線系統有損壓縮技術是到眼下為止應用最為廣泛的一種壓縮方法,本文將具體解析此算法。
1.基於DCT有損壓縮原理
以下是編碼器和解碼器的流程圖。壓縮過程:原圖分成8×8的子塊,分別進行正向離散余弦變換(FDCT)。對每一個8×8子塊的系數採用量化表進行量化。Zig-Zag掃描,最後使用熵編碼。輸出比特流。解碼器是完整的逆過程。本文章不再贅述!
1.1離散余弦變換(DCT)
首先把原始圖像切割成8×8的子塊(假設寬或高不是8的整數倍,能夠用黑色邊框填充),每一個子塊進行獨立編碼處理。
在進行FDCT變換之前,把64個無符號整型灰度值[0,255]平移到[-128,+127]範圍中。
通過DCT變換,8×8個灰度值被轉換為8×8個頻率譜值,分別相應不同頻率。
DCT變換系數值均為實數。
低頻譜值位於左上部分,高頻譜值位於右下部分。通過下述公式可知。左上角F(0,0)相應頻率為0,被稱為DC系數,其它63個系數稱為AC系數。
至於為什麽子塊大小選擇8×8。因為當時制定JPEG標準時,8×8是集成電路所能支持的最大尺寸,同一時候8×8的大小效果非常好。
下述定義的b[x,y]為DCT的基函數。以下畫出了6個基函數在8×8的子塊上的幅值b[x,y]。當中,x,y為空間域的坐標,u,v相應頻率域的坐標。
1.2 量化
註意:圖像信息損失是在量化階段而不是DCT階段。經過上述FDCT,生成了64個頻率系數,通過抑制高頻成分,來達到壓縮的目的。一個主要原因是因為人眼對高頻成分不敏感,故能夠移除部分高頻成分。而對圖像感官質量影響非常小;還有一個原因是大多數圖像中的灰度值是個漸變的過程。而頻率高的部分攜帶的信息非常少。
通過使用量化矩陣Q(u,v)對F(u,v)進行量化,大部分高頻系數會被量化成0。JPEG標準沒有指定量化矩陣的數值,能夠依據須要自定義,以下是JPEG標準提供的兩種量化矩陣作為參考。一種為低壓縮,還有一個為高壓縮。
1.3 熵編碼
☆ Zig-Zag掃描
通過上述量化矩陣,大部分高頻系數被量化為0。為了方便進行熵編碼,把8×8的系數矩陣轉化為1×64的一維數據,並且採用的方式為Zig-Zag掃描法,採用Z字型的優點是能夠把低頻系數和高頻系數分別集中在一起。而隨著頻率的添加,高頻系數基本上都是0,方便採用0行程編碼從而壓縮數據。
☆Huffman編碼----->Huffman具體原理
1.DC系數-DPCM
因為DC系數是整個8×8塊的均值。所以相鄰塊的DC系數有非常大的相關性,同一時候DC系數通常比AC系數要大得多,JPEG標準對DC系數採用相鄰DC差分(DPCM)。通常Diff具有非常小的數值,然後進行Huffman編碼。
例如以下圖所看到的(第一個塊的DC定義為0)。
2.AC系數-行程編碼
採用Zig-Zag掃描後,高頻成分被量化為0,並且基本集中在一起,能夠對AC系數採用0行程編碼。即記錄此數值前的連續數值0的個數。
以下是個對AC系數壓縮的樣例。
2. An example--JPEG壓縮&解壓縮
以下是一個壓縮算法過程,對彩色圖像,採用分層處理,即對不同通道分別壓縮。解壓縮是一個逆向的過程:
---------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------
參考:
The JPEG Still Picture Compression Standard,IEEE Transactions on Consumer Electronics,1991.
Basic Image Compression Algorithm and Introduction to JPEG Standard,Pao-Yen Lin.
【數據壓縮】JPEG標準與原理解析