上篇我們介紹了相關(guān)的算法原理以及外設(shè)特性,本篇我們將介紹一下基于FPGA的實時圖像邊緣檢測系統(tǒng)的實現(xiàn)方案,算法的Verilog實現(xiàn)以及最終實現(xiàn)的檢測效果。
一、 設(shè)計方案
整個系統(tǒng)主要分為以下5個部分:攝像頭傳感器配置部分;圖像數(shù)據(jù)采集與處理部分;圖像緩存部分;VGA顯示部分;以及PLL時鐘管理部分;如圖1所示。

圖1 系統(tǒng)結(jié)構(gòu)圖
攝像頭傳感器配置部分
按照配置表中的參數(shù),將攝像頭配置為分辨率為1280*720像素點、RGB565數(shù)據(jù)格式、VGA時序輸出;然后通過I2C協(xié)議將參數(shù)配置給攝像頭的每個寄存器。
圖像數(shù)據(jù)采集與處理部分
攝像頭配置完成后,在攝像頭輸出時鐘pclk驅(qū)動下,完成圖像數(shù)據(jù)的采集與處理;圖像采集模塊(capture)對攝像頭輸出的像素數(shù)據(jù)進行串并轉(zhuǎn)換,然后給到后續(xù)的圖像處理模塊,依次進行灰度轉(zhuǎn)換(rgb565_gray)、高斯濾波(gs_filter)、二值化處理(gray_bin)、Sobel邊緣檢測(sobel);在進行二值化處理時,直接將灰度圖像二值化為0或1。
圖像緩存部分
主要是SDRAM讀寫控制邏輯(rw_control)與SDRAM接口(sdram_interface);其中,rw_control模塊作為Master向sdram_interface發(fā)起突發(fā)傳輸請求。主要有以下幾個功能:
跨時鐘域數(shù)據(jù)緩存;
乒乓緩存控制;
SDRAM讀寫優(yōu)先級的仲裁以產(chǎn)生讀寫傳輸請求、地址等。
sdram_interface模塊作為Slave執(zhí)行Master發(fā)起的突發(fā)傳輸請求,主要是根據(jù)接收到讀、寫請求以及數(shù)據(jù)、地址等,向SDRAM芯片發(fā)起各種命令、地址、數(shù)據(jù),實現(xiàn)SDRAM的數(shù)據(jù)存取。
VGA顯示部分
主要是實現(xiàn)1080*720@60分辨率的VGA顯示時序,驅(qū)動VGA接口的顯示器顯示處理結(jié)果。
PLL時鐘管理部分
主要是產(chǎn)生整個工程需要使用的幾個時鐘,100MHz的SDRAM控制器與SDRAM工作時鐘、75MHz的VGA驅(qū)動時鐘,24MHz的攝像頭xclk時鐘;圖1中使用不同的顏色對不同的時鐘域進行了標(biāo)注。實際上,我們在設(shè)計SDRAM控制器時需要考慮存儲器的帶寬是否大于實際所需吞吐量。而存儲器的帶寬是由其工作時鐘頻率決定的,但由于刷新、激活、預(yù)充電的存在,SDRAM的實際存取速度比其工作時鐘頻率略小;實際所需吞吐量是指單位時間內(nèi)向SDRAM寫入的數(shù)據(jù)量與從SDRAM讀出數(shù)據(jù)量之和。當(dāng)存儲器帶寬小于實際所需吞吐量時,由于存取速度超過SDRAM的存取帶寬會導(dǎo)致數(shù)據(jù)來不及寫入或者讀出,此時無論寫數(shù)據(jù)緩沖器與讀數(shù)據(jù)緩沖器的深度設(shè)置為多大,必然會導(dǎo)致寫緩沖區(qū)上溢或者讀緩沖區(qū)下溢。對于高速視頻流緩存場景,這種問題會造成災(zāi)難性的問題。因此,在設(shè)計SDRAM控制器時需要根據(jù)數(shù)據(jù)存取速度合理設(shè)置SDRAM的工作時鐘頻率。
二、 主要模塊分析
接下來我們對部分模塊的Verilog代碼實現(xiàn)方案進行簡單介紹。
高斯濾波模塊與sobel邊緣檢測模塊都涉及到二維矩陣卷積,所以如何生成一個3*3的二維矩陣是我們需要考慮的。實際上,這里我們可以調(diào)用Quartus Prime軟件自帶的移位存儲器(shift_ram)IP核,將其配置為3個tap,每個tap之間的間距為1280個數(shù)據(jù),如下圖所示。然后對每個tap輸出的數(shù)據(jù)打兩拍即可得到3*3的像素矩陣。然后使用流水線實現(xiàn)像素數(shù)據(jù)與模板權(quán)重的卷積計算,既能提高實時性又能保證時序性能。

圖2 移位存儲器結(jié)構(gòu)示意圖SDRAM控制器部分主要是對檢測結(jié)果進行緩沖,由于我們使用的分辨率為1280*720,即使是二值(0、1)圖像也需要兩個大小為900Kbit的RAM存儲器進行乒乓緩存,而我們使用的EP4CE6F17C8型號的FPGA片上RAM僅有270Kbit,遠(yuǎn)遠(yuǎn)不能滿足需求;所以這里為了保證數(shù)據(jù)完整性,選用SDRAM來實現(xiàn)雙緩沖。在實現(xiàn)乒乓緩存時,使用sop(幀起始)與eop(幀結(jié)束)來控制完整數(shù)據(jù)幀緩存或丟棄。
SDRAM接口模塊主要是配置SDRAM芯片的工作模式、存取數(shù)據(jù),為了保證SDRAM芯片以較高的吞吐量存取數(shù)據(jù),這里將SDRAM配置成了連續(xù)突發(fā)模式、突發(fā)長度為512。由于SDRAM的指令較多,工作時序比較復(fù)雜,這里選擇使用狀態(tài)機來設(shè)計SDRAM接口時序,狀態(tài)機設(shè)計如下圖所示:

圖3 SDRAM接口模塊狀態(tài)機轉(zhuǎn)移圖
三、 實現(xiàn)結(jié)果
SDRAM乒乓緩存部分仿真結(jié)果如下圖4所示;當(dāng)向bank0寫完第一幀數(shù)據(jù)之后,會丟棄下一幀數(shù)據(jù),直到bank3中的一幀數(shù)據(jù)完整讀完時才會切換讀寫bank,然后再緩存下一幀新的數(shù)據(jù)。從圖5所示仿真結(jié)果可以看到,成功實現(xiàn)了對SDRAM兩個Bank的交替存取,實現(xiàn)了乒乓緩存的效果。

圖4 乒乓緩存仿真結(jié)果

圖5 SDRAM存取仿真結(jié)果本設(shè)計最終實現(xiàn)結(jié)果如圖6所示,能夠?qū)崟r的檢測圖像邊緣,提取出目標(biāo)的輪廓,達(dá)到預(yù)期效果。但是由于光線影響等方面的原因,導(dǎo)致最終實現(xiàn)出來的效果不是非常完美。
-
FPGA
+關(guān)注
關(guān)注
1660文章
22412瀏覽量
636386 -
檢測系統(tǒng)
+關(guān)注
關(guān)注
3文章
999瀏覽量
45481 -
圖像邊緣
+關(guān)注
關(guān)注
0文章
10瀏覽量
7488
發(fā)布評論請先 登錄
基于FPGA的實時邊緣檢測系統(tǒng)設(shè)計,Sobel圖像邊緣檢測,FPGA圖像處理
基于FPGA的數(shù)字圖像處理中的邊緣檢測系統(tǒng)
基于FPGA的Sobel邊緣檢測的實現(xiàn)
基于FPGA的邊緣檢測和Sobel算法
基于FPGA的圖像邊緣檢測系統(tǒng)設(shè)計,用VHDL語言實現(xiàn)該怎么做?
如何利用FPGA實現(xiàn)Laplacian圖像邊緣檢測器的研究?
基于FPGA的視頻實時邊緣檢測系統(tǒng)該怎么設(shè)計?
怎樣去設(shè)計基于FPGA的實時圖像邊緣檢測系統(tǒng)
基于FPGA的實時圖像邊緣檢測系統(tǒng)設(shè)計(附代碼)
Prewitt圖像邊緣檢測及邊緣細(xì)化的FPGA實現(xiàn)
實時圖像邊緣檢測的設(shè)計及FPGA實現(xiàn)
基于FPGA實時圖像邊緣檢測系統(tǒng)的實現(xiàn)
評論