基于FPGA的網(wǎng)絡(luò)圖像采集處理系統(tǒng)設(shè)計(jì)
2.2 RAM控制模塊
RAM控制模塊通過(guò)乒乓操作對(duì)圖像數(shù)據(jù)進(jìn)行緩存和讀取,系統(tǒng)只存取圖像的亮度信號(hào),即Y信號(hào)。乒乓操作的處理流程如下:在第1場(chǎng)時(shí)間,將圖像數(shù)據(jù)緩存到SRAM1;在第2場(chǎng)時(shí)間,將圖像數(shù)據(jù)緩存到SRAM2,同時(shí)將SRAM1的數(shù)據(jù)送到JPEG編碼器進(jìn)行圖像壓縮;在第3場(chǎng)時(shí)間,將圖像數(shù)據(jù)緩存到SRAM1,同時(shí)將SRAM2的數(shù)據(jù)送到JPEG編碼器進(jìn)行圖像壓縮,依此循環(huán)。將圖像數(shù)據(jù)保存到SRAM時(shí),由視頻采集模塊的行有效計(jì)數(shù)器和場(chǎng)有效計(jì)數(shù)器產(chǎn)生RAM寫(xiě)入地址。
由于圖像數(shù)據(jù)是按照奇偶場(chǎng)先后傳輸?shù)模瑸榱说玫揭桓蓖暾膱D像,需要將奇偶場(chǎng)數(shù)據(jù)合并。RAM控制模塊先將奇場(chǎng)數(shù)據(jù)寫(xiě)入RAM奇數(shù)行中,即奇場(chǎng)第1行存在RAM的第1行,奇場(chǎng)第2行存在RAM的第3行,依此類推直到奇場(chǎng)288行數(shù)據(jù)全部存完為止;再將偶場(chǎng)數(shù)據(jù)寫(xiě)入RAM的偶數(shù)行中,即偶場(chǎng)第1行存在RAM的第2行,奇場(chǎng)第2行存在RAM的第4行,依此類推直到偶場(chǎng)288行數(shù)據(jù)全部存完為止。
2.3 JPEG編碼器
JPEG編碼器是圖像壓縮算法實(shí)現(xiàn)的核心,JPEG編碼器主要有5部分,分別是二維離散余弦變換(2D-DCT)、量化、Z型掃描、游程/預(yù)測(cè)編碼、霍夫曼編碼。如圖4所示原理框圖。輸入是圖像原始的亮度Y數(shù)據(jù),最后經(jīng)過(guò)霍夫曼編碼器輸出碼流。本文引用地址:http://cafeforensic.com/article/190790.htm
2.3.1 2D-DCT實(shí)現(xiàn)
對(duì)于8×8圖像塊的二維DCT的變換公式為:
式中:0≤u≤7,0≤u≤7,f(x,y)為對(duì)應(yīng)像素點(diǎn)的像素值;F(u,v)為變換后的DCT數(shù)值。根據(jù)余弦的正交性,可將上式分解為一維DCT變換。設(shè):
式中:0≤u≤7,0≤v≤7。
因此二維DCT變換可以轉(zhuǎn)換為2個(gè)一維DCT變換。目前比較常用的變換方法有2種:一種是直接法,通過(guò)將8×8圖像數(shù)組進(jìn)行多項(xiàng)式轉(zhuǎn)換或者三角分解進(jìn)行二維變換;或者另一種是間接法,將8×8圖像數(shù)據(jù)先按行進(jìn)行一維DCT變換,然后再對(duì)變換結(jié)果按列進(jìn)行第2次一維DCT變換,進(jìn)而可以得到二維DCT變換結(jié)果。前者需要的乘法器較多,而且實(shí)現(xiàn)步驟較繁瑣,后者在這兩方面上擁有很大的優(yōu)勢(shì),能夠形成快速DCT變換,更適合FPGA硬件的實(shí)現(xiàn),因此采用后者方法實(shí)現(xiàn)。
目前比較成熟的一維DCT算法主要有Chen算法、Loeffler算法、Lee-Huang算法、ANN算法等,每種算法所需要的乘法次數(shù)和加法次數(shù)各不相同,表1所示為幾種常用算法的比較。根據(jù)算法的復(fù)雜度和硬件計(jì)算速度,本文采用Loeffler算法。
Loeffler是一種基于行列分解的快速一維DCT算法,適合FPGA硬件實(shí)現(xiàn)。采用Loeffler算法實(shí)現(xiàn)一個(gè)8點(diǎn)的一維DCT變換,只需要11次乘法運(yùn)算和29次加法運(yùn)算。硬件實(shí)現(xiàn)算法的結(jié)構(gòu)圖如圖5和圖6所示。
評(píng)論