龔楠 張津榮 趙東升



摘要 QUIc是一種預測編碼算法。它在只可以壓縮灰度圖像的SFALIC算法的基礎上,增加了RLE編碼,從而可以壓縮彩色圖像。采用FPGA硬件實現該算法不僅可以實時壓縮各種彩色圖像,而且可以將其部署到需要無損圖像壓縮的實時終端系統中。本文通過研究QUIc算法的原理及關鍵技術,提出了一種基于FPGA硬件實現QUIc無損圖像壓縮算法的設計方案,并通過實驗對其有效性進行了對比分析和驗證。
【關鍵詞】QUIc 無損壓縮 FPGA
1 引言
當今的社會是一個互聯網高度發達的時代,人們獲取的信息有很大一部分來自于網絡,其中圖像信息占了絕大部分。網絡中的圖片傳輸不僅耗費了大量的帶寬資源,而且占據了大量的存儲空間。因此,如何在保證圖片視覺不失真前提下縮小體積,對于節省帶寬和能耗十分重要。QUIC作為一種高速、高壓縮比、自適應的無損圖像壓縮算法,非常適合在實時性要求較高的領域應用。本文研究了QUIC無損圖像壓縮算法的原理及其關鍵技術,提出了基于FPGA實現QUIC無損壓縮算法的設計方案。
2 QUIC算法原理及關鍵技術
算法整體原理框圖如圖1所示,當圖像被處理成光柵掃描序列后形成圖像數據流后,圖像數據流被分割成位圖數據與文件頭數據。文件頭數據用于優化并選取參數k,位圖數據進入Golomb-Rice編碼模塊進行包括預測、映射、編碼等處理。同時當位圖數據流滿足RLE編碼條件時進入游長模式進行編碼。在完成Golomb-Rice和RLE編碼后,按順序進行QUIc碼流輸出。此外,為了提高壓縮速度,算法采用了基于FELICS算法的簡單的上下文模型,并使用了逐級降低模型更新頻率的方法。
2.1 像素值預測
在QUIC算法中,對于指定的像素X,預測器所采取的的方案是利用其周圍三個像素值:左相鄰像素(A),上相鄰像素(B),左上相鄰像素(C)。算法預測器Predl-7如表1所示,預測器Pred8如公式1所示:
2.2 Golomb-Rice編碼
算法所采用的編碼方案基于Golomb-Rice編碼系列。對于一個呈指數概率分布的無限字母表來說,GR編碼是一種最優編碼,每個編碼都是以一個級數k的非負整數為特征。對于一個特定的級數k,非負整數i的編碼首先以
[i/2 k]
(5)
計算前綴碼,而后以
imod2k
(6)
計算后綴碼,其中后綴碼的二進制長度為kbits。
編碼方案的采用極大地簡化了壓縮算法。對一個指定的殘差符號進行編碼,首先基于存儲在模型中的信息選定一個級數k,然后根據k級數輸出一個對應該殘差符號的碼字。
2.3 模型頻率更新
幾乎所有的典型圖像的特征是緩慢變化的,有的是幾乎不變的。由此,模型引入了降低更新頻率的方法。為了適應緩慢的變化,模型需要對圖像進行采樣,即更新數據模型,像素被編碼的頻率逐漸降低。如果在恒定的周期更新模型可能會干擾圖像結構。因此,每次在更新模型后,隨機選擇若干符號進行壓縮后再進行下一次更新模型。為了解碼器能夠選擇同編碼器同樣的隨機值,算法選擇了偽隨機數發生器。
在具體實現中,將每2048個像素分為一大段,每大段對應一個索引(wmidx),每個索引對應不同的閩值(trigger)。每一大段里,分成若干小段,小段的長度通過隨機數發生器計算。每壓縮完一小段,用這一小段的最后一個像素(stopidx)來更新模)。
這種方法可以確保在提高壓縮速度的同時具有較好的壓縮比,本文所述算法與FELICS算法相比,該模型更新頻率遞減的方法可以將壓縮速度提高約250%,其代價僅僅是壓縮比降低了1%。
3 QUIC壓縮算法的FPGA設計方法
本文的設計采用四級流水線結構,系統只有一個主時鐘CLK作為工作時鐘,實現了包括串轉并單元、圖像上下文模型選取單元、映射單元、熵編碼器單元、系統控制單元等5個單元。串轉并單元負責從位圖數據中讀取一個像素的RGB輸出;上下文模型選取單元根據上下文模型產生預測值;映射單元負責將預測殘值映射后輸入熵編碼器單元;熵編碼器單元負責將映射碼流進行游長模式編碼或者Golomb-Rice編碼;控制單元負責控制個單元的信號以及協調各模塊的工作先后順序。
3.1 游長模式設計
游長模式條件判斷模塊包括兩部分:預測值預備模塊和預測值比較模塊。預測值預備模塊獲得A、B、C、D的預測值。當B的預測值B和C的預測的值C'相等,A的預測值A'和D的預測值D相等,且列數大于2時,滿足游長模式的判斷條件,進入游長編碼模式。
進入該模塊后,首先要定義兩個數組輔助參量并將其存儲在rom中。這兩個輔助參量用于對游長編碼值進行區段切分與余數編碼兩部分的索引第一個輔助參量J[i]值為{o,O,O,O,1,1,1,1,2,2,2,2,3,3,3,3,4,4,5,5,6,6,7,7;8,9,10,11,12,13,14,15};第二個輔助參量melcoder[i]值為2^J[i]。
當進入游長模式后,通過狀態機進行編碼游長值,如下給出了狀態機的主要狀態:
(1)計算游長值得參數段數hits (Sl);
(2)計算余下長度leftlen (S2);
(3)編碼hits (S3);
(4)編碼leftlen (S4);
(5)合并hits與leftlen編碼(S5)
如上,當該模塊獲取到游長值后,進入Sl狀態,Sl狀態計算與melcoder是對應的;Sl狀態完成后進入S2狀態計算余下游長值;S3狀態將hits值右移5位截取高位,截取低5位,二者拼接成hits的編碼;S4狀態將leftlen轉為固定長度的二進制,長度由hits是否大于32所確定,如果大于32固定長度就為hits+l,否則為32;最后S5狀態將S3和S4的編碼值合并輸出。
3.2 頻率更新模塊設計
觸發更新模塊的主要作用是選取觸發更新的值,首先根據像素計數單元計算像素值的個數是否滿足2048,每當計數滿足2048時,wmidx遞增1,直到wmidx為6時不再遞增.不同的wmidx會從預設的參數更新值中進行索引。其次將參數值以paramerer的形式記錄一些隨機值,這些隨機值用以標注每個wmidx所對應的不同區間長度。
當輸入編碼更新信號使能時,像素計數重置為O,同時模塊根據wmidx以及不同區間長度值選擇stopidx的值,而當像素計數單元等于stopidx的值時,觸發k值更新使能,使得trigger_value輸出值有效。
3.3 像素編碼模塊設計
像素編碼模塊是整個編碼流程的最后一環,也是最終QUIC碼流輸出所在的模塊,該模塊由以下幾個單元所組成預測值輸入單元、k值選取單元、GR和非GR判斷單元、GR和非GR解碼單元、k值更新單元、RGB合并單元。
其中,預測值輸入單元負責將上游模塊的預測值讀入本模塊,進而由GR和非GR判斷模塊將預測值送入GR或者非GR編碼單元,這兩個單元所用編碼k值由k值選取單元選取,編碼完成后由k值更新單元更新k值,最后三個通道的編碼進行合并輸出。
4 QUIC算法壓縮核驗證與對比分析
4.1 QUIC算法壓縮核驗證
當完成各子模塊編寫并驗證無誤時,可利用二進制文件處理軟件UltraEdit對PC機收到的壓縮后碼流和編寫的算法C程序輸出標準碼流進行對比,分析數據差異后定位出問題的模塊并進行代碼修改。最后重復仿真并綜合下到板子上調試。
4.2 對比分析
經過24幅隨機圖片組的測試驗證,獲得表2所示壓縮比結果對比。
5 結束語
QUIC壓縮算法可用于遙感圖像,醫學影像以及云桌面傳輸等。所以使用FPGA實現QUIC算法具有十分重要的商業前景。本文通過研究QUIC無損圖像壓縮算法的基本原理及關鍵技術,提出了基于FPGA的QUIC的無損圖像壓縮算法的設計方法,不僅可以使得這種高效快速的無損圖像壓縮算法能夠得到快速的應用,也可以為該算法的改進以及優化基于FPGA的實現方法提供一定的基礎。
參考文獻
[1]張天序,鄒勝,曾永慧,基于FPGA的圖像無損壓縮算法的實現[J],系統工程與電子技術,2004,26 (10):1340-1343.
[2] Starosolski R.Simple fast andadaptive lossless image compressionalgorithm[J]. Software: Practice andExperience,2010, 37 (01): 65-91.
[3]于瀟,基于FPGA的無損圖像壓縮系統設計[J].電子產品世界,2015 (01):61-6 3.
[4]陳軍,基于LOCO-I算法的高速星載圖像無損壓縮FPGA實現研究[D].中國科學院研究生院(空間科學與應用研究中心).2011.