摘要:本文簡要介紹了圖像壓縮的重要性和常用的無損圖像壓縮算法,分析了快速高效無損圖像壓縮算法(FELICS)的優勢,隨后詳細分析了該算法的編碼步驟和硬件實現方案,最后公布了基于該方案的FPGA性能指標。和其他壓縮算法相比該方案可極大地減小無損圖像壓縮系統所需的存儲空間和壓縮時間。 引言 隨著信息技術的巨大革新,數據存儲和傳輸開始在人類生活中變得越來越重要,數據壓縮技術因而應運而生,它不僅能減少數據存儲所需的空間還可以緩解傳輸帶寬的壓力。數據壓縮可以分為有損壓縮和無損壓縮兩種,其中有損壓縮技術可以獲得較高的壓縮比,但是會丟失一些圖片信息,可以應用在對圖像質量要求不高的領域,但是在醫療圖像、航天圖像等特殊領域中,則要求圖像壓縮算法是無損的[1]。 無損壓縮技術可以去除冗余信息并保證重建的步驟不會對原始信息帶來任何損失。這樣一來,解碼后的信息就和原始信息精確相等。CALIC [2]和JPEG-LS[3]等諸多算法都已經被廣泛應用在這一領域。另外,離散小波變換(DWT)算法也常被用來放松對開環視頻編碼系統存儲空間和帶寬的要求。但是,這些算法大多對數據具有嚴重的依賴性并且編碼步驟較為復雜,因此限制了其在高速產品中的應用?焖俑咝o損圖像壓縮系統(FELICS)于1993年由P.G.howard提出[4],這是一種以編碼效率見長的無損圖像壓縮算法,并且編碼時對數據沒有依賴性,因此能應用在高速壓縮系統中[5-6]。幾種壓縮算法的壓縮比和壓縮時間對比如圖1所示,可以看出FELICS算法壓縮比適中,但壓縮效率的優勢較為明顯。 接下來將詳細分析FELICS算法的優勢和具體的編碼步驟,最后將針對這一壓縮算法提出一種基于FPGA的硬件實現方案。 1 整體算法設計 FELICS算法中應用到三種主要的技術手段:像素點分布模型的選取、修正的二元編碼和GOLOMB-RICE熵編碼。 1.1 像素點分布模型 整幅圖像前兩個像素點不進行編碼處理直接輸出,從第三個像素點開始選取與之相鄰的兩個像素點作為參考像素點,參考像素點的選取規則如圖3所示,用i和j來表示行號和列號,P,N1和N2表示當前像素點和兩個參考像素點,選取規則如下: If (i==1 && j2) N1=P[i,j-1],N2=P[i,j-2]; If (i>1 && j==1) N1=P[i-1,j],N2=P[i-1,j+1]; If (i>1 && j>1) N1=P[i,j-1],N2=P[i-1,j]; 選出參考像素點N1與N2之后,將二者進行比較,記較大者為H,較小者為L,Δ為H-L。 依照當前像素點P位于區間[L,H]的位置信息,分為三種情況采用不同的編碼方式: If (L≤P≤H) 選用修正的二元編碼,并用1比特’0’來表示P落于[L,H]內,殘余值R=P-L; If (P≤L) 選用GOLOMB-RICE編碼,并用2比特’10’表示P落于小于下界L的區間內,殘余值R=L-P-1; If (H≤P) 同樣選用GOLOMB-RICE編碼,并用2比特’11’表示P落于大于上界H的區間內,殘余值R=P-H-1。 1.2 修正的二元編碼 在修正二元編碼的編碼區間[L,H]內,中間部分和兩邊部分相比,有像素點出現的概率要略高一些,所以對二進制編碼進行修正,對中間部分像素點的殘余值R賦予較短的編碼,對兩邊部分像素點的殘余值R賦予較長的編碼。例如當△為5時,P值的可能值為0、1、2、3、4、5。在編碼時,將處在區間中央的2、3分別編碼為00和11,而將0、1、4、5分別編碼為110、111、100和101。 1.3 GOLOMB-RICE熵編碼 GOLOMB-RICE熵編碼是GOLOMB編碼的一種特殊情況,屬于指數編碼的一種。FELICS算法中像素點概率分布模型在小于下界L和大于上界H的部分是以指數形式分布的,符合GOLOMB-RICE編碼的適用范圍,因此選用這種編碼方法。編碼步驟如下: (1)選定參數K 在整幅圖像編碼開始之前,建立一個U×V×T比特大小的累加表,其中U,V和T分別代表背景值Δ的個數、備選K值的個數和每一個K值下累計編碼的長度。在每一次進行GOLOMB-RICE編碼之前,按照Δ的數值定位到累加表的相應行,選出累計編碼長度最短的K值作為當前像素殘余值GOLOMB-RICE編碼的K值。 (2)分別確定一進制和二進制編碼 一進制編碼:unary=R/2K的整數部分; 二進制編碼:binary=R/2K的余數部分; 最終的GOLOMB-RICE編碼由三部分組成:unary個’1’,binary的二進制形式和1比特’0’,其中’0’置于一進制編碼和二進制編碼之間,作為解碼時的標志位。 (3)更新累加表 編碼完成之后要依次用備選的K值對殘余值R進行GOLOMB-RICE編碼,計算出編碼的長度并累加到累加表中K值相應的位置處,以用于后續像素點進行GOLOMB-RICE編碼時K值的選取。 2 壓縮系統硬件設計 設計采用 4 級流水線結構,系統只有一個主時鐘CLK作為工作時鐘。硬件實現包括控制單元、上下文模型選取單元、預測單元、熵編碼單元和并串轉換單元,硬件結構框圖如圖 4。 控制單元負責產生控制信號以協調各電路模塊的工作順序;上下文模型選取單元將像素值輸入存儲器進行存儲,產生當前像素、相鄰像素和上下文預測值Δ;預測單元根據不同的上下文模型求出像素殘余值;編碼單元對像素殘余值進行修正的二元編碼或GOLOMB-RICE編碼;并串轉換單元負責將編碼結果轉換為碼流進行輸出。 圖5所示為各個電路子模塊的接口定義及連線圖。其中上下文產生模塊和預測模塊功能具有連續性,用一個模塊表示,像素值以光柵掃描的順序逐行進行讀入,需要一個行存儲器對像素值進行存儲,每完成對一個像素點的編碼操作之后,將存儲器中該處的像素值更新為當前行當前列的像素值,本方案處理的圖像大小為512*512,因此只需要一個512*8比特的存儲器。修正二元編碼和GOLOMB-RICE編碼模塊算法相對復雜一些,為了加快系統的時鐘頻率,將算法中的計算步驟進行拆分細化。GOLOMB-RICE編碼模塊需要進行參數K的選取,若K的可能值有4個,則還需要256*8*4比特大小的存儲器作為累加表。最后,由于編碼后的碼值是變長的,為了滿足輸出端口的要求,要對編碼結果進行并串轉換操作,輸出端以碼流的形式進行輸出。 壓縮系統已集成在XILINX VIRTEX-5 FPGA上,并利用開發板XUPV5_LX110T進行了驗證,當工作頻率為20MHZ時, 吞吐率可達45f/s,所需存儲空間僅為13.1Kbits,每幀的功耗僅為13.67毫瓦。經過若干經典圖像測試后發現此壓縮系統的平均壓縮比為2.2,和主流的無損圖像壓縮算法(如JPEG-LS)相當,但壓縮效率提升約80%左右。 3 結語 科技的發展和移動終端的普及對圖像壓縮系統的處理效率提出了越來越高的要求。本方案中的無損圖像壓縮系統和傳統壓縮算法(如JPEG-LS, CALIC等)相比,在壓縮比相當的情況下,算法簡單,所需的存儲器面積和處理時間也都大幅度下降,可以很好地兼容到醫療或航天圖像壓縮系統中。 參考文獻: [1] Liang J Y, Chen C S, Huang C H, et al. Lossless compression of medical images using Hilbert space-filling curves [J]. Computerized Medical Imaging and Graphics, 2008, 32(3): 174-182 [2] Wu X, Memon N. Context-based, adaptive, lossless image coding[J]. Transactions On Communications, IEEE, 1997, 45(4): 437-444 [3] Lossless and Near-Lossless Coding of Continuous Still Images (JPEG-LS), ISO/IEC JTC1/SC29 WG1 ITU-T SG8 (JPEG/JBIG), CD 14495, 1998 [4] P. G. Howard and J. S. Vitter, Fast and efficient lossless image compression[C], in Proc. IEEE Int. Conf. Data Compression, 1993 [5] Tsai T H,Lee Y H,Lee Y Y. Design and analysis of high-throughput lossless image compression engine using VLSI-oriented FELICS algorithm [J]. Transactions on Very Large Scale Integration (VLSI) Systems, IEEE, 2010 [6] 薛金勇,黑勇,陳黎明.快速高效無損圖像壓縮系統的低功耗硬件實現[J].哈爾濱工程大學學報,2014 |