本原創教程由芯驛電子科技(上海)有限公司(ALINX)創作,版權歸本公司所有,如需轉載,需授權并注明出處(http://www.alinx.com)。
適用于板卡型號:
PGL22G/PGL12G
1. 實驗簡介
本實驗將在例程“OV5640攝像頭HDMI顯示例程”的基礎上實現視頻圖像邊緣檢測的實驗。在很多應用場合,我們只需要采集到圖像的棱廓特征的信息,而不需要全部的視頻圖像,這樣就需要用到SOBEL邊緣檢測的算法。
2. 實驗原理
2.1邊緣檢測原理和算法
邊緣是圖像最基本的特征,其在計算機視覺、圖像分析等應用中起著重要的作用,這是因為圖像的邊緣包含了用于識別的有用信息,是圖像分析和模式識別的主要特征提取手段。
在圖像中,“邊緣”指的是臨界的意思。一幅圖像的“臨界”表示為圖像上亮度顯著變化的地方,邊緣指的是一個區域的結束,也是另一個區域的開始。“邊緣點”指的是圖像中具有坐標[x,y],且處在強度顯著變化的位置上的點。
常用的邊緣檢測算法大多是以原始圖像灰度值為基礎,通過考察圖像的每個像素的某個鄰域內灰度的變化,利用邊緣一階或二階導數的規律來檢測邊緣。下圖左邊為原始的黑白灰度的圖像,通過邊緣檢測算法后變成了右邊的圖像。
實現邊緣檢測有很多不同的方法,也一直是圖像處理中的研究熱點,人們期望找到一種抗噪強、定位準、不漏檢、不誤檢的檢測算法。其中Sobel算子效果較好,邊緣檢測算法比較簡單,實際應用中效率比canny邊緣檢測效率要高,但是邊緣不如Canny檢測的準確,但是很多實際應用的場合,sobel邊緣卻是首選,尤其是對效率要求較高,而對細紋理不太關心的時候。本實驗就采用Sobel的算法來實現視頻圖像的邊緣檢測。
2.2 sobel簡介
sobel是一個梯度的計算,如下圖所示,是x和y方向的3x3窗口的卷積。
梯度計算公式
,簡化的近似計算
對于圖像,如下圖:P1到P9為3x3的9個像素點,簡化公式計算:
3x3圖像窗口
為了進一步簡化計算,我們把算子進行簡化,調整為如下所示
3. 程序設計
本實驗的重點是sobel算法的實現,首先需要一個3x3的像素窗口,本實驗利用xilinx提供的VHDL程序,做了一個3行的圖像緩存,這樣就可以輕松實現3x3的窗口。
然后按照簡化公式,采用絕對值的方式計算sobel。
always@(posedgepclk)begin x1<={2'b00,p11}+{2'b00,p31}+{1'b0,p21,1'b0}; x3?<={2'b00,p13}+{2'b00,p33}+{1'b0,p23,1'b0}; y1?<={2'b00,p11}+{2'b00,p13}+{1'b0,p12,1'b0}; y3?<={2'b00,p31}+{2'b00,p33}+{1'b0,p32,1'b0};endalways@(posedge?pclk)begin abs_x?<=(x1?>x3)?x1-x3:x3-x1; abs_y<=(y1?>y3)?y1-y3:y3-y1; abs_g<=?abs_x?+?abs_y;end
計算完成以后,要進行簡單的二值化處理,將sobel值和閾值對比,產生黑白的二值化圖像。
always@(posedgepclk)begin data_out<=(abs_g?>threshold)?8'h00:8'hff;end
4. 實驗現象
1)將攝像頭模塊插入開發板,保證1腳對齊,1腳在焊盤形狀和其他引腳是有明顯區別的,是方形的。
OV5640攝像頭模塊連接開發板連接圖
2)連接好HDMI顯示器。
3)下載實驗程序,可以看到只有邊沿信息的黑白視頻輸出。注意:ov5640模塊焦距是可調的,如果焦距不合適,圖像會模糊,旋轉鏡頭,可以調節焦距。攝像頭模塊要輕拿輕放,不要用手觸摸元器件。
-
FPGA
+關注
關注
1630文章
21786瀏覽量
605059 -
算法
+關注
關注
23文章
4627瀏覽量
93166 -
邊緣檢測
+關注
關注
0文章
92瀏覽量
18229 -
sobel
+關注
關注
0文章
12瀏覽量
7919 -
紫光同創
+關注
關注
5文章
88瀏覽量
27539
發布評論請先 登錄
相關推薦
評論