基于FPGA的網(wǎng)絡(luò)圖像采集處理系統(tǒng)設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:介紹一種基于FPGA的網(wǎng)絡(luò)圖像采集處理系統(tǒng)設(shè)計(jì),該系統(tǒng)采用單片F(xiàn)PGA,實(shí)現(xiàn)了圖像的采集、壓縮和網(wǎng)絡(luò)傳輸功能,具有體積小,集成度高,算法升級靈活方便的特點(diǎn)。詳述了模塊的圖像采集邏輯、RAM控制邏輯、壓縮算法邏輯和網(wǎng)絡(luò)傳輸功能的實(shí)現(xiàn)方法。測試結(jié)果表明,系統(tǒng)運(yùn)行穩(wěn)定,性能滿足要求。
關(guān)鍵詞:FPGA;圖像壓縮;網(wǎng)絡(luò)傳輸;JPEG
0 引言
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)化儀器以結(jié)構(gòu)簡單,機(jī)動(dòng)靈活,吞吐率高和成本低等優(yōu)點(diǎn)而越來越受到重視,并在軍用自動(dòng)測試裝備中得到廣泛的應(yīng)用。隨著武器裝備圖像制導(dǎo)技術(shù)的廣泛應(yīng)用,需要對圖像質(zhì)量等進(jìn)行評價(jià),因此研制基于網(wǎng)絡(luò)的圖像采集處理系統(tǒng),對提高自動(dòng)測試裝備的綜合能力具有重要意義。由于FPGA在流水線并行處理數(shù)據(jù)上具有強(qiáng)大優(yōu)勢,具有集成度高,體積小,可靈活配置等優(yōu)點(diǎn),在圖像處理領(lǐng)域得到廣泛應(yīng)用。本文介紹一種基于單片F(xiàn)PGA實(shí)現(xiàn)圖像采集、處理和網(wǎng)絡(luò)傳輸?shù)脑O(shè)計(jì)方案。
1 總體設(shè)計(jì)
總體框圖如圖1所示,系統(tǒng)采用Altera公司推出的StratixⅡ系列EP2S60F484型號FPGA作為圖像采集處理和網(wǎng)絡(luò)傳輸?shù)暮诵?,視頻A/D采用ADV7181B芯片,支持PAL,NTSC和SECAM多種制式視頻輸入。圖像采集處理在FPGA內(nèi)部實(shí)現(xiàn),主要有3部分,分別為圖像采集模塊、RAM控制模塊和JPEG編碼器。NiosⅡ處理器作為主處理器,主要是通過I2C模塊對ADV7181B進(jìn)行配置,控制JPEG編碼器和實(shí)現(xiàn)圖像的網(wǎng)絡(luò)傳輸功能。
2 主要功能模塊設(shè)計(jì)
2.1 圖像采集模塊
圖像采集模塊主要實(shí)現(xiàn)圖像信號檢測和圖像裁剪的功能。
CCD攝像頭輸出的視頻信號經(jīng)過ADV7181B芯片解碼,輸出符合ITU-R BT.601標(biāo)準(zhǔn)的數(shù)據(jù)流。圖2所示為ADV7181B輸出的行同步信號參數(shù)和YCrCb信號時(shí)序圖。當(dāng)輸出“FF 00 00 XY”時(shí),表示有效圖像數(shù)據(jù)的開始或者結(jié)束。其中XY[4]=0表示圖像數(shù)據(jù)開始信號(SAV信號);XY[4]=1表示圖像數(shù)據(jù)結(jié)束信號(EAV信號);XY[6]=0表示奇場信號;XY[6]=1表示偶場信號。通過檢測EAV和SAV信號,分奇偶場提取有效的圖像數(shù)據(jù)。
根據(jù)輸出圖像大小的不同要求,需要對圖像進(jìn)行裁剪。構(gòu)造一個(gè)裁剪檢測電路,如圖3所示。利用像素時(shí)鐘和水平同步信號、垂直同步信號進(jìn)行計(jì)數(shù),根據(jù)圖像輸出大小要求,設(shè)定比較器數(shù)值,當(dāng)行列有效計(jì)數(shù)的數(shù)值在比較器設(shè)定的范圍之內(nèi),檢測電路使RAM處于寫使能狀態(tài),把圖像數(shù)據(jù)存入RAM。系統(tǒng)默認(rèn)的圖像輸出大小是720×576像素,如果圖像輸出大小為512×512像素,那么行有效計(jì)數(shù)中的比較器數(shù)值分別為52和308,提取奇場和偶場中的第53行到第308行數(shù)據(jù)。同理,列有效計(jì)數(shù)中比較器分別為16和272。
2.2 RAM控制模塊
RAM控制模塊通過乒乓操作對圖像數(shù)據(jù)進(jìn)行緩存和讀取,系統(tǒng)只存取圖像的亮度信號,即Y信號。乒乓操作的處理流程如下:在第1場時(shí)間,將圖像數(shù)據(jù)緩存到SRAM1;在第2場時(shí)間,將圖像數(shù)據(jù)緩存到SRAM2,同時(shí)將SRAM1的數(shù)據(jù)送到JPEG編碼器進(jìn)行圖像壓縮;在第3場時(shí)間,將圖像數(shù)據(jù)緩存到SRAM1,同時(shí)將SRAM2的數(shù)據(jù)送到JPEG編碼器進(jìn)行圖像壓縮,依此循環(huán)。將圖像數(shù)據(jù)保存到SRAM時(shí),由視頻采集模塊的行有效計(jì)數(shù)器和場有效計(jì)數(shù)器產(chǎn)生RAM寫入地址。
由于圖像數(shù)據(jù)是按照奇偶場先后傳輸?shù)?,為了得到一副完整的圖像,需要將奇偶場數(shù)據(jù)合并。RAM控制模塊先將奇場數(shù)據(jù)寫入RAM奇數(shù)行中,即奇場第1行存在RAM的第1行,奇場第2行存在RAM的第3行,依此類推直到奇場288行數(shù)據(jù)全部存完為止;再將偶場數(shù)據(jù)寫入RAM的偶數(shù)行中,即偶場第1行存在RAM的第2行,奇場第2行存在RAM的第4行,依此類推直到偶場288行數(shù)據(jù)全部存完為止。
2.3 JPEG編碼器
JPEG編碼器是圖像壓縮算法實(shí)現(xiàn)的核心,JPEG編碼器主要有5部分,分別是二維離散余弦變換(2D-DCT)、量化、Z型掃描、游程/預(yù)測編碼、霍夫曼編碼。如圖4所示原理框圖。輸入是圖像原始的亮度Y數(shù)據(jù),最后經(jīng)過霍夫曼編碼器輸出碼流。
2.3.1 2D-DCT實(shí)現(xiàn)
對于8×8圖像塊的二維DCT的變換公式為:
式中:0≤u≤7,0≤u≤7,f(x,y)為對應(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種:一種是直接法,通過將8×8圖像數(shù)組進(jìn)行多項(xiàng)式轉(zhuǎn)換或者三角分解進(jìn)行二維變換;或者另一種是間接法,將8×8圖像數(shù)據(jù)先按行進(jìn)行一維DCT變換,然后再對變換結(jié)果按列進(jìn)行第2次一維DCT變換,進(jìn)而可以得到二維DCT變換結(jié)果。前者需要的乘法器較多,而且實(shí)現(xiàn)步驟較繁瑣,后者在這兩方面上擁有很大的優(yōu)勢,能夠形成快速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所示。
2.3.2 量化和編碼
量化是將經(jīng)過DCT變化后的系數(shù)值除以量化表中的量化值,其結(jié)果四舍五入得到。系統(tǒng)采用推薦的亮度量化表對圖像數(shù)據(jù)進(jìn)行量化,該表存在FPGA的片上RAM中。由于硬件除法是通過迭代減法完成的,速度慢,因此先計(jì)算量化表中數(shù)值的倒數(shù)值,把DCT變化系數(shù)乘以量化表對應(yīng)的倒數(shù)值,即可將除法轉(zhuǎn)換成速度較快的乘法運(yùn)算。
量化后系數(shù)經(jīng)過Z型掃描器轉(zhuǎn)換成一維ZIG-ZAG序列,序列的第1個(gè)數(shù)值表示直流(DC)分量,其后的63個(gè)數(shù)值表示交流(AC)分量。對DC分量采用一維差分前值預(yù)測編碼,即將DC分量減去上一個(gè)8×8子快的DC分量。對AC分量采用游程編碼,并且用一個(gè)字節(jié)的高四位來表示AC分量連續(xù)0值個(gè)數(shù),低四位表示下一個(gè)非零系數(shù)所需位數(shù),這樣能夠表示的最大0值個(gè)數(shù)為15個(gè),如果AC分量中0值個(gè)數(shù)多于15個(gè),采用(15,0)來表示。(0,0)表示EOB,說明后面分量值全為0。這樣游程/預(yù)測編碼對系數(shù)0的值進(jìn)行壓縮。最后霍夫曼編碼器利用霍夫曼表分別對DC和AC系數(shù)進(jìn)行霍夫曼編碼,輸出JPEG圖像碼流。
2.4 網(wǎng)絡(luò)傳輸
通過在NiosⅡ處理器上移植支持TCP/IP協(xié)議棧的μC/OS-Ⅱ操作系統(tǒng)來實(shí)現(xiàn)圖像的網(wǎng)絡(luò)傳輸功能。軟件流程圖如圖7所示。
首先將NiosⅡ作為網(wǎng)絡(luò)通信服務(wù)器,創(chuàng)建一個(gè)網(wǎng)絡(luò)監(jiān)聽套接字,將該套接字同NiosⅡ處理器的本機(jī)的IP地址和端口號進(jìn)行綁定,調(diào)用Listen監(jiān)聽函數(shù)使系統(tǒng)處于監(jiān)聽狀態(tài),監(jiān)聽客戶端(PC機(jī))請求,一旦監(jiān)聽到客戶端的連接請求,服務(wù)器端置圖像壓縮使能端有效,開始圖像的壓縮,并接收硬件邏輯完成壓縮的圖像數(shù)據(jù),然后服務(wù)器端向客戶端發(fā)送圖像的幀頭和圖像數(shù)據(jù),一幀圖像發(fā)送完成后會(huì)接著發(fā)送下一幀圖像,直到收到停止圖像發(fā)送指令,進(jìn)入下一個(gè)監(jiān)聽的等待狀態(tài)為止??蛻舳酥饕窍蚍?wù)器端發(fā)出連接請求,一旦連接成功,即開始接收服務(wù)器端傳送的圖像幀頭和圖像數(shù)據(jù),并將圖像進(jìn)行顯示??蛻舳嗽谕V菇邮請D像前,會(huì)不斷重復(fù)接收圖像數(shù)據(jù)的工作過程。
3 測試結(jié)果
AD采集一副大小為720×576的圖像,經(jīng)過硬件邏輯裁剪成如圖8(a)所示的512×512大小的圖像,由JPEG編碼器進(jìn)行圖像壓縮,在PC機(jī)上解壓縮后的圖像如圖8(b)所示。將原始圖像和解壓縮后的圖像進(jìn)行對比,計(jì)算圖像的峰值信噪比:
式中:MSE為原始圖像和壓縮圖像的均方誤差。從圖中可看到,PSNR>30時(shí),圖像視覺失真度比較低。
4 結(jié)語
本文介紹了一種基于FPGA的網(wǎng)絡(luò)圖像處理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)方法。系統(tǒng)主要包括圖像采集模塊、RAM控制模塊、JPEG編碼器3部分邏輯。在單片FPGA上實(shí)現(xiàn)圖像的采集、裁剪、緩存和JPEG編碼,構(gòu)建NiosⅡ處理器實(shí)現(xiàn)圖像的網(wǎng)絡(luò)傳輸功能。測試表明,系統(tǒng)的體積小,功耗低,算法升級靈活方便。此外系統(tǒng)運(yùn)行穩(wěn)定,性能也滿足要求。