Halcon 邊緣檢測運算元詳解

2021-10-14 06:19:55 字數 2001 閱讀 4663

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的橫向,縱向模板,分別對影象進行卷積,得到橫座標,縱座標的亮度差分值。計算出影象亮度函式的梯度近似值。它是一種基於一階導數的邊緣運算元。優點是能...