首先上图:如下,图像质量比较差,不过没关系
然后上代码:
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