摘 要:DCT變換是圖像壓縮的一項重要技術,如何準確、快速進行圖像壓縮一直是國內外研究的熱點。主要介紹基于DCT變換的圖像壓縮編碼算法,給出具體的實現方法和步驟,并用Matlab進行了算法仿真。實驗結果表明,該算法實現簡單,在很大壓縮范圍內,都能得到很好的重建圖像質量,滿足不同場合要求不同圖像質量的實際需要。這里利用Matlab做仿真實驗,方法簡單、速度快且誤差小,大大提高了圖像壓縮的效率和精度。
關鍵詞:圖像壓縮;DCT變換;Matlab仿真;峰值信噪比
中圖分類號:TP391 文獻標識碼:B 文章編號:1004373X(2008)1615703
Image Compression Coding and Implementation Based on 2DDCT
LI Chunxia
(College of Electric and Information Engineering,Shaanxi University of Science Technology,Xi′an,710021,China)
Abstract:The DCT transform is an important technique in the field of image compression.How to compress the image accurately and fast has been a research focus both at home and abroad all the time.This paper mainly introduces the algorithm of the image compress coding based on DCT,and shows details of realization.Then the algorithm is simulated by Matlab.Simulation experiments show that the algorithm is simple to realize.The reconstructed images are of good quality satisfying the demands of different image quality on various occasions under the circumstances of very large compression range.The innovation spot of this paper is that the method doing experiments with Matlab is simple,rapid and with little error.It can improve the efficiency and precision of the image compression greatly.
Keywords:image compression;DCT transform;Matlab simulation;peak signal to noise ratio
在信息世界迅猛發展的今天,圖像傳輸已成為一項重要內容,而傳輸信息量的大小是影響傳輸速度的重要因素之一。要想提高通信速度,一個必要的手段就是圖像的壓縮編碼技術,減少傳輸的數據量。于是,對圖像信息的壓縮成為一個不可或缺的環節。圖像壓縮是關于用最少的數據量表示盡可能多的原圖像信息的一個過程。本文主要研究基于離散余弦變換(Discrete Cosine Transform,DCT)的有損壓縮編碼技術。DCT是一種實數域變換,其變換核為余弦函數,計算速度快。DCT除了具有一般正交變換的性質外,它的變換陣的基向量能很好地描述人類語音信號和圖像信號的相關特征。因此,在對語音信號、圖像信號的變換中,DCT變換被認為是最接近KL(KarhunenLoeve)變換性能的準最佳變換。
1 離散余弦變換的基本原理
DCT是正交變換的一種,它具有正交變換的一些有用性質:
(1) 熵保持性,即通過DCT變換后并不丟失信息。
(2) 能量保持性,并能把能量重新分配和集中。這就有可能采用熵壓縮法來壓縮系數,即在質量允許的情況下,舍棄一些能量很小的系數,而對能量較大的系數分配較多的比特數,對能量較小的系數分配較少的比特數,從而使數據有較大的壓縮。
(3) 去相關性,即可使高度相關的空間樣值變為相關性較弱的變換系數,從而減少空間樣值的冗余度。
基于DCT的壓縮算法之所以能壓縮信息的比特數,是因為在經過離散余弦變換后得到的系數矩陣中,數值較大的方差總是集中在少數系數中。這樣,把分布在變換域中的信息集中起來,為合理少分配比特數提供了可能。以下就是圖像尺寸為M×N的數據的二維DCT公式:
正變換(FDCT):F(u,v)=2MNC(u)C(v)[∑M-1x=0∑N-1y=0f(x,y)·
cos(2x+1)uπ2Mcos(2y+1)vπ2N](1)
u=0,1,2,…,M-1; v=0,1,2,…,N-1逆變換(IDCT):f(x,y)=2MN[∑M-1u=0∑N-1v=0C(u)C(v)F(u,v)·
cos(2x+1)uπ2Mcos(2y+1)vπ2N](2)
x=0,1,2,…,M-1; y=0,1,2,…,N-1式中,當u,v=0時,C(u),C(v)=1/2;當u,v≠0時,C(u),C(v)=1。
f(x,y)為像素值;F(u,v)為變換后的系數,u,v為系數下標。
2 DCT在圖像壓縮編碼中的應用
DCT變換在圖像壓縮中有很多應用,是JPEG,MPEG等圖像壓縮標準的重要數學基礎。在編碼過程中,首先將輸入圖像劃分為8×8大小的圖像塊,然后用正向二維DCT把每個塊轉變成64個DCT系數值。其中1個數值是直流(DC)系數,即8×8空間域圖像子塊的平均值,其余63個是交流(AC)系數。接下來對DCT系數進行量化以進一步減少數據量。最后對量化后的系數進行編碼和傳送,形成壓縮后的圖像格式。在解壓縮時首先對已編碼的量化的系數進行解碼,然后求逆量化并利用二維DCT反變換把DCT系數轉化為8×8樣本像塊,最后將反變換后的塊組成一幅完整的圖像。
2.1 DCT變換
DCT的實現常常將圖像分成一些小而易處理的塊,這里假設選擇8×8的塊作為DCT計算的大小。DCT變換的實現有2種方法:
(1) 基于FFT的快速算法;
(2) DCT變換矩陣方法。
后者非常適合做8×8或16×16的圖像塊的DCT變換。一個M×M的DCT變換矩陣T定義為:T=(Ti,j)=1M,i=0,0≤j≤M-1
2Mcosπ(2j+1)i2M,1≤i≤M-1,0≤j≤M-1 如果設X為8×8像素矩陣,則X的離散余弦變換Y可表示為矩陣的乘積:為Y=TXT.T。在Matlab的仿真實現中,主要采用二維DCT變換的矩陣式定義來實現,矩陣式定義可以表示為:[F(u,v)]=[T][f(x,y)][T].T,
[f(x,y)]=[T].T[F(u,v)][T]其中[f(x,y)]是空間數據矩陣;[F(u,v)]是變換系數矩陣;[T]是變換矩陣;[T].T是[T]轉置。
經過DCT變換得到的系數,其能量主要沿對角線分布,并主要集中在左上角。也就是說能量成分以低頻為主。因此,可以在確保一定的圖像質量情況下。放棄一些次要信息,以達到壓縮目的。
2.2 DCT系數的量化與Z掃描
量化的作用是在一定的主觀保真度圖像質量的前提下,丟掉那些對視覺影響不大的信息,以獲得較高的壓縮比。然而,量化也是導致圖像質量下降的最主要原因。這里使用量化矩陣來實現量化。對于DCT輸出矩陣中的每一個元素,量化矩陣中的同一位置都有一個相應的量化值,范圍是0~255。量化定義可以表述為:對64個DCT系數除以其量化步長,四舍五入取整,即:C(u,v)=IntegerRound(F(u,v)/Q(u,v)) 式中,C(u,v)為量化的系數幅度,Q(u,v)為量化步長,它是量化表的元素,通常隨DCT系數的位置和彩色分量的不同而取不同的值。因為人眼對亮度信號比對色差信號更敏感,因此使用了2個量化表,一個是亮度量化表,一個是色差量化表。此外,由于人眼對低頻分量的圖像比對高頻分量的圖像更敏感,因此量化表中的左上角的量化步長一般要比右下角的量化步長小。量化既要使得大部分數據得以壓縮,同時又要保證通過量化和編碼之后能輸出一個與信道傳輸速率匹配的比特流。在DCT變換時使用量化矩陣很容易對圖像壓縮質量進行控制,用戶可根據具體的硬件存儲容量和所需要的圖像量,選擇合適的量化值。
圖1 量化系數的Z掃描量化后的系數需要重新編排,目的是為了增加連續的“0”系數的個數,即“0”的游程長度,方法是按照Z字形的樣式編排,如圖1所示。這樣就把一個8×8的矩陣變成一個1×64的矢量,同時保證低頻分量先出現,高頻分量后出現。矩陣的左上角元素為DC分量,其余63個為AC分量,由左上至右下頻率漸次升高。
2.3 壓縮編碼
原始圖像經過離散余弦變換和量化后,最后一個步驟就是編碼。8×8圖像塊經過DCT變換后得到的DC系數有2個特點:一是系數的數值比較大;二是相鄰圖像塊的DC系數值變化不大。根據這個特點,可以法使用差值沖編碼調制(DPCM)技術,對相鄰圖像塊之間量化DC系數的差值Δ(Δ=DCi-DCi-1,其中DCi為第i個子圖像的直流量,DCi-1為前一個子圖像的直流量)進行編碼。
量化后的AC系數的特點是包含有許多“0”的系數,并且這許多的“0”是連續的,因此可以使用游程編碼(RLC,Run Length Coding)對它們進行編碼。之后再使用熵編碼對DPCM編碼后的直流DC系數和游程編碼后的交流AC系數做進一步的壓縮。熵編碼可以分兩步進行,首先對DPCM編碼后的DC系數和RLE編碼后的AC系數轉換成中間符號序列,然后賦予這些符號以變長碼字。最后組成數據位流。把各種標記代碼和編碼后的圖像數據組成一幀一幀的數據,這樣做的目的是為了便于傳輸、存儲和譯碼器進行譯碼,這樣組織的數據通常稱為位數據流(bitstream)。
3 實驗結果分析與結論
基于前面的理論,下面使用二維離散余弦變換進行圖像壓縮編碼。實驗利用Matlab 6.5對圖像peony.tif進行仿真的結果如圖2所示。其中圖2(a)為原始圖像,圖2(b)為經過DCT變換壓縮編解碼得到的圖像。
圖2 原始圖像與重建圖像比較對比上面的原始圖像與重建圖像,可以發現視覺效果相差很小,可見壓縮的效果比較理想。改變量化矩陣,對peony圖像做不同的量化,在不同的壓縮比下,得到質量不同的重建圖像,并用峰值信噪比(Peak Signal to Noise Ratio,PSNR)進行衡量。實驗數據如表1所示。
表1 不同壓縮比下壓縮圖像的峰值信噪比
量化矩陣Q倍乘Compress ratio壓縮比PSNR /dBQ.0.35.8639.45Q.219.833.6Q.429.731.23Q.945.0127.82
實驗結果表明,基于DCT的圖像壓縮算法實現簡單,在很大壓縮范圍內,都能得到很好的重建圖像質量,滿足不同場合要求不同圖像質量的實際需要。用Matlab做仿真實驗,方法簡單而且誤差小,大大提高了圖像壓縮的效率和精度。
DCT具有算法簡單,易于硬件實現等優點,從而廣泛應用于圖像壓縮領域,尤其在的高比特率傳輸條件下能取得令人滿意的壓縮效果。然而它在低比特率條件下的“方塊效應”成了不容忽視的“瓶頸”缺陷。原因就在于DCT處理的圖像是分塊進行的,塊與塊邊界兩邊的像素相關性不能去掉,從而形成了明顯的方塊邊界。若將DCT變換與其他編碼方法(如小波變換、分形等)相結合,會得到更好的效果。
參 考 文 獻
[1]張兆禮.現代圖像處理技術及Matlab實現[M].北京:人民郵電出版社,2001.
[2]徐飛.Matlab應用圖像處理[M].西安:西安電子科技大學出版社,1990.
[3]何東健.數字圖像處理[M].西安:西安電子科技大學出版社,2002.
[4]朱劍英.基于DCT變換的圖像編碼方法研究\\.南京:南京理工大學,2004.
[5]閆宇松,石青云.可逆的DCT整型變換與無失真圖像壓縮\\.軟件學報,2000,11(5):620627.
作者簡介 李春霞 女,陜西西安人。主要研究方向為圖像處理。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文