王娟,胡永剛,吳憲祥
?
基于FPGA的CCSDS位平面編碼設(shè)計(jì)與實(shí)現(xiàn)
王娟1,2,胡永剛2,吳憲祥2
(1.西安翻譯學(xué)院工程技術(shù)學(xué)院,西安710105;2.西安電子科技大學(xué)空間科學(xué)與技術(shù)學(xué)院ICIE研究所,西安 710071)
針對(duì)已有位平面編碼實(shí)現(xiàn)存在掃描效率低、復(fù)雜度高等缺點(diǎn),提出了一種基于CCSDS圖像壓縮算法位平面編碼技術(shù)的FPGA實(shí)現(xiàn)方法。將CCSDS圖像壓縮算法位平面編碼分為預(yù)處理、掃描、熵編碼等幾個(gè)關(guān)鍵模塊,采用流水結(jié)構(gòu)對(duì)系統(tǒng)進(jìn)行設(shè)計(jì)。最后,用Modelsim進(jìn)行仿真測(cè)試,經(jīng)檢驗(yàn),輸出的編碼結(jié)果正確。實(shí)驗(yàn)表明,提出的實(shí)現(xiàn)方案編碼效率高,復(fù)雜度低,有一定的實(shí)用價(jià)值。
CCSDS; 圖像壓縮; 位平面編碼; FPGA
隨著航天技術(shù)的飛速發(fā)展和人們對(duì)空間采集圖像的質(zhì)量要求越來(lái)越高,圖像的分辨率不斷增加,因此,數(shù)據(jù)的存儲(chǔ)量和傳輸量急劇增長(zhǎng)。大數(shù)據(jù)量的圖像會(huì)給星載存儲(chǔ)器的存儲(chǔ)容量,通信信道的帶寬,以及計(jì)算機(jī)的處理速度帶來(lái)很大的壓力,為了有效傳輸數(shù)據(jù),圖像的高效壓縮成為必然的解決方法。CCSDS(Consultative Committee for Space Data Systems,空間數(shù)據(jù)咨詢委員會(huì))2005年正式推出了新一代空間圖像壓縮推薦標(biāo)準(zhǔn)CCSDS122.0-B-1[1]。現(xiàn)在,該標(biāo)準(zhǔn)已經(jīng)被國(guó)際航空界廣泛采用,并成為各參與國(guó)制定自身應(yīng)用標(biāo)準(zhǔn)的一個(gè)重要參考文件,為實(shí)現(xiàn)開(kāi)放互連的國(guó)際空間數(shù)據(jù)奠定了技術(shù)基礎(chǔ)。然而,通常所用的處理器實(shí)現(xiàn)CCSDS標(biāo)準(zhǔn),需要高頻的時(shí)鐘,較大的緩存等,對(duì)CCSDS的應(yīng)用有很大的限制[2]。而FPGA具有內(nèi)部資源多,可并行結(jié)構(gòu)執(zhí)行,具有豐富的內(nèi)部存儲(chǔ)等優(yōu)點(diǎn),可以很好的解決以上問(wèn)題。所以,用FPGA實(shí)現(xiàn)CCSDS是一種有效的解決圖像壓縮的方法。
本文用FPGA實(shí)現(xiàn)CCSDS算法的位平面編碼,將位平面編碼分為預(yù)處理,掃描,熵編碼等關(guān)鍵模塊,對(duì)這些關(guān)鍵模塊采用流水的結(jié)構(gòu)設(shè)計(jì),從而提高系統(tǒng)掃描效率,降低系統(tǒng)復(fù)雜度。最后,對(duì)模塊進(jìn)行仿真驗(yàn)證,得出結(jié)論。
CCSDS算法的基本結(jié)構(gòu)主要分為兩個(gè)部分,離散小波變換和位平面編碼[3],如圖1所示。
輸入圖像經(jīng)過(guò)離散小波變換,進(jìn)行頻帶分解,對(duì)原始圖像去相關(guān)。然后對(duì)變換后的圖像數(shù)據(jù)進(jìn)行掃描以及熵編碼,最后拼接得到所需碼流。
1.1 離散小波變換
離散小波變換主要是去除圖像數(shù)據(jù)間的相關(guān)性,將數(shù)據(jù)間的相關(guān)冗余轉(zhuǎn)換成小波系數(shù)間的統(tǒng)計(jì)冗余,從而有利于現(xiàn)有的熵編碼技術(shù)進(jìn)行壓縮編碼。CCSDS推薦了浮點(diǎn)和整數(shù)兩種雙正交小波變換的方法,由于整數(shù)變換節(jié)省資源,運(yùn)算量小,有利于硬件實(shí)現(xiàn),且能實(shí)現(xiàn)完全重構(gòu),所以,整數(shù)小波變換具有更大的應(yīng)用優(yōu)勢(shì)。小波變換后,將原始圖像進(jìn)行三級(jí)的二維分解,得到10個(gè)子帶,小波變換系數(shù)分布,如圖2所示。
1.2 位平面編碼
位平面編碼主要包括3個(gè)部分:段頭編碼、直流系數(shù)和AC Depth編碼,以及交流系數(shù)位平面編碼[4]。段頭所需的信息在預(yù)處理之后都可獲得。直流系數(shù)編碼用rice算法[4],對(duì)直流系數(shù)進(jìn)行量化后,按照光柵掃描的順序?qū)懭氪a流中,從最高位開(kāi)始,直到BitDepthAC位為止。對(duì)于直流系數(shù)的低BitDepthAC位,將在交流系數(shù)位平面編碼中的stage0中進(jìn)行編碼。然后,開(kāi)始交流系數(shù)位平面編碼。交流系數(shù)位平面編碼可以分為5個(gè)部分:stage0~stage4。stage0是對(duì)直流系數(shù)編碼中的低BitDepthAC位進(jìn)行編碼;stage1~stage3對(duì)交流系數(shù)進(jìn)行編碼,每個(gè)stage分別對(duì)應(yīng)parent,children和grandchildren中的系數(shù),最后,對(duì)滿足條件的系數(shù)放入stage4中編碼。
經(jīng)過(guò)三級(jí)小波變換后的系數(shù)分布如圖2所示,在不同的頻帶都有每個(gè)家族的成員,為了方便對(duì)數(shù)據(jù)掃描,減少掃描冗余,位平面編碼模塊中,首先將每個(gè)家族的成員聚集在一起,按照頻帶由低到高、由左到右的原則排列,放入緩存中;并在放入的同時(shí)獲得最大值集合,即獲得相應(yīng)頻帶的最大值,放入最大值集合緩存中,然后開(kāi)始掃描。在掃描時(shí),最大值集合和系數(shù)集合串行進(jìn)行,在掃描完最大值集合后,開(kāi)始掃描系數(shù)集合,雖然這樣掃描的時(shí)間延長(zhǎng),但是可以減小實(shí)現(xiàn)復(fù)雜度,減小硬件實(shí)現(xiàn)的難度。直流系數(shù)和AC Depth按照標(biāo)準(zhǔn)要求,先進(jìn)行量化,量化后進(jìn)行rice編碼,本文采用最優(yōu)化的方法進(jìn)行編碼,即獲得使碼流最少的編碼選項(xiàng)后,進(jìn)行編碼。交流編碼分為位平面掃描和熵編碼兩部分,位平面編碼按照系數(shù)的重要性由高到低依次掃描,得到映射符號(hào),并將這些符號(hào)按照5個(gè)stage,存儲(chǔ)在緩存中。然后在獲得編碼選項(xiàng)后,進(jìn)行熵編碼,得到碼流。
2.1 算法實(shí)現(xiàn)總體框架
原始圖像經(jīng)過(guò)小波變換后,變換結(jié)果送入小波系數(shù)緩存。在位平面編碼算法中,首先對(duì)小波系數(shù)進(jìn)行預(yù)處理,實(shí)現(xiàn)小波樹的抽取,從小波系數(shù)緩存中讀取待編碼的段的系數(shù),組織成適合位平面編碼的結(jié)構(gòu),同時(shí)完成系數(shù)按頻帶加權(quán),掃描系數(shù)深度,以及統(tǒng)計(jì)等各集合系數(shù)的最大值的工作以輔助位平面掃描。將預(yù)處理的結(jié)果送入預(yù)處理緩存,DC系數(shù)緩存,AC Depth緩存。DC系數(shù)編碼和AC Depth編碼的編碼結(jié)構(gòu)相似,都是采用rice算法進(jìn)行編碼。位平面掃描是小波系數(shù)進(jìn)行預(yù)處理后,形成的適合位平面編碼的系數(shù)掃描[5],把掃描結(jié)果放入掃描緩存中,然后對(duì)掃描緩存中的數(shù)據(jù)進(jìn)行熵編碼,最后和DC系數(shù)和AC Depth編碼結(jié)果進(jìn)行碼字拼接,形成最后的碼流輸出。由于DC系數(shù)編碼和AC Depth編碼與交流系數(shù)位平面編碼是相互獨(dú)立的,將兩部分并行處理,使得壓縮周期減少,提高壓縮效率。算法整體結(jié)構(gòu),如圖3所示。
2.2 位平面編碼結(jié)構(gòu)
2.2.1 預(yù)處理模塊
小波變換后,系數(shù)是按子帶進(jìn)行存放的,如果直接按子帶進(jìn)行位平面編碼,結(jié)構(gòu)就會(huì)變得很復(fù)雜,給設(shè)計(jì)帶來(lái)很高的難度。因此,首先對(duì)小波變換后的系數(shù)進(jìn)行預(yù)處理。預(yù)處理將小波系數(shù)緩存中的系數(shù),進(jìn)行加權(quán)以及家族進(jìn)行聚合,形成適合位平面掃描的結(jié)構(gòu),并將結(jié)果放入預(yù)處理緩存中。同時(shí)對(duì)小波系數(shù)測(cè)量深度,得到DC系數(shù)和AC Depth,將得到的結(jié)果放入DC系數(shù)和AC Depth緩存中。
2.2.2 DC系數(shù)編碼與AC Depth編碼模塊
DC系數(shù)編碼與AC Depth編碼的核心算法思想是rice算法,因此,可以采用相似的編碼結(jié)構(gòu)。同時(shí),由于預(yù)處理后產(chǎn)生的數(shù)據(jù)可以組成段頭,在本文中,將段頭,DC系數(shù)編碼與AC Depth編碼放在這個(gè)模塊中實(shí)現(xiàn),如圖4所示。
在預(yù)處理結(jié)束后,給DC系數(shù)編碼與AC Depth編碼模塊的start信號(hào)有效,開(kāi)始進(jìn)行編碼。編碼參數(shù)根據(jù)DC系數(shù)與AC Depth確定量化參數(shù)q,量化后DC系數(shù)位深度N等參數(shù)。編碼控制首先控制模塊對(duì)DC系數(shù)進(jìn)行編碼,從DC系數(shù)緩存中調(diào)入DC系數(shù),經(jīng)過(guò)量化后,得到高BitDepthDC-q位。DC系數(shù)經(jīng)過(guò)量化后,送入預(yù)處理,然后將經(jīng)過(guò)預(yù)處理后的數(shù)據(jù)送入gaggle buffer中緩存。同時(shí),預(yù)處理在進(jìn)行處理的同時(shí),獲得編碼選項(xiàng)。AC Depth編碼和DC系數(shù)編碼的過(guò)程是一樣的。獲得編碼數(shù)據(jù)后,將段頭信息,DC和AC Depth的編碼數(shù)據(jù)送入熵編碼模塊,然后送入碼流拼接模塊,得到碼流。
本文中的編碼器獲得編碼選項(xiàng)采用的是基于遍歷的選優(yōu)法方法。對(duì)每個(gè)群的數(shù)據(jù)在每個(gè)編碼選項(xiàng)下統(tǒng)計(jì)編碼后的碼流長(zhǎng)度,對(duì)比統(tǒng)計(jì)結(jié)果,獲得使碼流長(zhǎng)度最短的編碼選項(xiàng)k作為該群的編碼選項(xiàng)。
2.2.3 交流系數(shù)位平面編碼模塊
交流系數(shù)位平面編碼模塊作為整個(gè)ccsds算法的核心部分,整體可以分為3個(gè)主要部分:塊重要性掃描,編碼字緩存和熵編碼[6]。塊重要性掃描實(shí)現(xiàn)對(duì)所有DC系數(shù)剩余位平面和AC系數(shù)掃描,同時(shí)生成stage0~stage4的原始編碼信息,即生成對(duì)、以及等信息的映射,得到映射符號(hào)(symbol)。得到映射符號(hào)后,如果直接將映射符號(hào)輸出進(jìn)行熵編碼,那么編碼字選項(xiàng)就不能及時(shí)獲得,因此,在進(jìn)行熵編碼之前,將映射符號(hào)送入緩存stage_0 MEM~stage_4 MEM中,在得到編碼字選項(xiàng)后,再進(jìn)行熵編碼。碼流組織與熵編碼模塊,將stage0~stage4中的映射符號(hào)按照順序依次讀出,進(jìn)行熵編碼,最后整合成碼流輸出,如圖5所示。
由于掃描和熵編碼占用了較多的壓縮時(shí)間,在這里對(duì)掃描和熵編碼采用流水的結(jié)構(gòu),當(dāng)一個(gè)位平面掃描完成后,將映射符號(hào)放入stage_MEM中,然后熵編碼模塊進(jìn)行編碼,在熵編碼的同時(shí),對(duì)下一個(gè)位平面進(jìn)行掃描。
在一個(gè)段的AC系數(shù)編碼中,stage0~stage4的編碼過(guò)程是交叉進(jìn)行的,即采用廣度優(yōu)先的掃描方式獲得每個(gè)stage的信息,然而這樣的掃描方式會(huì)導(dǎo)致小波系數(shù)的重復(fù)掃描,同時(shí)也會(huì)重復(fù)掃描最大值參數(shù)(集合最大值存儲(chǔ)器),增加實(shí)現(xiàn)的復(fù)雜度與實(shí)現(xiàn)難度,因此,本文在這里采取深度優(yōu)先的方式,將stage1~stage3的掃描過(guò)程串行執(zhí)行,在獲得stage1~stage3信息的時(shí)候,同時(shí)獲得stage4的信息,如圖6所示。
本文用verilog語(yǔ)言進(jìn)行電路設(shè)計(jì)描述,采用256*256像素大小的lena灰度圖像進(jìn)行測(cè)試,時(shí)鐘頻率為30MHz,最后利用Modelsim 6.5e仿真,得到測(cè)試結(jié)果。
3.1 DC系數(shù)編碼與AC Depth編碼仿真結(jié)果
直流系數(shù)的編碼,如圖7所示。
圖7 直流系數(shù)編碼
從緩存中讀出直流系數(shù)進(jìn)行量化,同時(shí)獲得量化步長(zhǎng),經(jīng)映射后獲得編碼字,對(duì)參數(shù)k按照最優(yōu)化方法選取,生成所需碼字,然后進(jìn)行碼流組織,輸出碼流。
3.2 掃描結(jié)果仿真
從緩存中讀出最大值和塊重要信息,如圖8所示。
按照算法標(biāo)準(zhǔn)生成stage0~stage4的信息,同時(shí),將stage0~stage4的信息存入stage_0 MEM~stage_4 MEM。當(dāng)數(shù)據(jù)有效時(shí),存儲(chǔ)地址遞加,write_en有效。在存儲(chǔ)的過(guò)程中,計(jì)算出編碼選項(xiàng)code_option。
3.3 位平面編碼結(jié)果仿真
當(dāng)一個(gè)位平面的的掃描完成時(shí),開(kāi)始進(jìn)行熵編碼和碼流拼接。如圖9所示。
從stage_0 MEM~stage_4 MEM中依次讀出數(shù)據(jù),進(jìn)行由symbol到變長(zhǎng)編碼字的映射,并且在第一次出現(xiàn)給定長(zhǎng)度的參數(shù)碼字之前,插入編碼選項(xiàng)code_option,最后按照8bit長(zhǎng)度輸出碼流。將位平面編碼的結(jié)果放入緩存中。
采用CCSDS官方網(wǎng)站上提供的8bit圖像進(jìn)行測(cè)試,圖像格式均為RAW格式,以256*256的Lena圖像為例,本方法可以在50MHz工作時(shí)鐘下零殘差實(shí)現(xiàn)圖像的三級(jí)小波變換,優(yōu)化前編碼任務(wù)平均消耗時(shí)間為21.42ms,優(yōu)化后編碼任務(wù)平均消耗時(shí)間為5.01ms,是原來(lái)未進(jìn)行流水結(jié)構(gòu)優(yōu)化的23.39%,縮短了BPE編碼時(shí)間,完全滿足40ms/幀的實(shí)時(shí)性要求。
本文針對(duì)CCSDS圖像壓縮算法推薦標(biāo)準(zhǔn),為提高掃描效率和降低實(shí)現(xiàn)復(fù)雜度,采用流水結(jié)構(gòu)的方法,對(duì)位平面編碼中的各個(gè)模塊進(jìn)行設(shè)計(jì)。Modelsim中仿真結(jié)果表明,系統(tǒng)編碼結(jié)果正確,復(fù)雜度低,能有效的提高編碼效率,在圖像壓縮領(lǐng)域具有較好的應(yīng)用前景。
[1] CCSDS122.0-B-1: Image Data Compression[S]. Washington,DC: CCSDS, 2005.
[2] 濮建福, 裴加軍,張寧,等.基于CCSDS的高光譜壓縮空譜聯(lián)合FPGA設(shè)計(jì)與實(shí)現(xiàn)[J]. 上海航天, 2015, 32(6): 53-57.
[3] CCSDS. Lossless Data Compression: Recommendation for Space Data Systems Standards: CCSDS121. 0-B-2, blue Book[M]. 2nd Ed. Washington DC: CCSDS, 2012.
[4] Pen S Y, Philipper A, Aaron Kiely, etal. The new CCSDS Image Compression Recommendation[C] IEEE Aerospace Conference, Piscataway, NJ: IEEE, 2005: 4138-4145.
[5] GU Xiaodong, WANG Huaichao, ZHANG Xuequan, Design and Implementation of Image Compression Core Based on CCSDS Algorithm[C], 2009 4th International Conference on Computer Science & Education(ICCSE 2009), Piscataway,NJ: IEEE, 2009: 1873-1876.
[6] 毛峽, 湛杰. CCSDS中位平面編碼的FPGA優(yōu)化實(shí)現(xiàn)[J]. 電視技術(shù), 2011, 35(7): 52-55.
Design and Implementation of Bit-plane Encoding for CCSDS Based on FPGA
Wang Juan1,2, Hu Yonggang2, Wu Xianxiang2
(1. School of Technology and Engineering, Xi’an Fanyi University, Xi’an 710105, China; 2. ICIE Institute, School of Aerospace Science and Technology, Xidian University, Xi’an 710071, China)
Aiming at overcoming the shortcomings of low scan efficiency and high complexity that exist in bit-plane coding, a bit-plane coding module in CCSDS image compression is proposed and implemented based on FPGA. Bit-plane coding in CCSDS image compression is composed of several key modules including pretreatment, scan, entropy coding, etc. Besides, the architecture in pipeline is adopted to design the system. Finally, the simulation is carried out by Modelsim, and the encoding result is turned out to be correct. The experimental results show that the implementation scheme proposed in this paper has high encoding efficiency, low complexity, thus it has great practical value.
CCSDS; Image compression; Bit-plane encoding; FPGA
1007-757X(2016)12-0004-04
TP751.1
A
國(guó)家自然科學(xué)基金項(xiàng)目(61105066);中央高?;究蒲袠I(yè)務(wù)費(fèi)專項(xiàng)資金資助項(xiàng)目(JB141305);
王 娟(1980-),女,山東沂水人,講師,碩士,研究方向:圖像處理、模式識(shí)別,西安 710071;
胡永剛(1985-),男,陜西榆林人,碩士,研究方向:FPGA設(shè)計(jì)應(yīng)用、圖像處理,西安 710071;
吳憲祥(1980-),男,山東沂水人,博士,碩士生導(dǎo)師,研究方向:進(jìn)化計(jì)算、圖像處理,西安 710071;
(2016.09.02)