摘要:本文簡(jiǎn)要介紹了圖像壓縮的重要性和常用的無(wú)損圖像壓縮算法,分析了快速高效無(wú)損圖像壓縮算法(FELICS)的優(yōu)勢(shì),隨后詳細(xì)分析了該算法的編碼步驟和硬件實(shí)現(xiàn)方案,最后公布了基于該方案的FPGA性能指標(biāo)。和其他壓縮算法相比該方案可極大地減小無(wú)損圖像壓縮系統(tǒng)所需的存儲(chǔ)空間和壓縮時(shí)間。 引言 隨著信息技術(shù)的巨大革新,數(shù)據(jù)存儲(chǔ)和傳輸開(kāi)始在人類生活中變得越來(lái)越重要,數(shù)據(jù)壓縮技術(shù)因而應(yīng)運(yùn)而生,它不僅能減少數(shù)據(jù)存儲(chǔ)所需的空間還可以緩解傳輸帶寬的壓力。數(shù)據(jù)壓縮可以分為有損壓縮和無(wú)損壓縮兩種,其中有損壓縮技術(shù)可以獲得較高的壓縮比,但是會(huì)丟失一些圖片信息,可以應(yīng)用在對(duì)圖像質(zhì)量要求不高的領(lǐng)域,但是在醫(yī)療圖像、航天圖像等特殊領(lǐng)域中,則要求圖像壓縮算法是無(wú)損的[1]。 無(wú)損壓縮技術(shù)可以去除冗余信息并保證重建的步驟不會(huì)對(duì)原始信息帶來(lái)任何損失。這樣一來(lái),解碼后的信息就和原始信息精確相等。CALIC [2]和JPEG-LS[3]等諸多算法都已經(jīng)被廣泛應(yīng)用在這一領(lǐng)域。另外,離散小波變換(DWT)算法也常被用來(lái)放松對(duì)開(kāi)環(huán)視頻編碼系統(tǒng)存儲(chǔ)空間和帶寬的要求。但是,這些算法大多對(duì)數(shù)據(jù)具有嚴(yán)重的依賴性并且編碼步驟較為復(fù)雜,因此限制了其在高速產(chǎn)品中的應(yīng)用。快速高效無(wú)損圖像壓縮系統(tǒng)(FELICS)于1993年由P.G.howard提出[4],這是一種以編碼效率見(jiàn)長(zhǎng)的無(wú)損圖像壓縮算法,并且編碼時(shí)對(duì)數(shù)據(jù)沒(méi)有依賴性,因此能應(yīng)用在高速壓縮系統(tǒng)中[5-6]。幾種壓縮算法的壓縮比和壓縮時(shí)間對(duì)比如圖1所示,可以看出FELICS算法壓縮比適中,但壓縮效率的優(yōu)勢(shì)較為明顯。 接下來(lái)將詳細(xì)分析FELICS算法的優(yōu)勢(shì)和具體的編碼步驟,最后將針對(duì)這一壓縮算法提出一種基于FPGA的硬件實(shí)現(xiàn)方案。 1 整體算法設(shè)計(jì) FELICS算法中應(yīng)用到三種主要的技術(shù)手段:像素點(diǎn)分布模型的選取、修正的二元編碼和GOLOMB-RICE熵編碼。 1.1 像素點(diǎn)分布模型 整幅圖像前兩個(gè)像素點(diǎn)不進(jìn)行編碼處理直接輸出,從第三個(gè)像素點(diǎn)開(kāi)始選取與之相鄰的兩個(gè)像素點(diǎn)作為參考像素點(diǎn),參考像素點(diǎn)的選取規(guī)則如圖3所示,用i和j來(lái)表示行號(hào)和列號(hào),P,N1和N2表示當(dāng)前像素點(diǎn)和兩個(gè)參考像素點(diǎn),選取規(guī)則如下: 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]; 選出參考像素點(diǎn)N1與N2之后,將二者進(jìn)行比較,記較大者為H,較小者為L(zhǎng),Δ為H-L。 依照當(dāng)前像素點(diǎn)P位于區(qū)間[L,H]的位置信息,分為三種情況采用不同的編碼方式: If (L≤P≤H) 選用修正的二元編碼,并用1比特’0’來(lái)表示P落于[L,H]內(nèi),殘余值R=P-L; If (P≤L) 選用GOLOMB-RICE編碼,并用2比特’10’表示P落于小于下界L的區(qū)間內(nèi),殘余值R=L-P-1; If (H≤P) 同樣選用GOLOMB-RICE編碼,并用2比特’11’表示P落于大于上界H的區(qū)間內(nèi),殘余值R=P-H-1。 1.2 修正的二元編碼 在修正二元編碼的編碼區(qū)間[L,H]內(nèi),中間部分和兩邊部分相比,有像素點(diǎn)出現(xiàn)的概率要略高一些,所以對(duì)二進(jìn)制編碼進(jìn)行修正,對(duì)中間部分像素點(diǎn)的殘余值R賦予較短的編碼,對(duì)兩邊部分像素點(diǎn)的殘余值R賦予較長(zhǎng)的編碼。例如當(dāng)△為5時(shí),P值的可能值為0、1、2、3、4、5。在編碼時(shí),將處在區(qū)間中央的2、3分別編碼為00和11,而將0、1、4、5分別編碼為110、111、100和101。 1.3 GOLOMB-RICE熵編碼 GOLOMB-RICE熵編碼是GOLOMB編碼的一種特殊情況,屬于指數(shù)編碼的一種。FELICS算法中像素點(diǎn)概率分布模型在小于下界L和大于上界H的部分是以指數(shù)形式分布的,符合GOLOMB-RICE編碼的適用范圍,因此選用這種編碼方法。編碼步驟如下: (1)選定參數(shù)K 在整幅圖像編碼開(kāi)始之前,建立一個(gè)U×V×T比特大小的累加表,其中U,V和T分別代表背景值Δ的個(gè)數(shù)、備選K值的個(gè)數(shù)和每一個(gè)K值下累計(jì)編碼的長(zhǎng)度。在每一次進(jìn)行GOLOMB-RICE編碼之前,按照Δ的數(shù)值定位到累加表的相應(yīng)行,選出累計(jì)編碼長(zhǎng)度最短的K值作為當(dāng)前像素殘余值GOLOMB-RICE編碼的K值。 (2)分別確定一進(jìn)制和二進(jìn)制編碼 一進(jìn)制編碼:unary=R/2K的整數(shù)部分; 二進(jìn)制編碼:binary=R/2K的余數(shù)部分; 最終的GOLOMB-RICE編碼由三部分組成:unary個(gè)’1’,binary的二進(jìn)制形式和1比特’0’,其中’0’置于一進(jìn)制編碼和二進(jìn)制編碼之間,作為解碼時(shí)的標(biāo)志位。 (3)更新累加表 編碼完成之后要依次用備選的K值對(duì)殘余值R進(jìn)行GOLOMB-RICE編碼,計(jì)算出編碼的長(zhǎng)度并累加到累加表中K值相應(yīng)的位置處,以用于后續(xù)像素點(diǎn)進(jìn)行GOLOMB-RICE編碼時(shí)K值的選取。 2 壓縮系統(tǒng)硬件設(shè)計(jì) 設(shè)計(jì)采用 4 級(jí)流水線結(jié)構(gòu),系統(tǒng)只有一個(gè)主時(shí)鐘CLK作為工作時(shí)鐘。硬件實(shí)現(xiàn)包括控制單元、上下文模型選取單元、預(yù)測(cè)單元、熵編碼單元和并串轉(zhuǎn)換單元,硬件結(jié)構(gòu)框圖如圖 4。 控制單元負(fù)責(zé)產(chǎn)生控制信號(hào)以協(xié)調(diào)各電路模塊的工作順序;上下文模型選取單元將像素值輸入存儲(chǔ)器進(jìn)行存儲(chǔ),產(chǎn)生當(dāng)前像素、相鄰像素和上下文預(yù)測(cè)值Δ;預(yù)測(cè)單元根據(jù)不同的上下文模型求出像素殘余值;編碼單元對(duì)像素殘余值進(jìn)行修正的二元編碼或GOLOMB-RICE編碼;并串轉(zhuǎn)換單元負(fù)責(zé)將編碼結(jié)果轉(zhuǎn)換為碼流進(jìn)行輸出。 圖5所示為各個(gè)電路子模塊的接口定義及連線圖。其中上下文產(chǎn)生模塊和預(yù)測(cè)模塊功能具有連續(xù)性,用一個(gè)模塊表示,像素值以光柵掃描的順序逐行進(jìn)行讀入,需要一個(gè)行存儲(chǔ)器對(duì)像素值進(jìn)行存儲(chǔ),每完成對(duì)一個(gè)像素點(diǎn)的編碼操作之后,將存儲(chǔ)器中該處的像素值更新為當(dāng)前行當(dāng)前列的像素值,本方案處理的圖像大小為512*512,因此只需要一個(gè)512*8比特的存儲(chǔ)器。修正二元編碼和GOLOMB-RICE編碼模塊算法相對(duì)復(fù)雜一些,為了加快系統(tǒng)的時(shí)鐘頻率,將算法中的計(jì)算步驟進(jìn)行拆分細(xì)化。GOLOMB-RICE編碼模塊需要進(jìn)行參數(shù)K的選取,若K的可能值有4個(gè),則還需要256*8*4比特大小的存儲(chǔ)器作為累加表。最后,由于編碼后的碼值是變長(zhǎng)的,為了滿足輸出端口的要求,要對(duì)編碼結(jié)果進(jìn)行并串轉(zhuǎn)換操作,輸出端以碼流的形式進(jìn)行輸出。 壓縮系統(tǒng)已集成在XILINX VIRTEX-5 FPGA上,并利用開(kāi)發(fā)板X(qián)UPV5_LX110T進(jìn)行了驗(yàn)證,當(dāng)工作頻率為20MHZ時(shí), 吞吐率可達(dá)45f/s,所需存儲(chǔ)空間僅為13.1Kbits,每幀的功耗僅為13.67毫瓦。經(jīng)過(guò)若干經(jīng)典圖像測(cè)試后發(fā)現(xiàn)此壓縮系統(tǒng)的平均壓縮比為2.2,和主流的無(wú)損圖像壓縮算法(如JPEG-LS)相當(dāng),但壓縮效率提升約80%左右。 3 結(jié)語(yǔ) 科技的發(fā)展和移動(dòng)終端的普及對(duì)圖像壓縮系統(tǒng)的處理效率提出了越來(lái)越高的要求。本方案中的無(wú)損圖像壓縮系統(tǒng)和傳統(tǒng)壓縮算法(如JPEG-LS, CALIC等)相比,在壓縮比相當(dāng)?shù)那闆r下,算法簡(jiǎn)單,所需的存儲(chǔ)器面積和處理時(shí)間也都大幅度下降,可以很好地兼容到醫(yī)療或航天圖像壓縮系統(tǒng)中。 參考文獻(xiàn): [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] 薛金勇,黑勇,陳黎明.快速高效無(wú)損圖像壓縮系統(tǒng)的低功耗硬件實(shí)現(xiàn)[J].哈爾濱工程大學(xué)學(xué)報(bào),2014 |