胡燦,樊旭,何頂新
(華中科技大學(xué)自動(dòng)化學(xué)院,武漢 430074)
基于Zynq的JPEG圖像壓縮系統(tǒng)設(shè)計(jì)※
胡燦,樊旭,何頂新
(華中科技大學(xué)自動(dòng)化學(xué)院,武漢 430074)
介紹了基于Zynq平臺(tái)實(shí)現(xiàn)的JPEG圖像壓縮系統(tǒng)。該系統(tǒng)利用Zynq片上AXI總線實(shí)現(xiàn)了ARM與FPGA核間高吞吐率的數(shù)據(jù)交互操作,并結(jié)合了ARM和FPGA在嵌入式系統(tǒng)開發(fā)中各自的優(yōu)勢(shì),對(duì)軟硬件功能的實(shí)現(xiàn)進(jìn)行了明確的劃分。通過具體的實(shí)驗(yàn)測試,本系統(tǒng)的通用性及高效性得到了驗(yàn)證,并且該系統(tǒng)可方便地移植到不同的實(shí)際應(yīng)用中。
XC7Z020-CLG484;Zynq SoC;AXI總線;JPEG壓縮
隨著多媒體技術(shù)以及通信技術(shù)的迅猛發(fā)展,高質(zhì)量數(shù)字圖像的應(yīng)用越來越廣泛,然而未經(jīng)壓縮的數(shù)字圖像的數(shù)據(jù)量非常大,勢(shì)必會(huì)給圖像的存儲(chǔ)和傳輸都帶來很大的困難,因此對(duì)數(shù)字圖像的有效壓縮是不可或缺的。在現(xiàn)有圖像壓縮編碼技術(shù)中,靜態(tài)圖像壓縮編碼標(biāo)準(zhǔn)JPEG以其顯著的壓縮效率、較低的圖像質(zhì)量損失以及較低的實(shí)現(xiàn)復(fù)雜度得到了廣泛應(yīng)用,是常用的國際標(biāo)準(zhǔn)。
JPEG靜態(tài)圖像壓縮標(biāo)準(zhǔn)于1991年由聯(lián)合圖像專家組JPEG(Joint Picture Expert Group)制定[1]。發(fā)展至今,JPEG圖像壓縮系統(tǒng)在各大通用處理器平臺(tái)上的軟件實(shí)現(xiàn)早已成熟,但由于這些算法的實(shí)現(xiàn)需要大量系統(tǒng)資源(內(nèi)存、浮點(diǎn)運(yùn)算)的消耗,很難直接移植到資源有限的嵌入式平臺(tái)中。為了實(shí)現(xiàn)JPEG圖像壓縮在嵌入式平臺(tái)中的應(yīng)用,不少學(xué)者對(duì)JPEG編碼算法進(jìn)行了優(yōu)化,并在ARM微控制器、高性能DSP中進(jìn)行了實(shí)現(xiàn)[2-4]。由于圖像質(zhì)量及其對(duì)處理實(shí)時(shí)性要求的不斷提高,一些學(xué)者提出了采用FPGA并行硬件來實(shí)現(xiàn)JPEG圖像壓縮算法的解決方案[5],且取得了不錯(cuò)的效果。
若使用ARM微控制器進(jìn)行開發(fā),軟件方法的實(shí)現(xiàn)受限于指令的串行執(zhí)行,處理速度不會(huì)太快,且存在計(jì)算性能不足等問題。而使用高性能DSP進(jìn)行實(shí)現(xiàn)時(shí),雖然DSP內(nèi)部有專門的結(jié)構(gòu)加速實(shí)現(xiàn)數(shù)字信號(hào)處理,但存在開發(fā)復(fù)雜、可移植性不強(qiáng)等問題,而且由于是串行指令執(zhí)行系統(tǒng),仍存在處理速度上的局限。針對(duì)單純使用FPGA進(jìn)行開發(fā)時(shí),雖然硬件并行計(jì)算的優(yōu)勢(shì)能滿足圖像編碼算法處理性能上的需求,但在圖像數(shù)據(jù)的采集(如USB攝像頭)以及數(shù)據(jù)傳輸通信(如網(wǎng)絡(luò)傳輸)方面,相較嵌入式CPU而言,存在開發(fā)難度大、復(fù)雜度高、資源消耗多等問題,不利于系統(tǒng)通用平臺(tái)化實(shí)現(xiàn)。
要實(shí)現(xiàn)完整通用的圖像壓縮系統(tǒng),可以采用ARM和FPGA軟硬件協(xié)同設(shè)計(jì)的方式來實(shí)現(xiàn)整個(gè)系統(tǒng)平臺(tái),ARM處理器完成數(shù)字圖像的采集以及壓縮后數(shù)據(jù)的傳輸,F(xiàn)PGA作為協(xié)處理器,通過高速并行計(jì)算完成JPEG編碼算法的硬件實(shí)現(xiàn)。
針對(duì)ARM和FPGA這種異構(gòu)多核的協(xié)同開發(fā),核間通信速率通常是系統(tǒng)設(shè)計(jì)的限制所在,但目前單芯片上集成ARM和FPGA的技術(shù)已經(jīng)很成熟,如Xilinx公司2011年推出的Zynq-7000系列芯片[6],片內(nèi)高性能通信總線很好地解決了核間通信速率這一瓶頸。本文采用搭載有XC7Z020-CLG484芯片的ZedBoard平臺(tái)完整地實(shí)現(xiàn)了JPEG圖像壓縮系統(tǒng),在利用FPGA并行處理優(yōu)勢(shì)加速實(shí)現(xiàn)JPEG編碼算法的同時(shí),ARM部分便捷地實(shí)現(xiàn)了圖像數(shù)據(jù)的采集、簡單的預(yù)處理,以及壓縮后數(shù)據(jù)的傳輸?shù)裙δ堋?/p>
系統(tǒng)平臺(tái)按照處理流程主要分為3個(gè)部分:圖像數(shù)據(jù)獲取、圖像編碼處理以及壓縮后的數(shù)據(jù)傳輸。本系統(tǒng)的整體實(shí)現(xiàn)結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)實(shí)現(xiàn)結(jié)構(gòu)圖
圖像數(shù)據(jù)獲取部分主要目的是采集需要壓縮處理的圖像數(shù)據(jù),包括圖1中的傳輸通信模塊和圖像數(shù)據(jù)采集模塊。本系統(tǒng)平臺(tái)提供兩種實(shí)現(xiàn)方式:一種面向?qū)嶋H圖像傳輸應(yīng)用,通過在嵌入式硬件平臺(tái)中直接連接數(shù)字圖像傳感器來獲取圖像數(shù)據(jù)進(jìn)行處理;另一種則面向圖像處理算法的調(diào)試驗(yàn)證,由PC機(jī)通過以太網(wǎng)或串口發(fā)送特定的圖像數(shù)據(jù)到嵌入式平臺(tái)中進(jìn)行圖像處理算法的驗(yàn)證。這兩種圖像數(shù)據(jù)采集方式均由ARM部分編寫相應(yīng)的驅(qū)動(dòng)程序進(jìn)行實(shí)現(xiàn)。
圖像編碼處理部分是該系統(tǒng)平臺(tái)的核心,包括圖1中的預(yù)處理模塊和圖像JPEG編碼模塊。這部分是基于Baseline JPEG算法實(shí)現(xiàn)的[7],主要包括圖像的色彩空間變換、排序、二維離散余弦變換(2D-DCT)、量化、Z字掃描和熵編碼等模塊,圖像經(jīng)該算法處理后即可得到壓縮數(shù)據(jù)。該部分由ARM和FPGA協(xié)同處理實(shí)現(xiàn)。
壓縮后數(shù)據(jù)傳輸部分是指將壓縮后的數(shù)據(jù)由嵌入式硬件平臺(tái)通過圖1中的傳輸通信模塊發(fā)送至PC機(jī)端,完成圖像的解碼顯示。對(duì)于串口發(fā)送這一方案,由于傳輸速度慢,只適用于圖像處理算法的驗(yàn)證,要實(shí)現(xiàn)PC機(jī)端圖像的實(shí)時(shí)顯示則需要通過以太網(wǎng)傳輸。該部分的具體實(shí)現(xiàn)在ARM端進(jìn)行。
其中針對(duì)圖像數(shù)據(jù)獲取和壓縮后數(shù)據(jù)傳輸這兩部分在ARM端的軟件實(shí)現(xiàn),本系統(tǒng)在Zynq-7000SoC的ARM Cortex-A9雙核中移植了Ubuntu Linux操作系統(tǒng),其具備大量可利用的開源函數(shù)庫資源,極大地方便了圖像傳感器驅(qū)動(dòng)和以太網(wǎng)通信的實(shí)現(xiàn)。
本系統(tǒng)是在ZedBoard平臺(tái)上實(shí)現(xiàn)的,圖像數(shù)據(jù)的采集由ARM端完成,要實(shí)現(xiàn)JPEG編碼算法在FPGA中的硬件加速,F(xiàn)PGA需要與ARM進(jìn)行通信從而獲取到需要壓縮處理的圖像數(shù)據(jù)。系統(tǒng)中ARM與FPGA核間通信采用的是Zynq-7000片內(nèi)的高性能通信總線AXI_HP,通過DMA的形式進(jìn)行數(shù)據(jù)傳輸,AXI_HP總線最高位寬為64位,理論通信帶寬最高可達(dá)1200MB/s。
由于Baseline JPEG編碼是使用以DCT為基礎(chǔ)的順序編碼工作方式,在編碼過程中,先將原圖像分割成8×8的數(shù)據(jù)塊(如果是彩色圖像,需先進(jìn)行色彩空間的變換),圖像子塊按照一定的掃描順序依次輸入,對(duì)每一個(gè)8×8尺寸圖像子塊使用二維離散余弦變換去除圖像數(shù)據(jù)在空間上的相關(guān)性,然后根據(jù)指定的量化表進(jìn)行數(shù)據(jù)的量化處理,減少數(shù)據(jù)大小,再對(duì)數(shù)據(jù)進(jìn)行Z字掃描,便于數(shù)據(jù)編碼,接著根據(jù)指定的熵編碼表進(jìn)行編碼,減小數(shù)據(jù)編碼長度,最終得到壓縮圖像的編碼數(shù)據(jù)。為了充分發(fā)揮AXI_HP總線最高64位傳輸位寬以及FPGA并行處理等特性,本模塊將簡單的圖像預(yù)處理部分在ARM部分進(jìn)行實(shí)現(xiàn),而2D-DCT、量化、Z字掃描、熵編碼等部分則在FPGA部分進(jìn)行硬件加速實(shí)現(xiàn)。
2.1 ARM部分軟件的設(shè)計(jì)
圖像壓縮編碼部分在ARM端的軟件實(shí)現(xiàn)主要是完成圖像預(yù)處理的功能,具體包含色彩空間的變換以及圖像數(shù)據(jù)的排序兩個(gè)部分。
2.1.1 色彩空間變換
JPEG是針對(duì)連續(xù)色調(diào)(灰度和彩色)靜止圖像壓縮編碼的標(biāo)準(zhǔn),由彩色圖像傳感器獲取到的圖像通常是由RGB(即紅綠藍(lán))三種顏色分量組成,彩色圖像進(jìn)行JPEG壓縮前需要進(jìn)行色彩空間的轉(zhuǎn)換,通常轉(zhuǎn)換為YCrCb空間,包含一個(gè)亮度分量和兩個(gè)色度分量,由灰度圖像傳感器獲取的灰度圖像只有單一亮度分量,不需要轉(zhuǎn)換。
RGB與YCrCb空間轉(zhuǎn)換關(guān)系如下:
在進(jìn)行2D-DCT前,需要將圖像像素值轉(zhuǎn)換為有符號(hào)數(shù),即將幅值減去128,所以使用式(1)進(jìn)行色彩空間變換時(shí),得到的每個(gè)分量值還需減去128以轉(zhuǎn)換為有符號(hào)數(shù)。這些轉(zhuǎn)換含有浮點(diǎn)運(yùn)算,為提高處理效率,在ARM端軟件實(shí)現(xiàn)時(shí)可將各浮點(diǎn)運(yùn)算的結(jié)果制成表格,進(jìn)行色彩空間轉(zhuǎn)換時(shí)通過查表的方式實(shí)現(xiàn),節(jié)省了浮點(diǎn)運(yùn)算占用的處理時(shí)間。
彩色圖像的壓縮處理是將色彩空間變換后得到的Y、Cr、Cb三個(gè)分量按照灰度圖像(單一Y分量)的壓縮方法分別進(jìn)行壓縮。本文中主要以Y分量(灰度圖像)的壓縮為例進(jìn)行介紹,其他分量的處理方法類似。
2.1.2 圖像數(shù)據(jù)排序
JPEG壓縮編碼是以8×8數(shù)據(jù)塊為基本單元進(jìn)行編碼,一幅圖像中所有圖像子塊是以從左到右、自上往下的順序進(jìn)行處理的。本系統(tǒng)在ARM端完成色彩空間的轉(zhuǎn)換得到亮度值后,先對(duì)圖像數(shù)據(jù)按照處理順序進(jìn)行了重新排列,再通過64位寬的AXI_HP總線將數(shù)據(jù)傳輸給FPGA端進(jìn)行后續(xù)處理。通過這樣的設(shè)計(jì),F(xiàn)PGA端獲取到重新排列后的數(shù)據(jù)后,便可以直接進(jìn)行以8×8數(shù)據(jù)塊為基本單元的壓縮處理流水實(shí)現(xiàn),無需涉及到圖像數(shù)據(jù)的存儲(chǔ)等待時(shí)間,可減少總體處理時(shí)間。
2.2 FPGA部分軟件的設(shè)計(jì)
本系統(tǒng)中在FPGA部分主要是完成對(duì)預(yù)處理后數(shù)據(jù)的壓縮編碼,具體包含2D-DCT、量化、Z字掃描以及熵編碼4個(gè)模塊。
2.2.1 2D-DCT
對(duì)于2D-DCT(二維離散余弦變換)的實(shí)現(xiàn),本文采用行列分解快速算法,先對(duì)8×8圖像子塊的所有行完成一維離散余弦變換(1D-DCT),再對(duì)變換結(jié)果的每一列進(jìn)行一維離散余弦變換,就可以得到2D-DCT的結(jié)果。該部分具體實(shí)現(xiàn)框圖如圖2所示,針對(duì)AXI_HP總線最高64位傳輸位寬的特性,即可實(shí)現(xiàn)8個(gè)像素的圖像數(shù)據(jù)并行輸入,其中行列處理的轉(zhuǎn)換是通過控制8個(gè)64位輸入、8位輸出FIFO的讀寫進(jìn)行實(shí)現(xiàn)的。1D-DCT模塊采用Leoffler DCT算法進(jìn)行優(yōu)化實(shí)現(xiàn)[8],大量減少了乘法器資源的消耗,其中涉及到的浮點(diǎn)小數(shù)乘法運(yùn)算采用定點(diǎn)整數(shù)乘法進(jìn)行替代。
2.2.2 量 化
量化過程就是將經(jīng)過二維離散余弦變換后得到的頻域系數(shù),根據(jù)重要性的不同,分別除以不同的量化步長,從而得到量化結(jié)果,具體實(shí)現(xiàn)框圖略——編者注。為了提高處理速度,采用乘法運(yùn)算代替除法運(yùn)算,本文中使用的量化步長是將JPEG標(biāo)準(zhǔn)推薦量化表的倒數(shù)乘以211后得到的,并存儲(chǔ)在ROM中,經(jīng)過量化后,將計(jì)算結(jié)果右移11位即恢復(fù)為實(shí)際的量化結(jié)果。
圖2 2D_DCT實(shí)現(xiàn)框圖
2.2.3 Z字掃描
經(jīng)過量化處理后,每個(gè)8×8圖像子塊中將出現(xiàn)很多值為0的高頻分量,主要集中在8×8矩陣的右下角,使用Z字形掃描的方式將8×8的二維系數(shù)矩陣變成一維數(shù)據(jù)流(第一個(gè)為DC系數(shù),其余63個(gè)為AC系數(shù)),這樣可以使0值分量集中,以便之后的數(shù)據(jù)編碼,具體實(shí)現(xiàn)框圖略——編者注。
2.2.4 熵編碼
為了減少圖像的編碼長度,要對(duì)Z字掃描后的DC系數(shù)和AC系數(shù)做基于統(tǒng)計(jì)特性的熵編碼,該部分主要是DC系數(shù)根據(jù)直流Huffman編碼表進(jìn)行差分編碼,AC系數(shù)先進(jìn)行行程長度編碼,再根據(jù)交流Huffman編碼表進(jìn)行編碼,實(shí)現(xiàn)框圖如圖3所示。其中Huffman編碼模塊是將JPEG標(biāo)準(zhǔn)推薦的Huffman編碼表存儲(chǔ)在ROM中,通過查表的方式實(shí)現(xiàn)Huffman編碼。
圖3 熵編碼實(shí)現(xiàn)框圖
本系統(tǒng)實(shí)驗(yàn)平臺(tái)略——編者注,該實(shí)驗(yàn)硬件平臺(tái)主要包括以下幾個(gè)部分:①Kinect傳感器,生成分辨率為640 ×480的數(shù)字圖像數(shù)據(jù);②搭載有XC7Z020-CLG484芯片的ZedBoard開發(fā)板,實(shí)現(xiàn)JPEG圖像壓縮系統(tǒng);③無線路由器,連接ZedBoard與PC機(jī),實(shí)現(xiàn)以太網(wǎng)通信。本實(shí)驗(yàn)中,Zynq SoC平臺(tái)ARM部分移植了Ubuntu Linux操作系統(tǒng),由OpenNI驅(qū)動(dòng)程序獲取Kinect傳感器生成的圖像數(shù)據(jù),進(jìn)行色彩空間的變換得到亮度分量Y,重排序后通過AXI_HP總線傳輸給FPGA部分。FPGA部分讀取ARM端預(yù)處理后的圖像數(shù)據(jù),然后進(jìn)行圖像壓縮編碼。實(shí)現(xiàn)640×480像素灰度圖像壓縮編碼算法的FPGA資源占用量如表1所列,算法實(shí)現(xiàn)中涉及640×480尺寸數(shù)據(jù)的存儲(chǔ),因此消耗了較多的BRAM資源。FPGA部分完成圖像壓縮編碼后,便將壓縮后的數(shù)據(jù)通過AXI_HP總線傳輸回ARM部分,最后通過以太網(wǎng)傳輸壓縮后圖像數(shù)據(jù)到PC端,進(jìn)行實(shí)時(shí)解碼顯示。
表1 FPGA算法資源占用量
經(jīng)過實(shí)驗(yàn)測試,ARM端CPU運(yùn)行時(shí)鐘頻率為667MHz,完成一幅圖像數(shù)據(jù)的采集、預(yù)處理等操作,需要耗時(shí)約14ms;FPGA端運(yùn)行時(shí)鐘頻率為100MHz,完成ARM端預(yù)處理后數(shù)據(jù)的讀取、圖像壓縮編碼等操作,需要307 251個(gè)時(shí)鐘周期,耗時(shí)3.07ms。由于不同復(fù)雜度的圖像壓縮后數(shù)據(jù)量不一樣,所以每幅圖像壓縮后數(shù)據(jù)傳輸回ARM端的時(shí)間也不一樣。如圖4所示的實(shí)驗(yàn)測試圖樣,在具有大量圖像細(xì)節(jié)的情況下,本系統(tǒng)實(shí)現(xiàn)的壓縮比為13.81,經(jīng)過FPGA算法壓縮完成后的數(shù)據(jù)傳輸回ARM需耗時(shí)0.03ms,完成圖像壓縮處理的時(shí)間總消耗不超過17.5ms。針對(duì)Kinect傳感器30fps的幀率而言,該系統(tǒng)在一個(gè)圖像周期內(nèi)足以完成圖像壓縮處理操作,具備良好的實(shí)時(shí)性。
圖4所示為隨機(jī)獲取兩幅圖像的實(shí)驗(yàn)測試結(jié)果,測試結(jié)果表明,該系統(tǒng)在獲得較大壓縮比的同時(shí),保留了原始圖片的關(guān)鍵信息,能滿足實(shí)際應(yīng)用需求。
圖4 實(shí)驗(yàn)測試結(jié)果
本文主要介紹了一個(gè)基于Zynq SoC的JPEG圖像壓縮系統(tǒng)的實(shí)現(xiàn)過程。該系統(tǒng)按照處理流程劃分為圖像數(shù)據(jù)獲取、圖像編碼處理以及壓縮后數(shù)據(jù)傳輸3個(gè)部分。本文創(chuàng)新性的采用了ARM與FPGA軟硬件協(xié)同設(shè)計(jì)的方式對(duì)JPEG圖像壓縮系統(tǒng)進(jìn)行了高效實(shí)現(xiàn),充分結(jié)合了ARM與FPGA各自在開發(fā)上的特點(diǎn),并采用Zynq片上高性能AXI_HP總線實(shí)現(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平臺(tái)上的實(shí)現(xiàn)與優(yōu)化[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2007(12):5-8.
[3]張長春,楊浩.基于ARM的JPEG編碼器設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息:嵌入式與SoC,2010,26(4-2):99-101.
[4]耿倩,王耀南,余浩.基于DSP的JPEG靜態(tài)圖像壓縮編碼設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,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.
胡燦(碩士研究生),研究方向?yàn)榍度胧较到y(tǒng)、移動(dòng)機(jī)器人、數(shù)字圖像處理;樊旭(碩士研究生),主要研究方向?yàn)榍度胧较到y(tǒng);何頂新(副教授),主要研究方向?yàn)榍度胧较到y(tǒng)、移動(dòng)機(jī)器人。
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)