胡燦,樊旭,何頂新
(華中科技大學自動化學院,武漢 430074)
基于Zynq的JPEG圖像壓縮系統(tǒng)設計※
胡燦,樊旭,何頂新
(華中科技大學自動化學院,武漢 430074)
介紹了基于Zynq平臺實現(xiàn)的JPEG圖像壓縮系統(tǒng)。該系統(tǒng)利用Zynq片上AXI總線實現(xiàn)了ARM與FPGA核間高吞吐率的數(shù)據(jù)交互操作,并結合了ARM和FPGA在嵌入式系統(tǒng)開發(fā)中各自的優(yōu)勢,對軟硬件功能的實現(xiàn)進行了明確的劃分。通過具體的實驗測試,本系統(tǒng)的通用性及高效性得到了驗證,并且該系統(tǒng)可方便地移植到不同的實際應用中。
XC7Z020-CLG484;Zynq SoC;AXI總線;JPEG壓縮
隨著多媒體技術以及通信技術的迅猛發(fā)展,高質量數(shù)字圖像的應用越來越廣泛,然而未經(jīng)壓縮的數(shù)字圖像的數(shù)據(jù)量非常大,勢必會給圖像的存儲和傳輸都帶來很大的困難,因此對數(shù)字圖像的有效壓縮是不可或缺的。在現(xiàn)有圖像壓縮編碼技術中,靜態(tài)圖像壓縮編碼標準JPEG以其顯著的壓縮效率、較低的圖像質量損失以及較低的實現(xiàn)復雜度得到了廣泛應用,是常用的國際標準。
JPEG靜態(tài)圖像壓縮標準于1991年由聯(lián)合圖像專家組JPEG(Joint Picture Expert Group)制定[1]。發(fā)展至今,JPEG圖像壓縮系統(tǒng)在各大通用處理器平臺上的軟件實現(xiàn)早已成熟,但由于這些算法的實現(xiàn)需要大量系統(tǒng)資源(內存、浮點運算)的消耗,很難直接移植到資源有限的嵌入式平臺中。為了實現(xiàn)JPEG圖像壓縮在嵌入式平臺中的應用,不少學者對JPEG編碼算法進行了優(yōu)化,并在ARM微控制器、高性能DSP中進行了實現(xiàn)[2-4]。由于圖像質量及其對處理實時性要求的不斷提高,一些學者提出了采用FPGA并行硬件來實現(xiàn)JPEG圖像壓縮算法的解決方案[5],且取得了不錯的效果。
若使用ARM微控制器進行開發(fā),軟件方法的實現(xiàn)受限于指令的串行執(zhí)行,處理速度不會太快,且存在計算性能不足等問題。而使用高性能DSP進行實現(xiàn)時,雖然DSP內部有專門的結構加速實現(xiàn)數(shù)字信號處理,但存在開發(fā)復雜、可移植性不強等問題,而且由于是串行指令執(zhí)行系統(tǒng),仍存在處理速度上的局限。針對單純使用FPGA進行開發(fā)時,雖然硬件并行計算的優(yōu)勢能滿足圖像編碼算法處理性能上的需求,但在圖像數(shù)據(jù)的采集(如USB攝像頭)以及數(shù)據(jù)傳輸通信(如網(wǎng)絡傳輸)方面,相較嵌入式CPU而言,存在開發(fā)難度大、復雜度高、資源消耗多等問題,不利于系統(tǒng)通用平臺化實現(xiàn)。
要實現(xiàn)完整通用的圖像壓縮系統(tǒng),可以采用ARM和FPGA軟硬件協(xié)同設計的方式來實現(xiàn)整個系統(tǒng)平臺,ARM處理器完成數(shù)字圖像的采集以及壓縮后數(shù)據(jù)的傳輸,F(xiàn)PGA作為協(xié)處理器,通過高速并行計算完成JPEG編碼算法的硬件實現(xiàn)。
針對ARM和FPGA這種異構多核的協(xié)同開發(fā),核間通信速率通常是系統(tǒng)設計的限制所在,但目前單芯片上集成ARM和FPGA的技術已經(jīng)很成熟,如Xilinx公司2011年推出的Zynq-7000系列芯片[6],片內高性能通信總線很好地解決了核間通信速率這一瓶頸。本文采用搭載有XC7Z020-CLG484芯片的ZedBoard平臺完整地實現(xiàn)了JPEG圖像壓縮系統(tǒng),在利用FPGA并行處理優(yōu)勢加速實現(xiàn)JPEG編碼算法的同時,ARM部分便捷地實現(xiàn)了圖像數(shù)據(jù)的采集、簡單的預處理,以及壓縮后數(shù)據(jù)的傳輸?shù)裙δ堋?/p>
系統(tǒng)平臺按照處理流程主要分為3個部分:圖像數(shù)據(jù)獲取、圖像編碼處理以及壓縮后的數(shù)據(jù)傳輸。本系統(tǒng)的整體實現(xiàn)結構如圖1所示。
圖1 系統(tǒng)實現(xiàn)結構圖
圖像數(shù)據(jù)獲取部分主要目的是采集需要壓縮處理的圖像數(shù)據(jù),包括圖1中的傳輸通信模塊和圖像數(shù)據(jù)采集模塊。本系統(tǒng)平臺提供兩種實現(xiàn)方式:一種面向實際圖像傳輸應用,通過在嵌入式硬件平臺中直接連接數(shù)字圖像傳感器來獲取圖像數(shù)據(jù)進行處理;另一種則面向圖像處理算法的調試驗證,由PC機通過以太網(wǎng)或串口發(fā)送特定的圖像數(shù)據(jù)到嵌入式平臺中進行圖像處理算法的驗證。這兩種圖像數(shù)據(jù)采集方式均由ARM部分編寫相應的驅動程序進行實現(xiàn)。
圖像編碼處理部分是該系統(tǒng)平臺的核心,包括圖1中的預處理模塊和圖像JPEG編碼模塊。這部分是基于Baseline JPEG算法實現(xiàn)的[7],主要包括圖像的色彩空間變換、排序、二維離散余弦變換(2D-DCT)、量化、Z字掃描和熵編碼等模塊,圖像經(jīng)該算法處理后即可得到壓縮數(shù)據(jù)。該部分由ARM和FPGA協(xié)同處理實現(xiàn)。
壓縮后數(shù)據(jù)傳輸部分是指將壓縮后的數(shù)據(jù)由嵌入式硬件平臺通過圖1中的傳輸通信模塊發(fā)送至PC機端,完成圖像的解碼顯示。對于串口發(fā)送這一方案,由于傳輸速度慢,只適用于圖像處理算法的驗證,要實現(xiàn)PC機端圖像的實時顯示則需要通過以太網(wǎng)傳輸。該部分的具體實現(xiàn)在ARM端進行。
其中針對圖像數(shù)據(jù)獲取和壓縮后數(shù)據(jù)傳輸這兩部分在ARM端的軟件實現(xiàn),本系統(tǒng)在Zynq-7000SoC的ARM Cortex-A9雙核中移植了Ubuntu Linux操作系統(tǒng),其具備大量可利用的開源函數(shù)庫資源,極大地方便了圖像傳感器驅動和以太網(wǎng)通信的實現(xiàn)。
本系統(tǒng)是在ZedBoard平臺上實現(xiàn)的,圖像數(shù)據(jù)的采集由ARM端完成,要實現(xiàn)JPEG編碼算法在FPGA中的硬件加速,F(xiàn)PGA需要與ARM進行通信從而獲取到需要壓縮處理的圖像數(shù)據(jù)。系統(tǒng)中ARM與FPGA核間通信采用的是Zynq-7000片內的高性能通信總線AXI_HP,通過DMA的形式進行數(shù)據(jù)傳輸,AXI_HP總線最高位寬為64位,理論通信帶寬最高可達1200MB/s。
由于Baseline JPEG編碼是使用以DCT為基礎的順序編碼工作方式,在編碼過程中,先將原圖像分割成8×8的數(shù)據(jù)塊(如果是彩色圖像,需先進行色彩空間的變換),圖像子塊按照一定的掃描順序依次輸入,對每一個8×8尺寸圖像子塊使用二維離散余弦變換去除圖像數(shù)據(jù)在空間上的相關性,然后根據(jù)指定的量化表進行數(shù)據(jù)的量化處理,減少數(shù)據(jù)大小,再對數(shù)據(jù)進行Z字掃描,便于數(shù)據(jù)編碼,接著根據(jù)指定的熵編碼表進行編碼,減小數(shù)據(jù)編碼長度,最終得到壓縮圖像的編碼數(shù)據(jù)。為了充分發(fā)揮AXI_HP總線最高64位傳輸位寬以及FPGA并行處理等特性,本模塊將簡單的圖像預處理部分在ARM部分進行實現(xiàn),而2D-DCT、量化、Z字掃描、熵編碼等部分則在FPGA部分進行硬件加速實現(xiàn)。
2.1 ARM部分軟件的設計
圖像壓縮編碼部分在ARM端的軟件實現(xiàn)主要是完成圖像預處理的功能,具體包含色彩空間的變換以及圖像數(shù)據(jù)的排序兩個部分。
2.1.1 色彩空間變換
JPEG是針對連續(xù)色調(灰度和彩色)靜止圖像壓縮編碼的標準,由彩色圖像傳感器獲取到的圖像通常是由RGB(即紅綠藍)三種顏色分量組成,彩色圖像進行JPEG壓縮前需要進行色彩空間的轉換,通常轉換為YCrCb空間,包含一個亮度分量和兩個色度分量,由灰度圖像傳感器獲取的灰度圖像只有單一亮度分量,不需要轉換。
RGB與YCrCb空間轉換關系如下:
在進行2D-DCT前,需要將圖像像素值轉換為有符號數(shù),即將幅值減去128,所以使用式(1)進行色彩空間變換時,得到的每個分量值還需減去128以轉換為有符號數(shù)。這些轉換含有浮點運算,為提高處理效率,在ARM端軟件實現(xiàn)時可將各浮點運算的結果制成表格,進行色彩空間轉換時通過查表的方式實現(xiàn),節(jié)省了浮點運算占用的處理時間。
彩色圖像的壓縮處理是將色彩空間變換后得到的Y、Cr、Cb三個分量按照灰度圖像(單一Y分量)的壓縮方法分別進行壓縮。本文中主要以Y分量(灰度圖像)的壓縮為例進行介紹,其他分量的處理方法類似。
2.1.2 圖像數(shù)據(jù)排序
JPEG壓縮編碼是以8×8數(shù)據(jù)塊為基本單元進行編碼,一幅圖像中所有圖像子塊是以從左到右、自上往下的順序進行處理的。本系統(tǒng)在ARM端完成色彩空間的轉換得到亮度值后,先對圖像數(shù)據(jù)按照處理順序進行了重新排列,再通過64位寬的AXI_HP總線將數(shù)據(jù)傳輸給FPGA端進行后續(xù)處理。通過這樣的設計,F(xiàn)PGA端獲取到重新排列后的數(shù)據(jù)后,便可以直接進行以8×8數(shù)據(jù)塊為基本單元的壓縮處理流水實現(xiàn),無需涉及到圖像數(shù)據(jù)的存儲等待時間,可減少總體處理時間。
2.2 FPGA部分軟件的設計
本系統(tǒng)中在FPGA部分主要是完成對預處理后數(shù)據(jù)的壓縮編碼,具體包含2D-DCT、量化、Z字掃描以及熵編碼4個模塊。
2.2.1 2D-DCT
對于2D-DCT(二維離散余弦變換)的實現(xiàn),本文采用行列分解快速算法,先對8×8圖像子塊的所有行完成一維離散余弦變換(1D-DCT),再對變換結果的每一列進行一維離散余弦變換,就可以得到2D-DCT的結果。該部分具體實現(xiàn)框圖如圖2所示,針對AXI_HP總線最高64位傳輸位寬的特性,即可實現(xiàn)8個像素的圖像數(shù)據(jù)并行輸入,其中行列處理的轉換是通過控制8個64位輸入、8位輸出FIFO的讀寫進行實現(xiàn)的。1D-DCT模塊采用Leoffler DCT算法進行優(yōu)化實現(xiàn)[8],大量減少了乘法器資源的消耗,其中涉及到的浮點小數(shù)乘法運算采用定點整數(shù)乘法進行替代。
2.2.2 量 化
量化過程就是將經(jīng)過二維離散余弦變換后得到的頻域系數(shù),根據(jù)重要性的不同,分別除以不同的量化步長,從而得到量化結果,具體實現(xiàn)框圖略——編者注。為了提高處理速度,采用乘法運算代替除法運算,本文中使用的量化步長是將JPEG標準推薦量化表的倒數(shù)乘以211后得到的,并存儲在ROM中,經(jīng)過量化后,將計算結果右移11位即恢復為實際的量化結果。
圖2 2D_DCT實現(xiàn)框圖
2.2.3 Z字掃描
經(jīng)過量化處理后,每個8×8圖像子塊中將出現(xiàn)很多值為0的高頻分量,主要集中在8×8矩陣的右下角,使用Z字形掃描的方式將8×8的二維系數(shù)矩陣變成一維數(shù)據(jù)流(第一個為DC系數(shù),其余63個為AC系數(shù)),這樣可以使0值分量集中,以便之后的數(shù)據(jù)編碼,具體實現(xiàn)框圖略——編者注。
2.2.4 熵編碼
為了減少圖像的編碼長度,要對Z字掃描后的DC系數(shù)和AC系數(shù)做基于統(tǒng)計特性的熵編碼,該部分主要是DC系數(shù)根據(jù)直流Huffman編碼表進行差分編碼,AC系數(shù)先進行行程長度編碼,再根據(jù)交流Huffman編碼表進行編碼,實現(xiàn)框圖如圖3所示。其中Huffman編碼模塊是將JPEG標準推薦的Huffman編碼表存儲在ROM中,通過查表的方式實現(xiàn)Huffman編碼。
圖3 熵編碼實現(xiàn)框圖
本系統(tǒng)實驗平臺略——編者注,該實驗硬件平臺主要包括以下幾個部分:①Kinect傳感器,生成分辨率為640 ×480的數(shù)字圖像數(shù)據(jù);②搭載有XC7Z020-CLG484芯片的ZedBoard開發(fā)板,實現(xiàn)JPEG圖像壓縮系統(tǒng);③無線路由器,連接ZedBoard與PC機,實現(xiàn)以太網(wǎng)通信。本實驗中,Zynq SoC平臺ARM部分移植了Ubuntu Linux操作系統(tǒng),由OpenNI驅動程序獲取Kinect傳感器生成的圖像數(shù)據(jù),進行色彩空間的變換得到亮度分量Y,重排序后通過AXI_HP總線傳輸給FPGA部分。FPGA部分讀取ARM端預處理后的圖像數(shù)據(jù),然后進行圖像壓縮編碼。實現(xiàn)640×480像素灰度圖像壓縮編碼算法的FPGA資源占用量如表1所列,算法實現(xiàn)中涉及640×480尺寸數(shù)據(jù)的存儲,因此消耗了較多的BRAM資源。FPGA部分完成圖像壓縮編碼后,便將壓縮后的數(shù)據(jù)通過AXI_HP總線傳輸回ARM部分,最后通過以太網(wǎng)傳輸壓縮后圖像數(shù)據(jù)到PC端,進行實時解碼顯示。
表1 FPGA算法資源占用量
經(jīng)過實驗測試,ARM端CPU運行時鐘頻率為667MHz,完成一幅圖像數(shù)據(jù)的采集、預處理等操作,需要耗時約14ms;FPGA端運行時鐘頻率為100MHz,完成ARM端預處理后數(shù)據(jù)的讀取、圖像壓縮編碼等操作,需要307 251個時鐘周期,耗時3.07ms。由于不同復雜度的圖像壓縮后數(shù)據(jù)量不一樣,所以每幅圖像壓縮后數(shù)據(jù)傳輸回ARM端的時間也不一樣。如圖4所示的實驗測試圖樣,在具有大量圖像細節(jié)的情況下,本系統(tǒng)實現(xiàn)的壓縮比為13.81,經(jīng)過FPGA算法壓縮完成后的數(shù)據(jù)傳輸回ARM需耗時0.03ms,完成圖像壓縮處理的時間總消耗不超過17.5ms。針對Kinect傳感器30fps的幀率而言,該系統(tǒng)在一個圖像周期內足以完成圖像壓縮處理操作,具備良好的實時性。
圖4所示為隨機獲取兩幅圖像的實驗測試結果,測試結果表明,該系統(tǒng)在獲得較大壓縮比的同時,保留了原始圖片的關鍵信息,能滿足實際應用需求。
圖4 實驗測試結果
本文主要介紹了一個基于Zynq SoC的JPEG圖像壓縮系統(tǒng)的實現(xiàn)過程。該系統(tǒng)按照處理流程劃分為圖像數(shù)據(jù)獲取、圖像編碼處理以及壓縮后數(shù)據(jù)傳輸3個部分。本文創(chuàng)新性的采用了ARM與FPGA軟硬件協(xié)同設計的方式對JPEG圖像壓縮系統(tǒng)進行了高效實現(xiàn),充分結合了ARM與FPGA各自在開發(fā)上的特點,并采用Zynq片上高性能AXI_HP總線實現(xiàn)了ARM與FPGA核間高速通信。
編者注:本文為期刊縮略版,全文見本刊網(wǎng)站www. mesnet.com.cn。
[1]The International Telegraph and Telephone Consultative Committee(CCITT).Information Technology-Digital Compression and Coding of Continuous-Tone Still Images-Requirements and Guidelines.Rec.T.81[S],1992.
[2]陳海東,沈建華.JPEG編碼算法在ARM7平臺上的實現(xiàn)與優(yōu)化[J].單片機與嵌入式系統(tǒng)應用,2007(12):5-8.
[3]張長春,楊浩.基于ARM的JPEG編碼器設計與實現(xiàn)[J].微計算機信息:嵌入式與SoC,2010,26(4-2):99-101.
[4]耿倩,王耀南,余浩.基于DSP的JPEG靜態(tài)圖像壓縮編碼設計與實現(xiàn)[J].計算機工程與應用,2006(23):82-84.
[5]Agostini L V,Porto R C,Bampi S,et al.A FPGA based design of a multiplierless and fully pipelined JPEG compressor [C]//Digital System Design,2005.Proceedings.8th Euromicro Conference on.IEEE,2005:210-213.
[6]Xilinx.Zynq-7000All Programmable SoC Technical Reference Manual[EB/OL].[2015-01].http://www.xilinx.com/support/documentation/user_guides/ug585-Zynq-7000-TRM. pdf.
[7]Wallace G K.The JPEG still picture compression standard [J].Consumer Electronics,IEEE Transactions on,1992,38(1):xviii-xxxiv.
[8]Loeffler C,Ligtenberg A,Moschytz G S.Practical fast 1-D DCT algorithms with 11multiplications[C]//Acoustics,Speech,and Signal Processing,1989.ICASSP-89,1989International Conference on.IEEE,1989:988-991.
胡燦(碩士研究生),研究方向為嵌入式系統(tǒng)、移動機器人、數(shù)字圖像處理;樊旭(碩士研究生),主要研究方向為嵌入式系統(tǒng);何頂新(副教授),主要研究方向為嵌入式系統(tǒng)、移動機器人。
JPEG lmage Compression System Based on Zynq※
Hu Can,F(xiàn)an Xu,He Dingxin
(School of Automation,Huazhong University of Science and Technology,Wuhan 430074,China)
This paper introduces the JPEG image compression system based on Zynq.In this system,a high band-width communication between ARM and FPGA is implemented by utilizing AXI bus in Zynq.In order to combine the features of ARM and FPGA in embedded system development effectively,the realization of tasks are partitioned into software and hardware.At last,apractical experiment is presented to illustrate that the image compression system has the characteristics of high-efficiency and universality,and this system can be applied to different applications conveniently.
XC7Z020-CLG484;Zynq SoC;AXI bus;JPEG compression
TN919.81
A
??薛士然
2015-01-25)