1.1 種類
halcon內常用的邊緣檢測運算元包括如下幾種:
1.edges_image: 提取2d 影象邊緣
2.edges_sub_pix:提取2d影象亞畫素邊緣
3.edges_object_model_3d :提取3d影象邊緣
4.edges_color和edges_color_sub_pix:提取彩色影象邊緣
1.2 區別
edges_image可選擇多種邊緣檢測演算法來提取物體邊緣,其與亞畫素邊緣運算元的區別在於edges_image提取是以畫素為單位的邊緣特徵,edges_sub_pix是以比畫素還小的單位來提取的邊緣,一般採用矩方法,插值法和擬合法。
該運算元內主要引數包括:
imadir(影象邊緣方向,對sobel_fast演算法無用,因為其不計算方向資訊)
filter(邊緣運算元,包括』canny』, 『deriche1』, 『deriche1_int4』, 『deriche2』, 『deriche2_int4』, 『lanser1』, 『lanser2』, 『mshen』, 『shen』, 『sobel_fast』)
alpha(過濾器引數,小的值導致強平滑,但是更少的細節(canny運算元相反))
nms(非最大值抑制(設定為none,表示不需要使用該值))
low(滯後閾值操作的下閾值(如果不需要閾值設定,則為負值))
high(滯後閾值操作的上閾值(如果不需要閾值設定,則為負值))
2.2 邊緣檢測演算法
對於演算法來講,目前canny運算元是最穩定的邊緣檢測方法。
canny演算法由邊緣強度、邊緣細化(nms)、滯後閾值三個階段組成。
首先,邊緣強度的計算是計算影象梯度:梯度幅值矩陣、梯度方向矩陣:
1)影象灰度化
2)高斯濾波
3)sobel濾波器求出x,y方向上梯度影象,記為fx、fy
4)利用fx、fy求出梯度幅值和梯度的方向
5)此時的梯度方向為[-90,+90]之間的任意值,將它們規則化為四類種0、45、90、135度。
然後,計算非最大值抑制(nms),我們根據已經規則化的方向矩陣中儲存的方向先分類,之後比較相同方向上的三顆畫素,確保中間畫素的值最大,否則將它置零,最後得出了清洗過的梯度幅值矩陣。
最後,繼續處理梯度幅值矩陣,根據設定高閾值high、低閾值low將影象分成三部分:
1.梯度幅值大於high的畫素,將值置為255;
2.梯度幅值小於low的畫素,將值置為0;
3.梯度幅值在中間的畫素,用它的8鄰域判斷,鄰域內若有值大於high,則將中間的畫素置為255;
下面對涉及
下面結合程式對每種濾波演算法進行演示講解:
read_image (i, 'c:/users/administrator/desktop/a.png')
dev_close_window ()
dev_open_window(0, 0, 512, 512, 'black', windowhandle)
get_image_size (i, width, height)
dev_set_window_extents (0, 0, width, height)
rgb1_to_gray(i, grayimage)
*dev_set_lut ('change2')
*設定滯後閾值為預設值
*濾波引數值alpha
*設定滯後閾值必須大於0,小於255,值越小細節越多,但同時會帶來很多不需要的邊緣資訊。
*值越大則會丟失邊緣,很多邊緣點值都會被設定為0。
邊緣檢測運算元
看了很多邊緣檢測的文章,有些不夠詳細,有些不算綜合,所以打算總結一下!以下內容均為個人理解,如有問題,望指正!首先,我想要解釋一下什麼是邊緣。通俗地講,灰度值變化劇烈的地方就是邊緣。那麼如何判斷灰度值變化?如何度量 劇烈 各類演算法給出了自己的規範或者說是原則。所以,各類運算元就跳出來了。由於各類運...
邊緣檢測運算元
sobel amp image edgeamplitude filtertype,size 根據影象的一次導數計算影象的邊緣 close edges edges,edgeimage regionresult minamplitude close edges length edges,gradient...
邊緣檢測運算元
1.sobel運算元 索貝爾 主要思想是 利用影象畫素點的上下左右的畫素點進行加權差,邊緣的差值會較大,從而得到對應的邊緣。它是一種差分性運算元,包含3 3的橫向,縱向模板,分別對影象進行卷積,得到橫座標,縱座標的亮度差分值。計算出影象亮度函式的梯度近似值。它是一種基於一階導數的邊緣運算元。優點是能...