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

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

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

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

圖4 乒乓緩存仿真結果

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