1.简单的Halcon 找圆算法

时间:2024-05-23 13:34:36

首先上图:如下,图像质量比较差,不过没关系

1.简单的Halcon 找圆算法

 

然后上代码:

read_image(Image, 'C:/Users/lichen/Desktop/AutoFocus/cal_up.png')
auto_threshold(Image, Regions, 15) //15 代表附近区域灰度变化大于15 
connection(Regions, ConnectedRegions) //将阈值处理的图 分割成块

MinR:=15 // 需要找圆的 最小半径
MaxR:=260 // 最大半径
PI:=3.141592

*选择面积在 范围之内的 minR^2*PI < area < maxR^2*PI
*选择圆度在 0.6-1之间的
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', MinR*MinR*PI, MaxR*MaxR*PI)
select_shape(SelectedRegions, SelectedRegions1, 'circularity', 'and', 0.6, 1)
count_obj(SelectedRegions1, Number)
for Index := 1 to Number by 1
    dev_clear_window()
    select_obj(SelectedRegions1, ObjectSelected, Index)
    *对外边缘进行平滑处理
    opening_circle(ObjectSelected, RegionOpening, 5.5)
    *对内部进行平滑处理
    closing_circle(RegionOpening, RegionClosing, 5.5)
    gen_contour_region_xld(RegionClosing, Contours, 'border')
    fit_circle_contour_xld(Contours, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
    gen_circle_contour_xld(ContCircle, Row, Column, Radius, 0, 6.28318, 'positive', 1)
endfor