基于FPGA的無損圖像壓縮系統(tǒng)設(shè)計
依照當(dāng)前像素點P位于區(qū)間[L,H]的位置信息,分為三種情況采用不同的編碼方式:
本文引用地址:http://www.ex-cimer.com/article/267434.htmIf (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)的概率要略高一些,所以對二進(jìn)制編碼進(jì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值下累計編碼的長度。在每一次進(jìn)行GOLOMB-RICE編碼之前,按照Δ的數(shù)值定位到累加表的相應(yī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個’1’,binary的二進(jìn)制形式和1比特’0’,其中’0’置于一進(jìn)制編碼和二進(jìn)制編碼之間,作為解碼時的標(biāo)志位。
(3)更新累加表
編碼完成之后要依次用備選的K值對殘余值R進(jìn)行GOLOMB-RICE編碼,計算出編碼的長度并累加到累加表中K值相應(yīng)的位置處,以用于后續(xù)像素點進(jìn)行GOLOMB-RICE編碼時K值的選取。
2 壓縮系統(tǒng)硬件設(shè)計
設(shè)計采用 4 級流水線結(jié)構(gòu),系統(tǒng)只有一個主時鐘CLK作為工作時鐘。硬件實現(xiàn)包括控制單元、上下文模型選取單元、預(yù)測單元、熵編碼單元和并串轉(zhuǎn)換單元,硬件結(jié)構(gòu)框圖如圖 4。
fpga相關(guān)文章:fpga是什么
評論