陳雙燕
(閩南理工學(xué)院電子與電氣工程學(xué)院,福建石獅362700)
基于FPGA的JPEG編碼器設(shè)計(jì)
陳雙燕
(閩南理工學(xué)院電子與電氣工程學(xué)院,福建石獅362700)
討論了基于FPGA的JPEG編碼器的設(shè)計(jì)原理,完成了各模塊的設(shè)計(jì),并在ModelSim平臺(tái)上對(duì)代碼進(jìn)行了仿真,實(shí)現(xiàn)了圖片的JPEG編碼,最后在Quartus II平臺(tái)上進(jìn)行綜合。仿真結(jié)果表明該設(shè)計(jì)方案能較好地實(shí)現(xiàn)圖像壓縮。
FPGA;JPEG編碼器;2D-DCT
JPEG圖像壓縮技術(shù),可以在不顯著影響圖片質(zhì)量的前提下,減少圖像的存儲(chǔ)空間[1]。較之于相同圖像質(zhì)量的GIF、TIFF、PCX等圖像文件格式,JPEG是壓縮比最高的[2]。以JPEG壓縮算法為核心的圖像壓縮芯片可以應(yīng)用于數(shù)碼相機(jī)、掃描儀、衛(wèi)星通信中,具有良好的應(yīng)用前景。由于FPGA具備現(xiàn)場(chǎng)可編程特性,用FPGA實(shí)現(xiàn)JPEG編碼器,可縮短設(shè)計(jì)時(shí)間,實(shí)現(xiàn)實(shí)時(shí)信號(hào)處理[3]。
JPEG編碼系統(tǒng)由原始圖像數(shù)據(jù)預(yù)處理、色度空間變換、二維離散余弦變換(2D-DCT)模塊、量化模塊和編碼模塊組成,如圖1所示。其中原始圖像數(shù)據(jù)預(yù)處理是在Maltab平臺(tái)上完成的,JPEG編碼器是用FPGA實(shí)現(xiàn)的,采用Verilog HDL硬件描述語言進(jìn)行設(shè)計(jì),并在ModelSim平臺(tái)上進(jìn)行仿真測(cè)試,在Quartus II平臺(tái)上進(jìn)行設(shè)計(jì)的綜合。
圖1 JPEG編碼系統(tǒng)框圖
2.1色度空間變換模塊
彩色圖像的每個(gè)象素點(diǎn)一般具有RGB三個(gè)色彩分量。由于人眼對(duì)亮度變化比色彩變化更敏感,因此要進(jìn)行色度空間變換,將RGB信號(hào)變換為亮度和色差信號(hào)YCbCr(Y為亮度分量,Cb為藍(lán)色色度分量,Cr為紅色色度分量)。轉(zhuǎn)換公式如公式(1)所示。
由于在運(yùn)算過程中包含小數(shù),為避免不必要的FPGA資源浪費(fèi)并提升運(yùn)算速度,進(jìn)行代碼設(shè)計(jì)時(shí),將系數(shù)乘以214,得到運(yùn)算結(jié)果后,再將Y、Cb、Cr的值右移14位,輸出到二維離散余弦變換模塊。
2.2二維離散余弦變換模塊
離散余弦變換能極大地去除圖像元素在變換域中的相關(guān)性,為高效率的圖像壓縮奠定基礎(chǔ)。設(shè)X(m,n)為二維圖像信號(hào)數(shù)據(jù)矩陣,m、n為象素空間坐標(biāo),則其2D-DCT定義為[4]:
其中,M、N為圖像子塊的大小,對(duì)于8×8的圖像子塊,則M=8,N=8;u、v為象素頻域坐標(biāo),u=0,1,…,N-1;v=0,1,…,M-1.
C(u)和C(v)為正交化因子,其是為了保證交換基的規(guī)范正交性而引入的,
在進(jìn)行2D-DCT模塊的FPGA設(shè)計(jì)時(shí),以亮度分量Y為例,利用公式(3)進(jìn)行2D-DCT.
其中,T是DCT系數(shù)矩陣;inv(T)是T的轉(zhuǎn)置矩陣;Y是8×8圖像子塊的亮度分量矩陣;DY是經(jīng)過2D-DCT運(yùn)算后的結(jié)果。
由于T矩陣都是小數(shù),為了避免浮點(diǎn)數(shù)的復(fù)雜運(yùn)算,因此將T矩陣的值乘以214,然后將T與Y矩陣相乘。在計(jì)算DCT之前,一般要把輸入圖像的象素值減去128,令其取值范圍從[0,255]移到[-128,127]。本次設(shè)計(jì)未將Y、Cb、Cr的值減去128。T矩陣的第一行系數(shù)都是0.3536,乘以214后是5793,最后將DY的第一行(即T矩陣的第一行與Y矩陣的8列相乘后的結(jié)果)減去5932032(128×8×5793)。由于T矩陣除了第一行外的其余七行的系數(shù)都具有具有對(duì)稱性,每一行加起來之和為0,因此不需要減去5932032。因此,原本需要64次減法,就可以減為8次減法運(yùn)算。
2.3量化模塊
2D-DCT后的Y、Cb、Cr的值可用8×8的量化表進(jìn)行均勻量化,量化表中的每個(gè)元素是1到255之間的整數(shù),表示對(duì)應(yīng)的量化步長。量化是有損壓縮,用戶可以修改量化表來控制壓縮質(zhì)量,以亮度分量Y為例,其按公式(4)進(jìn)行量化,Q(u,v)為亮度量化表。
通常亮度分量和色差分量各有一張量化表,如圖2所示[2],而且對(duì)色差分量的將忽略更多的高頻成分。如果把圖2中的量化步長除以2,那么圖像質(zhì)量就接近完美了。
圖2 常用的亮度和色度量化表
為了驗(yàn)證該壓縮編碼器的性能,本次設(shè)計(jì)還采用了最低量化步長的量化表,即量化表中的元素全是1。
2.4熵編碼模塊
JPEG壓縮的最后一步是對(duì)量化后的系數(shù)進(jìn)行熵編碼。這一步采用通用的無損數(shù)據(jù)壓縮技術(shù),對(duì)圖像質(zhì)量沒有影響。
由于2D-DCT后低頻系數(shù)集中在8×8矩陣的左上角,因此在進(jìn)行熵編碼之前,先采用“Z”字型掃描,將8×8矩陣變?yōu)橐痪S數(shù)組,令低頻系數(shù)在前,高頻系數(shù)在后。因?yàn)楦哳l系數(shù)中有很多“0”,為了節(jié)約空間,所以交流系數(shù)的“中間符號(hào)”用零行程碼(Zero Run Length)表示。本次設(shè)計(jì)采用霍夫曼編碼來減少熵[5-6]。
3.1原始圖像數(shù)據(jù)預(yù)處理
選取一幅閩南理工學(xué)院圖書館的原始照片library.bmp(大小為91KB,尺寸為176×176象素),在Matlab平臺(tái)中,將照片劃分為8×8子塊,再逐行逐列讀取圖像子塊的RGB三個(gè)分量,每個(gè)分量是8bit,因此每個(gè)象素為24bit,以十六進(jìn)制按順序存儲(chǔ)在library.mif文件中,如圖3所示。library.mif文件開頭說明了存儲(chǔ)的數(shù)據(jù)個(gè)數(shù)、每個(gè)數(shù)據(jù)的寬度、存儲(chǔ)地址和數(shù)據(jù)的進(jìn)制格式。接著是圖像數(shù)據(jù),每一行是一個(gè)像素的RGB數(shù)據(jù)。
圖3 原始圖像數(shù)據(jù)
在Quartus II平臺(tái)上生成一個(gè)ROM存儲(chǔ)器(bmprom.v),存儲(chǔ)空間為32768個(gè)數(shù)據(jù),每個(gè)數(shù)據(jù)24位。在bmprom.v中,在altsyncram_component.init_file這一項(xiàng)中進(jìn)行l(wèi)ibrary.mif文件路徑的設(shè)置,將library. mif導(dǎo)入存儲(chǔ)器。
3.2 JPEG編碼過程
JPEG編碼器頂層模塊(jpeg_top)包括jpeg_datain、bmprom、RGB2YCbCr、yd_q_h、cbd_q_h和crd_q_h幾個(gè)模塊,如圖4所示。
圖4 JPEG編碼器的FPGA框圖
由jpeg_datain模塊產(chǎn)生讀使能信號(hào)和地址信號(hào)進(jìn)行bmprom數(shù)據(jù)的讀取。讀取規(guī)則如下:以64個(gè)圖像數(shù)據(jù)為一組,當(dāng)讀到每組的最后一個(gè)數(shù)據(jù)時(shí),令flag=1,接著等待16個(gè)系統(tǒng)時(shí)鐘(等這一組的數(shù)據(jù)編碼完成)后,令flag=0,再讀取下一組64個(gè)圖像數(shù)據(jù)。當(dāng)將要讀到最后一組圖像數(shù)據(jù)時(shí),令數(shù)據(jù)結(jié)束信號(hào)end_of_file_signal=1。
RGB2YCBCR模塊負(fù)責(zé)圖像數(shù)據(jù)的色度空間變換,yd_q_h、cbd_q_h和crd_q_h分別是Y、Cb、Cr分量的2D-DCT變換、量化、編碼模塊。
編碼結(jié)果存放在JPEG_bitstream中,當(dāng)數(shù)據(jù)有效信號(hào)data_ready為高電平時(shí),JPEG_bitstream輸出數(shù)據(jù)有效。JPEG_bitstream[31:24]是第一個(gè)編碼后的數(shù)據(jù),其次是JPEG_bitstream[23:16],接著是JPEG_bitstream[15:8],最后一個(gè)數(shù)據(jù)是JPEG_bitstream[7:0]。
3.3 JPEG編碼結(jié)果
在代碼測(cè)試文件中,將JPEG編碼結(jié)果按順序以十六進(jìn)制存放在lib.txt中,每8位數(shù)據(jù)空一個(gè)空格。為驗(yàn)證編碼結(jié)果是否正確,將JPEG編碼器輸出的數(shù)據(jù)加上JPEG表頭和結(jié)尾(FF D9),另存為.jpg文件。圖5(a)為原始圖像;圖5(b)為采用最小量化步長(量化表的值都為1)得到的壓縮圖像,壓縮后的圖像大小為原始圖像的56%;圖5(c)為采用圖2所示的量化表得到的壓縮圖像,壓縮后的圖像大小為原始圖像的7.59%.
(續(xù)下圖)
圖5 JPEG編碼結(jié)果
3.4設(shè)計(jì)綜合結(jié)果
在Quartus II平臺(tái)上進(jìn)行了設(shè)計(jì)的綜合,采用圖2所示的量化表綜合的結(jié)果如圖6所示。
圖6 JPEG編碼器綜合結(jié)果
本文詳細(xì)闡述了基于FPGA設(shè)計(jì)的JPEG編碼器,并在2D-DCT環(huán)節(jié)進(jìn)行了優(yōu)化運(yùn)算,最后實(shí)現(xiàn)了圖像的壓縮,正常情況下,壓縮后的圖像大小為原始圖像下的7.59%,并且在Quartus II平臺(tái)上進(jìn)行了設(shè)計(jì)的綜合。
[1]龍燕,何東健,宋懷波.基于GAP-RBF神經(jīng)網(wǎng)絡(luò)的JPEG編碼圖像質(zhì)量評(píng)價(jià)[J].小型微型計(jì)算機(jī)系統(tǒng),2013,(1):185-188.
[2]王艷.基于FPGA的JPEG硬件解碼器設(shè)計(jì)及實(shí)現(xiàn)[D].重慶:重慶大學(xué),2011.
[3]徐潔.基于FPGA的JPEG圖像壓縮系統(tǒng)的實(shí)現(xiàn)[D].大連:大連理工大學(xué),2013.
[4]云鵬.基于FPGA的圖像采集與JPEG壓縮編碼的研究[D].呼和浩特:內(nèi)蒙古大學(xué),2010.
[5]馬劍釗.基于FPGA的JPEG編碼算法的優(yōu)化設(shè)計(jì)與硬件實(shí)現(xiàn)[D].長沙:中南大學(xué),2008.
[6]宮澤林.基于JPEG圖像壓縮及其仿真實(shí)現(xiàn)[J].中國科技信息,2013,(11):84.
Design of JPEG Encoder based on FPGA
CHEN Shuang-yan
(School of Electronics and Electrical Engineering,Minnan Institute of Technology,Shishi Fujian 362700,China)
The principle of JPEG Encoder based on FPGA was discussed in the paper.Each module of the JPEG encoder was designed,and the code was simulated in modesSim platform,then the JPEG encoding of the image was achieved,and finally the design was compiled successfully in quartus II platform.The simulation results showed that the design was able to achieve image compression well.
FPGA;JPEG encoder;2D-DCT
TN911
A
1672-545X(2016)08-0252-03
2016-05-19
福建省中青年教師教育科研項(xiàng)目資助(編號(hào):JB14120)。
陳雙燕(1986-),女,福建福清人,講師,碩士,從事電子信息技術(shù)領(lǐng)域的教學(xué)與研究。