基于小波變換的JPEG2000圖像壓縮編碼系統(tǒng)的仿真與設(shè)計(jì)
引言
隨著多媒體技術(shù)的發(fā)展,出現(xiàn)了各種各樣的靜止圖像壓縮技術(shù),其中最成功的當(dāng)推JPEG標(biāo)準(zhǔn)。但由于有損壓縮的原因,傳統(tǒng)JPEG在許多對(duì)圖像質(zhì)量要求較高的應(yīng)用場(chǎng)合無(wú)法勝任。與傳統(tǒng)JPEG基于離散余弦變換不同,JPEG2000基于離散小波變換,它不僅在壓縮性能方面明顯優(yōu)于JPEG,還具有很多JPEG無(wú)法提供或無(wú)法有效提供的新功能,比如,同時(shí)支持有損和無(wú)損壓縮、大幅圖像的壓縮、漸進(jìn)傳輸、感興趣區(qū)編碼、良好的魯棒性、碼流隨機(jī)訪問(wèn)等。一個(gè)典型的JPEG2000的壓縮過(guò)程如圖1所示。
圖1 JPEG2000的壓縮過(guò)程
由圖1所示,預(yù)處理一般包括三種操作:區(qū)域劃分,降低量級(jí),分量變換。預(yù)處理后的數(shù)據(jù)將進(jìn)行離散小波變換(DWT),以進(jìn)一步降低數(shù)據(jù)之間的相關(guān)性。JPEG2000的量化與JPEG量化基本相同,總體上都是采用均勻量化,不同子帶的量化步長(zhǎng)一般不同。量化以后,第一層編碼(自適應(yīng)算術(shù)編碼)采用EZW的改進(jìn)算法SPIHT算法將等待編碼的、經(jīng)過(guò)小波變換后的比特流按重要性不同進(jìn)行排序,提供多個(gè)滿足不同目標(biāo)碼率或失真度的截?cái)帱c(diǎn),使得解碼器方能根據(jù)目標(biāo)碼率或失真度的要求在某一截?cái)帱c(diǎn)結(jié)束解碼,提供相應(yīng)質(zhì)量的圖像。第二層編碼(碼流組織)將上述截?cái)嗟臄?shù)據(jù)進(jìn)行打包,并附加相關(guān)的標(biāo)志信息,從而實(shí)現(xiàn)JPEG2000對(duì)多失真度的支持。
離散小波變換系統(tǒng)
小波分析進(jìn)行圖像壓縮基本原理是:根據(jù)二維小波分解算法,一幅圖像做小波分解后,可得到一系列不同分辨率的圖像,而表現(xiàn)一幅圖像最主要的部分是低頻部分,如果去掉圖像的高頻部分而只保留低頻部分,則可達(dá)到圖像壓縮的目的。傳統(tǒng)傅立葉分析只能對(duì)信號(hào)進(jìn)行時(shí)域或頻域單獨(dú)進(jìn)行分析,時(shí)域上有限的信號(hào)在頻域是無(wú)窮的,頻域內(nèi)有限的信號(hào)在時(shí)域里是無(wú)窮的。而小波分析能在時(shí)域和頻域內(nèi)同時(shí)分析,且能自動(dòng)調(diào)整分辨率。
與其他使用小波變換的其他圖像壓縮標(biāo)準(zhǔn)相比,JPEG2000在小波變換的基礎(chǔ)上采用更為復(fù)雜精細(xì)的小波塊分割算法,即優(yōu)化截取的嵌入式塊編碼EBCOT算法,從而實(shí)現(xiàn)了豐富的功能,比如基于感興趣區(qū)域編碼ROI,即對(duì)一幅圖像中感興趣的部分采用低壓縮比以獲取較好的圖像效果,而對(duì)其他部分采用高壓縮比以節(jié)省存儲(chǔ)空間,這樣就可以通過(guò)點(diǎn)擊ROI部分以獲得更高的分辨率,看到圖像的細(xì)節(jié)部分。
在本系統(tǒng)中,采用第二代小波變換的快速提升算法CDF9/7雙正交小波變換,小波變換取CDF9/7雙正交小波基,該小波基具有線性相位,因而有著極好的圖像壓縮性能。其實(shí)現(xiàn)過(guò)程如圖2所示。
圖2 CDF9/7雙正交小波變換的實(shí)現(xiàn)過(guò)程
圖3是用CDF9/7小波族對(duì)一個(gè)的圖像做兩級(jí)DWT分析的情況。在第二級(jí)中,第一級(jí)得到的低通近似本身被分成4個(gè)子圖像,提取出了細(xì)節(jié),留下一個(gè)新的低通近似。低通濾波的效果很容易從圍巾、桌布的花紋,藤椅的方格,遠(yuǎn)處羅列的書籍這些細(xì)節(jié)的丟失看出。第二級(jí)低通近似也可以繼續(xù)變換,以生成4幅新的子圖像。這種變換可以一直進(jìn)行下去知道子圖像只包含一個(gè)像素為止。
a 原始圖像
b二維DWT分析圖像
圖3 兩級(jí)二維DWT分析
在圖3中,垂直細(xì)節(jié)對(duì)應(yīng)于分析塊的右上角,水平細(xì)節(jié)對(duì)應(yīng)于左下角,而對(duì)角細(xì)節(jié)對(duì)應(yīng)于右下角,它們都表現(xiàn)出了較強(qiáng)的外觀。當(dāng)數(shù)字圖像需要通過(guò)二維DWT子圖像重建時(shí),就要用向上采樣和卷積的辦法將細(xì)節(jié)與低通近似組合起來(lái)。
SPIHT圖像編碼
為了驗(yàn)證JPEG2000系統(tǒng)的可行性及性能,采用MATLAB對(duì)系統(tǒng)中的小波變換部分進(jìn)行了仿真,然后用C++語(yǔ)言對(duì)小波變換后的系數(shù)進(jìn)行編解碼,實(shí)現(xiàn)系統(tǒng)中第二部分的仿真,以大幅降低數(shù)據(jù)量。SPIHT是基于內(nèi)嵌零樹編碼(EZW)的集分割算法,C++中的鏈表類能實(shí)現(xiàn)SPIHT算法中的三個(gè)控制鏈表(LSP,LIP和LIS),方便的位操作命令適合處理算法中基于位平面的編解碼功能。
為了對(duì)小波變換和SPIHT編碼算法有更直觀的認(rèn)識(shí),下面從一幅圖像中選取尺寸的像素矩陣進(jìn)行處理,分析每一步處理后數(shù)據(jù)的變化。
初始圖像矩陣如圖4所示,所用圖像是256色(每像素8位),像素灰度圖。
圖4 圖像xiaoshutiao.bmp中的一部分?jǐn)?shù)據(jù)
由上圖可以看出圖像幅值分布比較隨機(jī),沒(méi)有什么規(guī)律。對(duì)上數(shù)據(jù)進(jìn)行離散小波變化后的數(shù)據(jù)如圖5所示,小波變換采用基于提升的CDF9/7雙正交小波基,進(jìn)行5級(jí)分解。
圖5 三級(jí)小波變換后的系數(shù)數(shù)據(jù)
由上圖數(shù)據(jù)可以看出,幅值大的數(shù)據(jù)主要分布于左上交,這與小波變換后的數(shù)據(jù)分布特點(diǎn)是一致的,即第一級(jí)是低頻圖像概貌數(shù)據(jù),集中了圖像大部分的能量,其余各級(jí)是分辯率不同的圖像的高頻細(xì)節(jié)數(shù)據(jù),反映圖像水平、垂直、和傾斜方向的紋理信息,故大數(shù)據(jù)呈線狀分布,總能量比較少,便于對(duì)數(shù)據(jù)進(jìn)行不同分辯質(zhì)量的壓縮。
對(duì)上數(shù)據(jù)進(jìn)行SPIHT編碼后的數(shù)據(jù)見圖6所示。
圖6 SPIHT編碼數(shù)據(jù)
從上圖數(shù)據(jù)可以看出,連1數(shù)據(jù)和連0數(shù)據(jù)都較多,可對(duì)其作進(jìn)一步的游程編碼。游程編碼即記錄數(shù)據(jù)中連0和連1的個(gè)數(shù)數(shù)據(jù)的壓縮方式。編碼后的數(shù)據(jù)見圖7。
圖7 游程編碼數(shù)據(jù)
在對(duì)上數(shù)據(jù)作進(jìn)一步的哈夫曼編碼,哈夫曼編碼是一種無(wú)損最優(yōu)編碼方案,如圖8所示。
圖8 Huffman編碼數(shù)據(jù)
注意上述整個(gè)編碼都是無(wú)失真的,也即通過(guò)一系列的解碼過(guò)程可以完全恢復(fù)出原始圖像。如果對(duì)原始圖像進(jìn)行某一等級(jí)分辨率的壓縮后可大大降低數(shù)據(jù)量。
結(jié)語(yǔ)
本文介紹了小波變換在圖像壓縮JPEG2000里的應(yīng)用。小波變換不同于傳統(tǒng)的域變換壓縮方式,它對(duì)圖像整體進(jìn)行變換,獲得一系列不同分辨率的圖像概貌信息和細(xì)節(jié)信息,從而為進(jìn)一步處理提供很大的余地。同時(shí)通過(guò)對(duì)一種基于嵌入式零樹思想的集分割SPIHT算法的仿真,說(shuō)明該算法性能高、計(jì)算量小,若在JPEG2000系統(tǒng)中編解碼采用同一套算法,可以大大降低了解碼算法的復(fù)雜性,是一種很有前途的圖像編解碼技術(shù)。