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