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