吳 松,張利華
(華東交通大學,江西 南昌330013)
數(shù)字圖像處理目的是把圖像中沒用的信息去除掉,保留或者恢復(fù)提供給用戶參考的數(shù)據(jù)信息。隨著用戶對圖像的細節(jié)信息越來越關(guān)注,圖像處理要求越來越高[1]。盡管軟件算法的不斷優(yōu)化能夠在一定程度達到要求,但是軟件算法優(yōu)化已經(jīng)趨近瓶頸[2]。目前,基于嵌入式的圖像采集平臺包括ARM、FPGA和DSP,基于FPGA的SOPC比ARM系統(tǒng)處理速度快,比DSP系統(tǒng)控制能力強[3]。以往的圖像采集與處理多是由圖像采集卡完成圖像采集后再由計算機對其進行處理,這種方法雖然具有處理速度快的優(yōu)點,但存在著價格昂貴、功耗高、體積大等不足[4-5]。
通過硬件FPGA實現(xiàn)圖像采集處理具有以下優(yōu)勢:① 更多復(fù)雜的算法需要嵌入到到硬件平臺上實現(xiàn),能夠節(jié)約圖像處理的時間,增加實時性[6];② 基于嵌入式的硬件圖像處理系統(tǒng)可以進行多次開發(fā),而且每次開發(fā)周期較短,節(jié)約開發(fā)成本;③ 將圖像處理功能集成在專用芯片或者FPGA片上系統(tǒng)中,占用空間小,便于攜帶和戶外監(jiān)控[7]。基于FPGA的諸多優(yōu)勢,文中提出采用可編程邏輯器件FPGA實現(xiàn)圖像采集處理的方案,在FPGA上實現(xiàn)攝像頭OV7725、SDRAM以及VGA的控制。通過完成各個模塊設(shè)計,將圖像采集系統(tǒng)聯(lián)調(diào),預(yù)期采集系統(tǒng)工作正常,性能良好。
整個系統(tǒng)由視頻圖像采集、SDRAM存儲、圖像處理算法、VGA顯示控制以及電源模塊組成,其中SDRAM控制模塊、VGA顯示控制模塊、圖像算法模塊全部模塊集成在FPGA芯片中。實現(xiàn)平臺使用Altera公司Cyclone IV系列EP4CE10E22C8為核心實驗板,該芯片包含專用外部存儲器以及flash接口,可以支持DDR存儲器和動態(tài)隨機存儲器,最高提供150 000個邏輯單元。
系統(tǒng)的功能框圖如圖1所示。FPGA控制攝像頭OV7725采集視頻圖像,將數(shù)據(jù)寫入SDRAM存儲器緩存。FPGA調(diào)用圖像處理算法對SDRAM中的數(shù)據(jù)進行處理,處理后的圖像數(shù)據(jù)送至VGA顯示控制模塊,經(jīng)過VGA外圍接口電路呈現(xiàn)在VGA顯示屏上。
圖1 系統(tǒng)的功能框圖
攝像頭OV7725芯片內(nèi)部集成了圖像采集模塊、數(shù)模轉(zhuǎn)換模塊、DSP處理器,具有標準的SCCB配置接口,能夠配置輸出RGB565、YCbCr422、RAW等視頻流格式,支持VGA的分辨率圖像尺寸。攝像頭OV7725總共有172個內(nèi)部寄存器,但不是每個寄存器都需要配置,很多采用默認的配置,通過SCCB總線進行配置[8]。攝像機串行控制總線(SCCB)由時鐘信號SIO_C、數(shù)據(jù)信號SIO_D以及使能信號SCCB_E組成,為了節(jié)省芯片引腳,只采用了SIO_D和SIO_C。SCCB時序與I2C時序類似,SCCB總線仿真時序如圖2所示。
圖2 I2C總線仿真時序圖
SCLK為高電平,SDA由高電平變低電平,總線開始傳輸;SCLK為高電平,SDA由低電平變高電平,總線傳輸結(jié)束。SCCB為串行傳輸,每次傳送一個字節(jié)。通過SCCB設(shè)置OV7725的工作模式后,就能夠捕獲圖像數(shù)據(jù)。行同步信號有效時,攝像頭連續(xù)輸出1 280個像素的一行數(shù)據(jù)。而且數(shù)據(jù)輸出只有高8位有效,低2位被去除。RGB565格式分布是{R[4:0],G[5:0],B[4:0]},先輸出RGB的高8位,然后接著輸出RGB的低8位,通過將兩個數(shù)據(jù)進行拼接得到需要RGB數(shù)據(jù)。RGB565格式數(shù)據(jù)拼接的關(guān)鍵代碼如下:
if(byte_flag == 1'b1) ∥當采集到兩個有效數(shù)據(jù)時,開始拼接這兩個數(shù)據(jù)
cmos_frame_data_r <= {cmos_din_r,cmos_din};∥MSB -> LSB
else
cmos_frame_data_r <= cmos_frame_data_r;∥采集完之前,輸出的數(shù)據(jù)保持不變
end
由于攝像頭采集的數(shù)據(jù)與SDRAM控制器接收數(shù)據(jù)的速度存在速度匹配問題,需要解決跨時鐘域的問題,通過調(diào)用FIFO模塊來實現(xiàn)。為了能夠?qū)崟r快速顯示圖像,運用乒乓操作來完成。首先調(diào)用兩個FIFO模塊,一個用于讀取,一個用于寫入。攝像頭采集數(shù)據(jù)首先寫入FIFO,當FIFO寫滿之后,控制器直接一次性讀取FIFO中所有數(shù)據(jù)存儲到SDRAM的第一塊當中;然后第一塊等待讀取,第二塊進行寫入,這樣達到一邊讀取一邊寫入的效果,不僅加快顯示速度,而且充分利用了SDRAM的存儲空間。SDRAM控制器主要包括控制模塊、命令模塊、數(shù)據(jù)傳輸模塊三部分[9]。命令模塊主要為了實現(xiàn)控制器中的狀態(tài)機以及實現(xiàn)在SDRAM的讀操作和寫操作,并且實現(xiàn)SDRAM的動態(tài)刷新,保證SDRAM控制器的正常操作。數(shù)據(jù)傳輸模塊主要完成SDRAM的數(shù)據(jù)傳輸。SDRAM控制模塊移植廠家開源的代碼,控制模塊狀態(tài)如圖3所示。
圖3 控制模塊狀態(tài)圖
步驟一:計算Gy和Gx與模板每行的乘積
if(!rst_n) begin
Gx_temp1 <= 0;
Gx_temp2 <= 0;
Gx_data <= 0;
end else begin
Gx_temp1 <= matrix_p13 + (matrix_p23 << 1) + matrix_p33;∥postive result
Gx_temp2 <= matrix_p11 + (matrix_p21 << 1) + matrix_p31;∥negetive result
Gx_data <= (Gx_temp1 >= Gx_temp2) ? Gx_temp1 - Gx_temp2 :Gx_temp2 - Gx_temp1;
end
步驟二:計算平方和
if(!rst_n)
Gxy_square <= 0;
else
Gxy_square <= Gx_data * Gx_data + Gy_data * Gy_data;
步驟三:計算平方根
SQRT u_SQRT
(.radical(Gxy_square),
.q(Dim),
.remainder ());
在VGA顯示過程中,需要同步信號來決定掃描的開始以及結(jié)束。每一行有效的時間和整體掃描的時間不同,而且要小一點,因此在程序的設(shè)計過程中需要考慮。掃描的時序主要根據(jù)顯示器的基本原理進行展開[13-14]。用戶只需要滿足顯示的時序要求,就能夠設(shè)計完成這部分的代碼。通過modelsim完成仿真測試的VGA仿真時序圖,如圖4所示。
圖4 VGA仿真時序圖
在測試過程中,為了能夠形象看到VGA的掃描過程,筆者將行和列的像素數(shù)按照一定的比例進行減少,觀察圖4,當行計數(shù)值hcnt達到用戶設(shè)定的數(shù)(46),行計數(shù)清0,場計數(shù)vcnt增1,直到行、場都掃描完成,一幀圖像顯示完成。根據(jù)筆者自定義輸入信號,仿真出現(xiàn)預(yù)期效果波形。由圖4可知,lcd_en(數(shù)據(jù)顯示有效期)只有在行同步信號和場同步信號同時為高電平時才有效。場計數(shù)在行計數(shù)信號計數(shù)達到終點時進行計數(shù),整個VGA時序電路由hcnt和vcnt的值決定。
系統(tǒng)各個模塊設(shè)計完成后,將設(shè)計好的系統(tǒng)下載到FPGA開發(fā)板中,系統(tǒng)能夠?qū)崿F(xiàn)圖像的采集、處理和顯示?;贔PGA的視頻圖像處理系統(tǒng),不僅具有體積小、成本低、靈活性高和實時性強等特點,而且系統(tǒng)設(shè)計與實現(xiàn)易于小型化、集成化,很容易在一片硅片上實現(xiàn)邏輯功能強大的電路。憑借這樣的優(yōu)點,系統(tǒng)方便攜帶以及容易安裝,對移動式監(jiān)控有利。另外,系統(tǒng)的算法全部由硬件電路實現(xiàn),各個模塊并行運行,能夠滿足對圖像實時處理的效果。系統(tǒng)采集到的圖像以及邊緣檢測算法效果如圖5所示。
圖5 系統(tǒng)采集到的圖像以及邊緣檢測算法效果
文中設(shè)計的基于FPGA的視頻采集系統(tǒng)能夠?qū)崟r獲取現(xiàn)場圖像,同時經(jīng)過Sobel邊緣檢測能夠?qū)ΜF(xiàn)場圖像獲取清晰的邊緣。該視頻采集系統(tǒng)具有低成本、低功耗、小體積以及高圖像質(zhì)量的優(yōu)點,可以方便地應(yīng)用于到圖像采集與處理以及視頻監(jiān)控項目中;同時通過硬件FPGA實現(xiàn)圖像的邊緣檢測,能夠集成于攝像頭內(nèi),采集的圖像不需要上位機軟件處理,節(jié)約后續(xù)圖像處理的時間。
[1] 李慧敏,樊記明,楊笑.基于STM32和OV7670的圖像采集與顯示系統(tǒng)設(shè)計[J].傳感器與微系統(tǒng),2016,35(9):114-117.
[2] 劉紫燕,馮亮,祁佳.一種基于FPGA的實時視頻跟蹤系統(tǒng)硬件平臺設(shè)計[J].傳感器與微系統(tǒng),2014,33(7):98-102.
[3] 梁皓東,張國平.基于ARM9+FPGA的便攜式視頻展示臺的設(shè)計[J].電視技術(shù),2014(3):60-63.
[4] 董心雨,黃俊.基于FPGA的紅外圖像采集與傳輸系統(tǒng)設(shè)計[J].半導(dǎo)體光電,2012,33(4):579-581,587.
[5] 陳序,卿粼波,何小海.基于FPGA的高速圖像處理平臺設(shè)計[J].成都信息工程學院學報,2013(2):114-118.
[6] 李善壽,方潛生.基于FPGA和CIS的人民幣圖像采集系統(tǒng)設(shè)計[J].傳感器與微系統(tǒng),2010,29(10):97-99.
[7] 孫春鳳,袁峰,丁振良.基于FPGA的多通道高速CMOS圖像采集系統(tǒng)[J].計算機工程與應(yīng)用,2008(21):46-48,105.
[8] 楊帆,張皓,馬新文,等.基于FPGA的圖像處理系統(tǒng)[J].華中科技大學學報(自然科學版),2015,43(2):119-123.
[9] 李明,趙勛杰,毛偉民.Sobel邊緣檢測的FPGA實現(xiàn)[J].現(xiàn)代電子技術(shù),2009,32(16):44-46.
[10] 艾揚利,楊兵.基于FPGA的Sobel算子并行計算研究[J].現(xiàn)代電子技術(shù),2005(9):42-43.
[11] 李勇,許軍,張新喜,等.基于FPGA的高速圖像處理系統(tǒng)設(shè)計[J].裝甲兵工程學院學報,2008(3):54-58.
[12] 崔躍.FPGA在圖像處理中的應(yīng)用[J].中國新通信,2008(9):68-71.
[13] 王嘯林,李玉惠.基于FPGA的圖像處理系統(tǒng)研究[J].儀器儀表用戶,2006(6):10-11.
[14] 鄒慶華,邵瑞.基于FPGA的視頻圖像處理系統(tǒng)研究[J].信息通信,2016(11):78-79.