Halcon 邊緣提取


  fast_threshold (Image, Region, 0, 120, 7)

    boundary (Region, RegionBorder, 'inner')

   dilation_circle (RegionClipped, RegionDilation, 2.5)

   reduce_domain (Image, RegionDilation, ImageReduced)

一副圖片的前期處理:

1、 Blob應用(逼近感興趣區域)

2、 Boundary

3、 膨脹

4、 形成Image

 

edges_sub_pix(Image : Edges : FilterAlphaLowHigh : )

提取圖像精確邊緣 (精確邊緣就是亞像素邊緣)

(這個函數就是將含有邊緣的圖像變成亞像素輪廓XLD)

 

Image:  輸入圖像

Edges:  輸出邊緣輪廓

Filter: 邊緣提取算法的名稱 (canny,lanser1 )

Alpha:  高斯平滑系數

Low:    低閾值

High:   高閾值    

 

edges_sub_pix (ImageReduced, Edges, 'canny', 2, 20, 60)

(20,60,這兩個越小,邊緣越多,越細膩,越大,邊緣越少)

介紹一下Canny算子: 
使用累計直方圖計算兩個閥值。凡是大於高閥值的一定是邊緣; 凡是小於低閥值的一定不是邊緣;如果檢測結果大於低閥值但又小於高閥值,那就要看這個像素的鄰接像素中有沒有超過高閥值的邊緣像素:如果有的話那么它就是邊緣了,否則他就不是邊緣;

 

 

segment_contours_xld(Contours : ContoursSplit : ModeSmoothContMaxLineDist1MaxLineDist2 : )

 

將一個XLD輪廓分割為直線段、圓(圓弧)、橢圓弧。

 

Contours:       需要進行分割的輪廓。

ContoursSplit: 分割后的輪廓tuple。

Mode: 分割輪廓的方式,可以選擇'lines'(使用直線段分割),

     'lines_circles'(使用直線段和圓(弧)分割),

     'lines_ellipses'(使用直線段和橢圓弧分割)。

SmoothCont:   輪廓平滑的參數,可以抑制在折線逼近過程中過短的線段,能更加魯棒的逼近圓和橢圓。

MaxLineDist1: 第一次用Ramer算法(即用直線段遞進逼近輪廓)時的MaxLineDist,在逼近完成之后,再    用圓弧或橢圓弧對相鄰分割線段進行擬合,如果擬合圓弧到輪廓的距離小於逼近線段到輪廓的距離,就用圓    弧替代逼近線段,這個過程一致迭代直到所有的線段擬合完畢。

MaxLineDist2: 第二次逼近輪廓時的MaxLineDist,只有當MaxLineDist2

 

這種兩步逼近算法效率較高,因為在第一次逼近過程中,遞進逼近的直線段較少,因此較大直徑的圓弧能夠被高效的分割出來。在第二次逼近過程中,能夠被小直徑圓弧逼近的輪廓被找到,同時大直徑圓弧的末端被重新定義。

 

 

segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 3)

Remark:

分割得到的輪廓是直線段、圓(圓弧)或者橢圓弧可以通過分割后輪廓的全局屬性'cont_approx’參數的值來確定(參考get_contour_global_attrib_xld)。

如果'cont_approx'=-1,這一部分輪廓最適合被擬合為直線段。

如果'cont_approx'=0,這一部分輪廓最適合被擬合為橢圓弧。

如果'cont_approx'=1,這一部分輪廓最適合被擬合為圓弧。

 

Count_obj (ContoursSplit,Number)

計算ContoursSplit連通域的個數

 

Select_obj (ContoursSplit,i)

選擇ContoursSplit連通域中第i個連通域

 

 

get_contour_global_attrib_xld(Contour : : Name : Attrib)

用於得到一段XLD輪廓的全局特征

 

參數列表:

Contour(in):單個輪廓

Name :   特征名稱,如

regr_norm_row\regr_norm_col\regr_mean_dist\regr_dev_dist\cont_approx

Attrib(out):特征值

 

可能前置項:

lines_gauss, lines_facet, edges_sub_pix

 

get_contour_global_attrib_xld (ObjectSelected, 'cont_approx', Attrib)

如果Attrib =-1,這一部分輪廓最適合被擬合為直線段。

如果Attrib =0,這一部分輪廓最適合被擬合為橢圓弧。

如果Attrib =1,這一部分輪廓最適合被擬合為圓弧。

 

If (Attrib > 0) 

fit_circle_contour_xld(Contours : : AlgorithmMaxNumPointsMaxClosureDistClippingEndPointsIterationsClippingFactor : RowColumnRadiusStartPhiEndPhiPointOrder)

對亞像素擬合圓的函數

Contoursin):          輸入輪廓

Algorithmin):        擬合圓的算法

MaxNumPointsin):    用於計算的最大輪廓點個數

MaxClosureDistin): 一個輪廓的末尾點最大間距被認為是閉合

ClippingEndPointsin):在逼近過程中被忽略的開始及末尾點個數

Iterationsin):      迭代的最大次數用於魯棒加權擬合

ClippingFactorin): 消除異常值的裁剪因子

Rowout):            圓心行坐標

Colout):           圓心列坐標

Radiusout):       圓半徑

StartPhiout):    開始點的角度(rad

EndPhiout):      末尾點的角度(rad

PointOrderout):  邊界點的順序

 

fit_circle_contour_xld (ObjectSelected, 'ahuber', -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)

 

函數作用:

對一些線段的XLD做近似計算直線計算

參數Algorithm的可選項解釋如下:

algebraic:這種方法減少了輪廓點與結果圓之間的代數距離

ahuber:類似於algebraic,輪廓點被加權以減小異常值的影響基於方法Huber

atukey:類似於algebraic,輪廓點被加權以減小異常值的影響基於方法Tukey

geometric:該法減少了輪廓點與結果圓之間的幾何距離,該法被統計是最優的,但占用很多計算時間。如果輪廓點被噪聲干擾嚴重,可以考慮使用該方法。

geohuber:類似於geometric,輪廓點被加權以減小異常值的影響基於方法Huber

geotukey:類似於geometric,輪廓點被加權以減小異常值的影響基於方法Tukey

 

ClippingFactor控制被弱化的異常值個數,值越小,越多異常值被檢測到。

最小擬合一條線的必要輪廓點個數是2,因此,一條輪廓線點個數至少是2+2*ClippingEndPoints

 

可替代項:

fit_ellipse_contour_xld

fit_line_contour_xld

fit_rectangle2_contour_xld

 

可能后置項:

gen_circle_contour_xld

disp_circle,

get_points_

 

edges_sub_pix(Image : Edges : FilterAlphaLowHigh : )

提取圖像精確邊緣 (精確邊緣就是亞像素邊緣) (zero—cross)

segment_contours_xld(Contours : ContoursSplit : ModeSmoothContMaxLineDist1MaxLineDist2 : )

將一個XLD輪廓分割為直線段、圓(圓弧)、橢圓弧。

get_contour_global_attrib_xld(Contour : : Name : Attrib)

用於得到一段XLD輪廓的全局特征

fit_circle_contour_xld(Contours : : AlgorithmMaxNumPointsMaxClosureDistClippingEndPointsIterationsClippingFactor : RowColumnRadiusStartPhiEndPhiPointOrder)

對亞像素擬合圓的函數

第一步:提取輪廓

第二部:分割輪廓

第三部:選取輪廓,得到特征

第四部:根據特征,選擇函數進行擬合

 

1、亞像素精度閾值分割

threshold_sub_pix(Image : Border : Threshold : )

 

2、亞像素輪廓查找

edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )

zero_crossing_sub_pix(Image : ZeroCrossings : : )

 

轉載自:http://blog.sina.com.cn/s/blog_c01c55220102ypsx.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM