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