• 正文
    • 導讀
    • 三、FPGA實現(xiàn)圖像的邊緣檢測
    • 四、FPGA驅動VGA接口實現(xiàn)圖像邊緣的實時顯示
  • 推薦器件
  • 相關推薦
申請入駐 產業(yè)圖譜

基于FPGA的實時圖像邊緣檢測系統(tǒng)設計(中篇)

2024/01/30
2896
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

今天給大俠帶來基于FPGA的實時圖像邊緣檢測系統(tǒng)設計,由于篇幅較長,分三篇。今天帶來第二篇,中篇,話不多說,上貨。

導讀

隨著科學技術的高速發(fā)展,F(xiàn)PGA在系統(tǒng)結構上為數(shù)字圖像處理帶來了新的契機。圖像中的信息并行存在,因此可以并行對其施以相同的操作,使得圖像處理的速度大大提高,這正好適合映射到FPGA架構中用硬件算法得以實現(xiàn)。

本篇闡述了基于FPGA設計一個能夠實時采集、實時處理并實時顯示的數(shù)字圖像處理系統(tǒng)的設計思想和流程,分析了攝像頭接口的時序;闡述了圖像信息的捕獲原理;詳細介紹了圖像邊緣檢測部分各模塊的功能;重點介紹了具有去噪功能的中值濾波模塊的設計;簡單描述了邊緣檢測算子的選用;系統(tǒng)的介紹了SDRAM的工作原理以及控制方式;介紹了VGA時序;最后針對整個系統(tǒng)做了驗證和總結,包括仿真波形的驗證以及板級驗證。

該系統(tǒng)基于實體FPGA開發(fā)板實現(xiàn)了圖像數(shù)據的實時采集、實時邊緣檢測和實時顯示,運行穩(wěn)定,實時性能較高,從而也表明FPGA確實具有海量數(shù)據高速傳輸?shù)哪芰Α?/p>

本篇為本人當年的畢業(yè)設計部分整理,各位大俠可依據自己的需要進行閱讀,參考學習。

第二篇內容摘要:本篇會介紹FPGA實現(xiàn)圖像的邊緣檢測,包括圖像數(shù)據預處理(彩色圖像數(shù)據轉灰度圖像,中值濾波)、邊緣檢測。

還會介紹FPGA驅動VGA接口實現(xiàn)圖像邊緣信息的實時顯示,包括圖像數(shù)據的緩存(SDRAM的工作原理,SDRAM的上電刷新,SDRAM讀寫數(shù)據,圖像數(shù)據緩存的FPGA實現(xiàn)) 、圖像數(shù)據的實時顯示(VGA時序分析,VGA接口的FPGA驅動)等相關內容。

三、FPGA實現(xiàn)圖像的邊緣檢測

3.1 圖像數(shù)據預處理

為了實現(xiàn)圖像的邊緣檢測,需要對捕獲到的圖像數(shù)據進行預處理操作:后續(xù)算法適用于灰度圖像,因此首先需要將捕獲到的彩色圖像轉換為保留有亮度信息的灰度圖像;實時采集到的圖像數(shù)據往往都會伴隨著噪聲,為了使圖像處理的結果更加準確,我還采用了中值濾波算法對得到的灰度圖像進行有效去噪。

3.1.1 彩色圖像數(shù)據轉灰度圖像

本系統(tǒng)所采用的算法全部適用于8位灰度圖像,因此在邊緣檢測和中值濾波之前需要將彩色圖像轉換成適于研究的8位灰度圖像,將圖像中的每個像素用下列公式(3-1)計算其灰度值,公式如下:

(3-1)

式中r、g、b分別為該像素對應的R、G、B顏色分量,然后用求得的灰度值代替原來該像素的R、G、B分量就行了。如圖3-1所示,我在本系統(tǒng)設計中按照上述思路實現(xiàn)了從彩色圖像往灰度文件的轉換。

圖3-1 彩色圖像轉灰度文件對應的RTL級視圖

3.1.2 中值濾波

在圖像處理中,為了保護邊緣信息和平滑噪聲,中值濾波被廣泛應用。本系統(tǒng)設計的目的是對實時采集到的圖像進行邊緣檢測,因此邊緣信息檢測的準確度在很大程度上決定了整個系統(tǒng)設計的性能,為了提高我所設計系統(tǒng)的性能,我采用了中值濾波。中值濾波是一種非線性信號處理技術,基于排序統(tǒng)計理論,可以有效抑制噪聲,其基本原理是將數(shù)字圖像或者數(shù)字序列中一點的值用該點所在鄰域中各點值的中值代替,讓周圍的像素值盡可能的接近其真實值,從而能夠有效地消除孤立的噪聲點。分兩步實現(xiàn):1.采樣取出奇數(shù)個數(shù)據進行排序;2.用排序后的中值代替所要處理的數(shù)據。

本設計選擇3*3的窗口模板,調用FIFO來對圖像數(shù)據進行緩存,然后并行輸出3行數(shù)據,在進行數(shù)值比較之后順序輸出中值結果,有效提高了系統(tǒng)的處理速度。

圖3-2 中值濾波模塊框圖

如圖3-2所示為該系統(tǒng)中值濾波模塊的框圖,調用四個子模塊:shift_temp模塊、compara_fifo模塊、zhongzhilvbo模塊和midnum_mem模塊。其中,shift_temp模塊、compara_fifo模塊和midnum_mem模塊均為調用的IP核,其模塊架構如圖3-2所示。

圖3-3 中值濾波模塊架構圖

shift_temp模塊調用的IP核是一個移位寄存器,在寫請求信號wrreq的控制下,將輸入的8bit圖像灰度信息移位寄存到24bit寄存器中并實時傳送,接著在compara_fifo模塊和midnum_mem模塊中分別調用了一個FIFO,所謂FIFO就是先入先出存儲器,這里用作數(shù)據緩存,有效地保證了中值濾波過程中所處理信息的流暢性和可靠性。中值濾波模塊的核心運算在zhongzhilvbo模塊中得以實現(xiàn),該模塊框圖如圖3-4所示。

圖3-4 zhongzhilvbo模塊框圖

中值濾波及其子模塊代碼及說明見附錄,編寫測試文件仿真運行即可得到如圖3-2所示的仿真波形。

圖3-5 中值濾波模塊的仿真波形

3.2 邊緣檢測

一幅圖像中灰度變化比較劇烈的區(qū)域一般就是圖像邊緣,圖像的邊緣信息可以通過計算灰度圖像中各區(qū)域的梯度幅值來判斷。令圖像的亮度為f(x,y),則其灰度可以用以下公式來定義:

(3-1)

幅值為:

(3-2)

方向為:

(3-3)

比較常用的邊緣檢測算子有Prewitt 邊緣檢測算子、Roberts 邊緣檢測算子、Laplacian 邊緣檢測算子、Sobel 邊緣檢測算子等。經典Sobel邊緣檢測算法便是基于梯度的檢測,利用垂直梯度和水平梯度2個方向模板和圖像進行鄰域卷積完成。其中,垂直梯度方向模板和水平梯度方向模板分別用于檢測水平邊緣和垂直檢測。其利用Sobel算子在3*3的圖像鄰域內和亮度數(shù)據作卷積運算,表達式如下:

(3-4)

(3-5)

我選用如圖3-6所示的數(shù)據源,并分別采用上述幾種算子實施檢測,其算子和檢測得到的結果分別如圖3-7、圖3-8、圖3-9和圖3-10所示。對比上述四幅檢測結果圖,我最終選用Sobel算子作為我的邊緣檢測算法。

圖3-6 邊緣檢測數(shù)據

圖3-7 Prewitt算子及邊緣檢測結果圖

圖3-8 Roberts算子及其邊緣檢測結果

圖3-9 Laplacian算子及其邊緣檢測結果

圖3-10 Sobel算子及其邊緣檢測結果

四、FPGA驅動VGA接口實現(xiàn)圖像邊緣的實時顯示

4.1 圖像數(shù)據的緩存

實現(xiàn)了圖像數(shù)據的邊緣檢測,接著就需要將其實時顯示,該系統(tǒng)設計最終基于VGA實現(xiàn)這一功能。這一功能說起來簡單,實現(xiàn)起來卻并不容易,由于Ov7725輸出數(shù)據的時鐘和VGA輸入的時鐘不同,導致無法將檢測到的數(shù)據直接對接到VGA接口并輸出。其解決方案是在VGA實時顯示之前將檢測到的圖像數(shù)據先緩存起來,這里選用SDRAM作為圖像數(shù)據的緩存器,從而解決了這一難題。

SDRAM(Synchronous Dynamic Random Access Memory)即同步動態(tài)隨機存儲器。同步是指其時鐘頻率與CPU前端總線的時鐘頻率相同;動態(tài)是指SDRAM位電容陣列,需要定期不斷的充放電來保證數(shù)據不丟失;隨機是指不是線性一次存儲數(shù)據,而是可以進行隨機地址的讀寫操作。該系統(tǒng)設計選用了海力士公司生產的HY57V641620ETP-7,其存儲大小約為4Banks x 1Mbits x 16 = 64Mbits,最高頻率可達143Mhz,在實際設計中選定SDRAM的驅動頻率為100Mhz。

4.1.1 SDRAM的工作原理

SDRAM存儲器框圖如圖4-1所示,其主要功能是實現(xiàn)數(shù)據的高速讀寫操作,內部模塊包括邏輯控制單元、地址寄存器數(shù)據寄存器。在眾多的SDRAM控制器中,廠家往往會指定相關操作對應的命令,因此在SDRAM內部還有一個命令解碼器。SDRAM的上電刷新、讀數(shù)據和寫數(shù)據、預充電、刷新等操作實際上就是對每一個命令的操作,SDRAM的基本操作命令如圖4-2所示。

圖4-1 SDRAM存儲器框圖

圖4-2 SDRAM控制命令表

4.1.2 SDRAM的上電刷新

1)SDRAM初始化流程

在正式使用SDRAM之前,有一個非常關鍵的步驟——SDRAM的初始化,其主要功能是穩(wěn)定電路和完成SDRAM的配置,從而保證SDRAM能夠按照我們預期的工作模式來工作。SDRAM初始化的流程,如圖4-3所示。

圖4-3 SDRAM初始化流程圖

SDRAM初始化必須按照流程嚴格執(zhí)行,否則就會導致SDRAM在讀、寫數(shù)據出現(xiàn)問題。例如初始化流程中100us的等待時間必須給足,不然就會導致整個上電刷新模塊出現(xiàn)問題。SDRAM的Logicla Bank是電容結構,電容容易掉電使數(shù)據丟失,所以應該定時給SDRAM充電,手冊中表示至少每64ms要對所有BANK進行一次刷新,確保數(shù)據正確。該系統(tǒng)設計所用SDRAM的刷新周期是 64ms/4096 = 15.625us。模式寄存器配置完成之后,輸出一個標志信號作為外部模塊讀寫SDRAM的握手信號,從而保證圖像數(shù)據的正確讀寫。

2)模式寄存器設置

在進行SDRAM初始化的時候,必須對模式寄存器(Mode Register,MR)進行配置,模式寄存器的主要功能是配置SDRAM的讀/寫數(shù)據的突發(fā)長度(Burst Length)、突發(fā)類型(Burst Type)、潛伏期(CAS Latency)、寫突發(fā)模式(Write Mode)等設置。如果模式寄存器沒有設置好,那么SDRAM 就不會按照預先的模式工作;上電初期對模式寄存器所進行的設置,其信息將會持續(xù)保持直到下一次編程或者掉電為止,模式寄存器的地址總線及其意義如圖4-4所示。

圖4-4 SDRAM模式寄存器設置命令表

現(xiàn)對如圖4-4所示表格中的相關信息做一下說明:

⑴A2A1A0所控制的是突發(fā)長度,SDRAM進行數(shù)據讀寫時以此為單位,突發(fā)長度有1、2、4、8、全頁突發(fā)(full page)。全頁突發(fā)是指每一個bank里面的一行中所有的數(shù)據,其大小取決于SDRAM的列數(shù),本系統(tǒng)設計所選用的是64Mbits的SDRAM,其列數(shù)只有256個存儲單位,這就意味著我們一頁最多可讀寫256個數(shù)據。

⑵A3控制的是突發(fā)類型,分為連續(xù)發(fā)送和交替發(fā)送兩種,面對大數(shù)據的傳輸時我們一般選擇連續(xù)發(fā)送,這樣能夠保證相對較高的速度,本系統(tǒng)設計選擇連續(xù)發(fā)送數(shù)據。

⑶A6A5A4控制的是讀寫數(shù)據的潛伏期,潛伏期有1、2、3拍三種;潛伏期越大,系統(tǒng)的運行速度就越高,本系統(tǒng)設計選擇3拍潛伏期。

⑷其余地址可以忽略。

4.1.3 SDRAM讀寫數(shù)據

SDRAM讀寫數(shù)據的方式有多種,可以根據需求讀取指定地址中的數(shù)據,也可以連續(xù)讀寫最多256個數(shù)據。本系統(tǒng)設計中,所要緩存的圖像數(shù)據量比較大,因此選用突發(fā)讀寫整頁數(shù)據的方式來實現(xiàn),從而有效提高數(shù)據傳輸的帶寬。

圖4-5 SDRAM讀數(shù)據時序

如圖4-5所示為SDRAM讀數(shù)據的時序圖:在上電刷新時,需要在模式寄存器內設置好突發(fā)長度和潛伏期,上圖中的潛伏期CL = 2,突發(fā)長度是4;分析上圖不難發(fā)現(xiàn),自發(fā)出第一次讀命令后,讀數(shù)據操作便會自動運行。

如果不想突發(fā)中斷數(shù)據的讀取,實現(xiàn)數(shù)據的連續(xù)讀取,只需控制好兩次發(fā)送讀命令的間隔周期即可。在本系統(tǒng)設計中,需要處理的是邊緣檢測以后的視頻流數(shù)據,因此設置為連續(xù)的突發(fā)讀寫模式,同時選擇全頁讀寫的方式進行數(shù)據的操作,從而達到更大的帶寬、更高的效率,以實現(xiàn)更快的速度。這樣做的前提是在每次SDRAM讀數(shù)據或者寫數(shù)據時,都必須要為其準備好至少256個數(shù)據緩沖器,以保證數(shù)據可以連續(xù)的讀寫,因此需要調用FIFO作為SDRAM的緩沖器。

4.1.4 圖像數(shù)據緩存的FPGA實現(xiàn)

基于是上述分析,我們就可以基于FPGA編寫SDRAM的控制器代碼,同時必須要調用兩個FIFO分別用作SDRAM的讀數(shù)據和寫數(shù)據緩沖器,如圖4-6即為工程編譯成功以后圖像數(shù)據緩存模塊所對應的RTL級視圖。

圖4-6 圖像數(shù)據緩存模塊所對應的RTL級視圖

4.2 圖像數(shù)據的實時顯示

VGA(Video Graphics Array,視頻圖形陣列)是一種電腦顯示標準,對于現(xiàn)如今的個人電腦市場來說,這個標準已十分過時。然而,VGA卻是眾多顯示設備制造商所共同支持的一個低標準,因此具有一定的通用性。因此,本系統(tǒng)設計就選擇VGA作為圖像緩存數(shù)據到顯示器的橋梁,將邊緣檢測后的視頻圖像數(shù)據實時顯示到相關的顯示設備上。如圖4-7所示,VGA接口與串口的硬件結構相類似,分為公頭與母頭(PC接口為母頭)。

圖4-7 VGA接口示意圖

VGA接口使用15針的D型接口,擁有15根信號線,分成三組,每組5根信號線。接口編號順序為:公頭從左到右,依次遞增;母頭從右到左,一次遞減,兩者相互對應,各引腳功能描述見表4-1。

表4-1 VGA接口各引腳功能描述

4.2.1 VGA時序分析

廣義的VGA為VGA顯示器,狹義的VGA為VGA分辨率的時序。由IBM推出的采用RGB模擬信號的VGA視頻標準,定義了具有60Hz刷新頻率、可產生16萬種色彩的640*480像素格式。VGA顯示器掃描方式分為逐行掃描和隔行掃描:逐行掃描是從屏幕左上角第一個點開始,從左向右逐點掃描,每掃描完一行,電子束回到屏幕的左邊下一行的起始位置,在這期間,CRT 對電子束進行消隱,每行結束時,用行同步信號進行同步;當掃描完所有的行,形成一幀,用場同步信號進行場同步,并使掃描回到屏幕左上方,同時進行場消隱,開始下一幀。隔行掃描是指電子束掃描時每隔一行掃一線,掃完一屏后再返回來掃描剩下的線,隔行掃描的顯示器閃爍快速,可能會使使用者眼睛疲勞(本實驗采用逐行掃描的方式)。掃描原理清楚以后,緊接著再來看看VGA的行、列同步時序。

1)VGA行列時序

VGA列同步時序如圖4-8所示:

圖4-8 VGA列同步時序圖

VGA行同步時序如圖4-9所示:

圖4-9 VGA行同步時序圖

VGA 中定義行時序和列時序都需要同步脈沖(a 段)、顯示后沿(b 段)、顯示時序段(c 段)和顯示前沿(d 段)四部分。VGA 工業(yè)標準顯示模式要求:行同步、列同步都為負極性,即同步脈沖要求是負脈沖。

由 VGA 行時序可知:每一行都有一個負極性行同步脈沖(a 段),是數(shù)據行的結束標志,同時也是下一行的開始標志。在同步脈沖之后為顯示后沿(b段),在顯示時序段(c 段)為顯示器亮的過程,RGB 數(shù)據驅動一行上的每一個像素點,從而顯示一行。在一行的最后為顯示前沿(d 段)。在顯示時間段之外沒有圖像投射到屏幕,而是插入消隱信號。同步脈沖、顯示后沿和顯示前沿都是在行消隱間隔內,當消隱有效時,RGB 信號無效,屏幕不顯示數(shù)據。

2)VGA顯示標準

“分辨率”是衡量物體精確程度的一個參數(shù),對于顯示器而言,分辨率越高,意味著顯示圖像的清晰度越高,包含跟過的信息,具有更多細節(jié)的畫質,圖像更加保真細致。由于人眼的視覺暫留特性,想要實現(xiàn)CRT顯示器畫面不閃爍,至少需要實現(xiàn)每秒至少25幀的畫面更新。而顯示器為了保證畫面流暢,視覺效果更佳,通常一般的掃描幀速在每秒60幀以上。不同像素的行/列掃描刷新時序見表4-2。

表4-2 VGA標準顯示表

以本設計的顯示標準 640*480*60Hz 為例。(640 為列數(shù),480 為行數(shù),60Hz為刷新一屏的頻率),時鐘頻率大約是 25.175Mhz。列時序:屏幕對應的行數(shù)為800(a+b+c+d=e 段),其中 640(c 段)為顯示行;每行均有行同步信號(a 段),為96個行周期的低電平。行時序:每個顯示行包括525列(a+b+c+d=e段),其中480(c段)為有效顯示區(qū),每列均有列同步信號(a段),為2個列周期的低電平。

3)VGA驅動電路設計

由于FPGA輸出的是3.3V電平,而VGA要求0~0.714V的模擬信號,為了設計VGA的標準接口,完成電平的轉換,需要設計DAC數(shù)模轉換電路,來實現(xiàn)0~0.714V模擬視頻信號的傳輸,針對RGB的分辨率高低,可以采用不同的數(shù)模實現(xiàn)方案,在VGA驅動電路設計中,我們最需要關心的幾組信號見表4-3。

表4-3 VGA驅動電路信號表

HSYNC與VSYNC為3.3V數(shù)字信號,再設計中無須考慮電平轉換,可以直接接與FPGA互聯(lián)。而RGB為0~0.714V模擬信號,這是需要我們轉換處理的部分,本設計采用專用的視頻轉換DAC芯片,其穩(wěn)定的ASIC保證了視頻傳輸?shù)馁|量,具有很好的性價比。采用Analog Devices的視頻轉換芯片ADV7123,其參數(shù)如下:

⑴最大采樣率是330Mhz;

⑵3路10位視頻DAC轉換器;

⑶兼容TTL電平輸入;

⑷5V/3.3V單電源工作;

⑸輸出電流達到2~26mA;

低功耗。

ADV7123具體的硬件電路圖如圖4-10所示。

圖4-10 ADV7123電路結構圖

4.2.2 VGA接口的FPGA驅動

分析了VGA接口的時序,我們就可以按照時序基于FPGA編寫相應的VGA驅動代碼,如圖4-11所示即為系統(tǒng)工程成功編譯以后VGA驅動模塊對應的RTL級視圖。

圖4-11 VGA驅動模塊對應的RTL級視圖

本篇到此結束,下一篇帶來基于FPGA的實時圖像邊緣檢測系統(tǒng)設計(下),介紹系統(tǒng)驗證、結論以及各個模塊主要代碼,包括圖像實時采集模塊的主要代碼,圖像實時捕獲模塊的主要代碼,中值濾波模塊的主要代碼,邊緣檢測模塊的主要代碼,圖像緩存模塊的主要代碼,圖像實時顯示模塊的主要代碼等相關內容。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據手冊 ECAD模型 風險等級 參考價格 更多信息
EP2C20F256I8N 1 Intel Corporation Field Programmable Gate Array, 1172 CLBs, 402.5MHz, 18752-Cell, CMOS, PBGA256, LEAD FREE, FBGA-256

ECAD模型

下載ECAD模型
$71.13 查看
A3P250-VQ100I 1 Microsemi Corporation Field Programmable Gate Array, 6144 CLBs, 250000 Gates, 350MHz, CMOS, PQFP100, 14 X 14 MM, 1 MM HEIGHT, 0.50 MM PITCH, VQFP-100

ECAD模型

下載ECAD模型
$29.79 查看
XC7A15T-2CPG236I 1 AMD Xilinx Field Programmable Gate Array, 1300 CLBs, PBGA236, BGA-236

ECAD模型

下載ECAD模型
$47.36 查看

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

任何技術的學習就好比一個江湖,對于每一位俠客都需要不斷的歷練,從初入江湖的小白到歸隱山林的隱世高人,需要不斷的自我感悟自己修煉,讓我們一起仗劍闖FPGA乃至更大的江湖。