圖像的邊緣包含了圖像大量的信息,圖像邊緣檢測作為圖像處理領域中的重要內容,在實際應用中也具有重要意義。例如在工業生產線、車輛檢測、車牌識別等實時應用中,通過邊緣檢測能夠有效簡化對圖像的分析。由于實時數字圖像處理系統具有數據量大、處理速度快、重復度高等特點,傳統的軟件方法顯然無法滿足。而由于FPGA具有豐富的邏輯資源和存儲資源,能夠實現并行和流水線處理,因此,使用FPGA來實現需要大量計算的數字圖像處理算法,能夠大大提高圖像處理的效率。
本文介紹了一個基于FPGA的實時圖像邊緣檢測系統。本篇重點介紹灰度轉換、高斯濾波、Sobel邊緣檢測等經典數字圖像處理算法的原理;分析了OV5640攝像頭的時序;SDRAM芯片的工作原理及乒乓緩存原理。下篇主要介紹圖像處理算法的實現;OV5640攝像頭驅動模塊的設計;SDRAM控制器的設計;相關模塊的仿真和板級驗證。
一。 數字圖像處理算法原理
01
灰度轉換
RGB顏色模型是由紅(Red)、綠(Green)、藍(Blue)三種基色以不同的比例疊加而成;而且每個像素分量(R、G、B)的值分布在0—255范圍內,三種基色以不同的比例混合,能夠顯示出2563種顏色。
以RGB888格式的真彩色圖像為例,表示1個像素點需要24bit二進制數據,在后續做Sobel運算時,計算量較大,所以為了簡化后續計算,將攝像頭采集的RGB565格式的彩色圖像轉化為1bit表示的二值圖像,而后通過Sobel算子檢測圖像像素的梯度提取出圖像的邊緣點。對于彩色圖像的二值化一般分為兩個步驟:先將彩色圖像進行灰度化得到灰度圖像,然后對灰度圖像進行二值化得到二值圖像。
對于彩色圖像轉化為灰度圖像,有一個著名的色彩心理學公式,即:
實際上,上述公式是一個加權求和的過程。但是在實際應用時,由于FPGA希望避免復雜的浮點運算,所以這里我們采用整數運算。將R、G、B三個分量對應的系數放大256倍得到整數結果:
在灰度轉換過程中,可能會因為取整操作引入噪聲,所以接下來使用高斯濾波算法來去除灰度轉化過程中引入的噪聲。
02
高斯濾波
在對圖像進行誤差評估時,往往認為傳感器引入的噪聲、灰度化處理引入的噪聲都是服從正態分布(高斯白噪聲),這時使用高斯濾波器就可以很好地消除高斯噪聲。高斯濾波本質上是一種線性平滑濾波,即對整幅圖像進行加權平均的過程,每一個像素點的值都是由其本身和鄰域內的其他像素點加權平均后得到的。
高斯濾波的具體操作是使用一個N*N卷積模板對整幅圖像掃描,用模板確定的鄰域內的像素加權平均值代替模板中心像素點的值。本文使用的3*3卷積模板如下:
高斯濾波可以表達為:
其中,I(x,y)表示原圖像中坐標為(x,y)的像素值;G(x,y)表示高斯濾波之后的值。這里為了計算方便,選取的模板H的權重系數都是2的系數。模板中心的權值最大,這樣有利于克服邊界效應,避免經過高斯濾波之后圖像模糊。
03
二值化處理
在圖像處理中,二值化的作用是把灰度圖像的像素值設置為0或者255,即純黑或者純白。通過二值圖像,能更好地分析物體的形狀和輪廓,有利于后續使用Sobel算子檢測圖像的邊緣。二值化有多種方法,其中最常用的就是采用閾值法進行二值化,根據閾值選取方式不同,又可以分為全局閾值法與局部閾值法。本文選用全局閾值法,即人為設定一個固定的閾值。
04
Sobel邊緣檢測
Sobel算子主要用于檢測圖像邊緣,在物體的邊緣通常都有像素的變化,反映了物體與背景之間的差異,或者兩個物體之間的差異。它是一個離散差分算子,用來計算像素點上下、左右領域內像素點的加權差,根據在邊緣處達到極值來檢測邊緣。另外,Sobel算子對噪聲也有一定的平滑作用,檢測出精確的邊緣信息,但是邊緣定位精度不高。
Sobel算子在水平方向和垂直方向各采用一個模板,檢測各方向上的邊緣,其優點是計算簡單,速度快;但是對于紋理較為復雜的圖像,檢測效果不理想。水平方向模板Sx和垂直方向模板Sy如下:
將兩個算子與圖像做平面卷積,即可得到水平方向與垂直方向的梯度值;若以I表示圖像矩陣,Gx表示水平方向圖像梯度值,Gy表示垂直方向的梯度值,則Gx與Gy可以表示如下:
其中,I(x,y)表示模板掩蓋的3*3圖像中心的像素點。最終,圖像中每個像素點對應的梯度值按照以下公式計算:
通常為了簡化計算,會使用以下公式近似:
二。 OV5640攝像頭介紹
攝像頭按輸出信號的類型可以分為數字攝像頭和模擬攝像頭,按照攝像頭圖像傳感器材料構成可以分為CCD和CMOS。現在智能手機的攝像頭絕大部分都是CMOS類型的數字攝像頭。
OV564是一款CMOS類型數字圖像傳感器,該傳感器支持輸出最大為500萬像素的圖像 (2592x1944分辨率),支持使用VGA時序輸出圖像數據,輸出圖像的數據格式支持YUV(422/420)、YCbCr422、RGB565以及JPEG格式。它還可以對采集得的圖像進行補償,支持伽瑪曲線、白平衡、飽和度、色度等基礎處理。根據不同的分辨率配置,傳感器輸出圖像數據的幀率從15-60幀可調。其內部有許多寄存器,用來配置攝像頭的工作方式、圖像格式等等;在實際應用時需要先使用SCCB協議或者是I2C協議配置寄存器,使攝像頭按照常見的VGA時序輸出圖像數據。這里不對SCCB和VGA協議詳細介紹。在本次設計中,使用I2C協議配置攝像頭,并將OV5640分辨率配置為720P、數據格式為RGB565輸出。
三。 SDRAM介紹
在圖像處理系統中,需要對圖像視頻數據進行緩存,所以需要大容量存儲器。SDRAM(Synchronous Dynamic Random Access Memory,即同步動態隨機存取存儲器)有價格優廉、容量大等優點,常作為FPGA的外掛存儲器。同步是指其工作需要同步時鐘,命令的發送與數據的傳輸都以時鐘為基準;動態是指存儲陣列需要不斷的刷新來保證電容存儲體中的數據不丟失;隨機是指數據可以自由指定地址進行數據讀寫。本次設計中,使用的SDRAM芯片型號為:HY57V2562GTR,容量為256Mbit,數據位寬為16bit,最大工作頻率為133MHz。
乒乓緩存是一種常用的雙緩存機制,尤其是在圖像處理中進行大量數據處理時,為了保證系統的吞吐量,使用兩個緩存來存儲數據;一個緩存用來保存舊的數據供圖像處理模塊讀取,與此同時,另一個緩存保存圖像采集模塊產生的新數據;同時以包文的格式對數據進行緩存,有利于保證視頻圖像數據幀的完整性。
本次設計使用SDRAM的兩個Bank來實現乒乓緩存,當向Bank0緩存數據時,從Bank3讀數據,直到向Bank0寫完一幀數據,且從Bank3讀完一幀數據時,才切換Bank;當向Bank3緩存數據時,從Bank0讀數據,直到向Bank3寫完一幀數據,且從Bank0讀完一幀數據時,才切換Bank。通過兩個Bank循環讀寫即可實現數據的無縫緩沖與處理。在實際設計中對數據進行了丟幀處理,如果在不允許丟幀的情況下,可以對每個Bank緩存多幀數據。
乒乓緩存示意圖
至此,本文主要對圖像處理中的幾種經典算法的原理進行了簡要介紹,并介紹了我們使用的圖像采集傳感器OV5640攝像頭、SDRAM存儲器的一些特性。下一篇文章我們將繼續講述:幾種算法的Verilog實現方案、攝像頭傳感器的配置與數據采集模塊的設計方案、SDRAM芯片的控制器設計方案。
-
傳感器
+關注
關注
2552文章
51382瀏覽量
755840 -
FPGA
+關注
關注
1630文章
21796瀏覽量
605256 -
存儲器
+關注
關注
38文章
7528瀏覽量
164194 -
邊緣檢測
+關注
關注
0文章
92瀏覽量
18233
發布評論請先 登錄
相關推薦
評論