隨著多媒體市場的迅猛發(fā)展,百萬像素的數(shù)碼相機、各種功能強大的彩屏手機等數(shù)字消費產品逐漸普及。這些多媒體應用均需要處理高質量、高分辨率的大圖像,這對存儲介質的容量和傳輸信道的帶寬都提出了新要求。圖像壓縮的國際標準jpeg已不能滿足這些新的要求,而且它在低碼率時還存在著方塊效率。因此,從1997年開始,jpeg委員會就致力于開發(fā)新的靜態(tài)圖像壓縮標準jpeg2000,并在2000年8月形成了最終經濟核草案,在2000年12月使其成為了國標標準。
jpeg2000相比jpeg有著更大的靈活性,不僅能對原始圖像高效地壓縮,而且可以對壓縮后的數(shù)據(jù)進行處理。這意味著可以從壓縮碼流中提取一部分數(shù)據(jù)來重建低分辨率或低碼率的圖像,或者是撮圖像的感興趣區(qū)域。這樣就允許將原始圖像壓縮為單一的碼流以適應不同的傳輸信道、存儲或顯示設備,而不必考慮圖像的大小、分量多少以及樣本的精度。 jpeg2000的一個主要特性就是基于圖像質量和分辨率的累進傳輸,為了支持這種可分級的壓縮編碼,jpeg2000采用了離散小波變換(dwt)替代jpeg中的離散余弦變換(dct),并采用了taubman提出的具有優(yōu)化截斷點的嵌入式塊編碼(ebcot)算法。 jpeg2000編碼器的框圖如圖1所示。 首先將原始圖像劃分為圖像片,通過dwt將圖像片分解為不同的分辨率級別,獲得多個子帶的頻域系數(shù),將各個子帶劃分為碼塊(典型大小是32×32或64×64),對每個碼塊進行嵌入式的塊編碼,生成上下文和待編碼的數(shù)據(jù)位;然后由算術編碼部分根據(jù)每個數(shù)據(jù)位的上下文自適應編碼,產生每個碼塊的子碼流;最后將各個碼塊的子碼流組織成代表碼流質量層的分組,并添加相應的頭結構信息,幫助解碼器如何解碼。 ebcot作為jpeg2000的核心部分,包含了層1和層2兩部分,其中嵌入式塊編碼的邏輯比較復雜,是影響編碼速度的瓶頸之一,使用通用處理器很難提高其效率。傳統(tǒng)的編碼方式采用軟件實現(xiàn),但速度和效率不高,且占用較大的存儲資源;而采用硬件實現(xiàn)方式則會有更大的靈活性。事實上采用硬件芯片實現(xiàn),不但可以提高編碼的速率和效率,而且也能根據(jù)算法本身的特點,采用特定的、高效的硬件結構來實現(xiàn)算法的關鍵部分,可以較大幅度地提高編碼效率。另外,隨著多媒體的應用和網(wǎng)絡應用逐步便攜化,以前多數(shù)可以在pc機上處理的工作必須轉移到便攜產品上,這對便攜產品有限的資源提出了挑戰(zhàn)。因此有必要研究硬件編碼芯片完成編碼過程,本文旨在研究jpeg2000編碼中的關鍵技術——嵌入式塊編碼。 1 算法分析及設計 嵌入式塊編碼其實是基于位平面的編碼,而每個位平面又被劃分為三個編碼通道,即顯著通道、細分通道和清除通道。編碼采用固定的掃描方式,每個比特位僅在其中的一個編碼通道中完成編碼。編碼過程可以分為兩個步驟,即差別編碼通道的歸屬和編碼原操作。在顯著通道中,當比特位本身不顯著,且周圍8個近鄰至少有一個是顯著時被編碼;在細分通道中,當比特位在上一個位平面就變顯著時被編碼;在清除通道,所有在上面兩個通道中略過的比特位被編碼。編碼原操作共患難個,即零值編碼、符號編碼、細化編碼和游程編碼。 根據(jù)算法要求,編碼時必須用到一些編碼信息。假設碼塊的大小是32×32的,則編碼信息立即包括1024個顯著信息位(表示當前系數(shù)位是否顯著)、1024個細化信息位(表示當前系數(shù)位是否第一次細分)、1024個訪問信息位(表示當前系統(tǒng)位是否在前面的編碼通道中編過)。當然,除此之外,還需要有1024個符號位和幅度位,因此編碼過程中需要存儲的信息為5kbit。由于fpga片內ram資源十分有限,因此將碼塊量化后的小波系數(shù)在外部ram中(對于32×32的碼塊,16bit的系數(shù),需要存儲16bit),而在片內只存儲5kbit的信息。 塊編碼過程是以一列的4個比特位為單位進行編碼,且在判別編碼通道的歸屬和編碼操作時,都需要用到當前比特位的8個近鄰的顯著信息和符號信息。因此,事實上在編碼每一列數(shù)據(jù)時,必須訪問18bit的顯著信息和符號信息,以及當前列的幅度位、訪問信息和細分信息各4bit。對于幅度位、訪問信息和細分信息,可以將每列的數(shù)據(jù)作為一個字存儲,但這種存儲方式對顯著信息和符號信息卻效率較低。如圖2系數(shù),需要