戴微微 楊銘
(吉林電子信息職業技術學院,吉林 吉林 132021)
隨著多媒體技術的快速發展,靜止圖像的應用越來越廣泛。它的應用主要集中在圖像的存儲和圖像的傳輸兩方面,從具體應用中我們可以發現靜止圖像占用了越來越多的資源。在這樣的背景條件下,靜止圖像的壓縮成為了一個研究的熱點。目前靜止圖像的壓縮算法以JPEG(Joint Photographic Experts Group)和JPE G2000為主。JPEG壓縮格式是目前圖像處理領域里面用得最廣泛的一種圖像壓縮方式,本文主要就JPEG標準對圖像進行編、解碼的研究。主要應用是圖像信息的傳輸和存儲,可廣泛地應用于廣播電視、電視會議、計算機通訊、傳真、多媒體系統、醫學圖像、衛星圖像等領域。壓縮編碼的方法有很多,主要分成以下四大類:(1)象素編碼;(2)預測編碼;(3)變換編碼;(4)其它方法。
根據系統功能的要求,可將系統分解成幾個功能模塊來分別設計。JPEG的壓縮原理其實上面介紹的那些原理的綜合,博采眾家之長,這也正是JPEG有高壓縮比的原因。其編碼器的流程如下。

圖JPEG編碼器流程
本系統采用VC++來實現。系統實現的各個步驟如下。
3.1 讀取BMP圖像信息,獲取圖像行像素和列像素數值,在BMP圖像中,圖像數據是以倒序存放的。亦即實際圖像第一行資料存放在BMP圖像數據矩陣的最后一行,依次類推,所以取資料的時候要從BMP圖像數據矩陣的最后一行開始讀起,把數據存放在新建數組(或稱矩陣)的第一行,一直取完。BMP圖像行像素和列像素的數值分別存于文件頭信息的第18和22字節。從Cimage類中可得到Width(圖像寬度)和hight(圖像高度)的數值。
3.2 得到Pwidth*Phight后便得知BMP圖像的像素點大小,而數據矩陣(三基色,RGB矩陣)的大小是Pwidth*Phight*3,因為每一個像素點都含有RGB三個數據,我們要處理的是數據矩陣而不是像素點矩陣。所以,新建數組的大小是(Pwidth*3)*Phight。
3.3 接下來,把這一個矩陣(包含BGR)拆分成三個獨立的B、G、R矩陣,得到三個新的矩陣(只包含B的矩陣,只包含G的矩陣,只包含R的矩陣),簡稱為B矩陣、G矩陣、R矩陣(大小為Pwidth*Phight),用程序實現拆分,只要依次取原矩陣的第1、4、7、10、13......個資料即得到B矩陣,依次讀取第2、5、8、11......個數據即得到G矩陣,依次讀第3、6、9、12......個資料即得到R矩陣。得到B、G、R矩陣后再利用顏色轉換公式很容易就可得到YCbCr矩陣。
Y(n)=0.114B(n)+0.587G(n)+0.299R(n)
Cb(n)=0.5B(n)-0.3313G(n)-0.1687R(n)
Cr(n)=0.0813B(n)-0.14187G(n)+0.5R(n)
(For n=1 To PW*PH),其中PW為Pwidth的簡寫,PH為Phight的簡寫。
3.4 二維DCT變換
由于VC中無法實現二維DCT計算公式,所以只有把二維的變換變成先做一維,再做另一維的變換,俗稱快速DCT變換。快速DCT變換方法如下:設一個大小為8的數組SL(8),先讀取一個8*8塊的第一行資料值,賦給SL(8),對SL (8)進行一維DCT變換后得到一個新的SL(8)數組,再把SL(8)數組覆蓋到原來的8*8塊中相應的地方去。做完第一行后再做第二行,一直做完8行,一個8*8塊的一維DC即告完成,然后再做列方向的第二維DCT變換,變換公式一樣,只是由SL(8)取8*8塊的行資料變成取列數值。做完后覆蓋回原值,即得到一個8*8塊的DFT系數塊,再重復這兩個過程做第二個8*8塊......一直到做完全部8*8塊(Y,Cb,Cr)。這樣就得到Y、Cb、Cr的DFT系數矩陣。
3.5 量化
讀取Y矩陣中第一個8*8塊,與量化系數矩陣中對應的相乘,得到的值覆蓋回原矩陣,然后做第二個8*8塊,一直到做完全部8*8塊,然后做CbCr矩陣的量化,用另外一個系數矩陣。
3.6 “之”字形掃描
3.7 哈夫曼編碼
哈夫曼編碼時必須判斷一個個DC(AC)的值,以及轉換成二進制代碼后的碼長,再去對照哈夫曼編碼表進行編碼,比如對一個DC值編碼,首先得先判斷該DC的值在哪段范圍內,在某一段范圍內的數值,其二進制代碼長相等。并要讓程序知道該DC的值到底為多少,然后才能進行編碼。
壓縮過程完成以后,接下去要做的工作便是碼串存貯,存貯時需要注意的——點是在抽樣過程中得到1個Y塊對應1個Cb塊合一個Cr塊的對應關系,在存貯時也要按這種對應關系存貯,即1個Y塊的碼串后面緊接著存放與其對應的一個Cb塊的碼串及一個Cr塊的碼串,循環往復,存完所有串。這樣的1個Y8*8塊+1個Cb塊+1個Cr簡稱為MCU,是JPEG格式的最小存貯處理單元。
[1]張旭東,盧國棟,馮健.圖像編碼基礎和小波壓縮技術——原理、算法和標準[M].北京:清華大學出版社,2004。
[2]鐘玉琢.多媒體技術[M].北京:清華大學出版社,1999.
[3]黎洪松.數字圖象壓縮編碼技術及其C語言程序范例[M].北京:學苑出版社,1998.
[4]林福宗.圖象文件格式大全[M].北京:清華大學出版社,1998.
[5]郎銳.數字圖像處理的Vc++實現[M].北京:北京希望電子出版社,1996.