【Halcon&二维测量】——使用计量模型以亚像素精度测量圆和矩形

算法大致思路如下:
      1.创建计量模型模板并设置计量对象图像大小
      2.根据先验知识生成相关图形形状,如矩形,圆,并将其加入到创建的模板中
      3.设置模板的相关参数,包括图像大小,容忍度等
      4.读入图像,并执行计量模型,测量并拟合计量模型中所有计量对象的几何形状
      5.提取测量结果,测量的轮廓,定位区域,后补区域
 

 

dev_update_off ()
read_image (Image, 'pads')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')

//定义圆的近似位置和测量公差

RowCircle := [52:89:500]
CircleInitRow := [RowCircle,RowCircle]
CircleInitColumn := [gen_tuple_const(6,348),gen_tuple_const(6,438)]
gen_cross_contour_xld (Cross1, CircleInitRow, CircleInitColumn, 6, 0.785398)
CircleInitRadius := [gen_tuple_const(6,23),gen_tuple_const(6,23)]
CircleRadiusTolerance := 12

//定义矩形的近似位置和测量公差

RectangleInitRow := [410,410]
RectangleInitColumn := [215,562]
RectangleInitPhi := [0,0]
RectangleInitLength1 := [85,85]
RectangleInitLength2 := [88,88]
RectangleTolerance := 10

// 准备计量模型数据结构
create_metrology_model (MetrologyHandle)
set_metrology_model_image_size (MetrologyHandle, Width, Height)  //设置计量对象图像的大小。

//将定义的矩形加入到计量模型中
add_metrology_object_rectangle2_measure (MetrologyHandle, RectangleInitRow, RectangleInitColumn, RectangleInitPhi, RectangleInitLength1, RectangleInitLength2, RectangleTolerance, 5, .5, 1, [], [], MetrologyRectangleIndices)

//将定义的圆加入到计量模型中
add_metrology_object_circle_measure (MetrologyHandle, CircleInitRow, CircleInitColumn, CircleInitRadius, CircleRadiusTolerance, 5, 1.5, 2, [], [], MetrologyCircleIndices)

//在一次调用中可每个计量对象可以测量多个圆/矩形/直线/椭圆,此处设置圆的数目为2
set_metrology_object_param (MetrologyHandle, MetrologyCircleIndices, 'num_instances', 2)

//将“measure_transition”(测量转换)设置为“uniform”(统一)确保只返回一致的圆,要么只是从/亮到暗的边缘,要么相反。因为一致性检查增加了运行时,所以默认情况下已切换。但在本例中可设置使用,因为负边和正边都存在
set_metrology_object_param (MetrologyHandle, MetrologyCircleIndices, 'measure_transition', 'uniform')

//设置最小分数,增加结果的鲁棒性
set_metrology_object_param (MetrologyHandle, MetrologyCircleIndices, 'min_score', .9)

// 开始执行测量
apply_metrology_model (Image, MetrologyHandle) //测量并拟合计量模型中所有计量对象的几何形状。

// 获取计量模型的测量结果,矩形
get_metrology_object_result (MetrologyHandle, MetrologyRectangleIndices, 'all', 'result_type', 'all_param', RectangleParameter)

//获取参数
Sequence := [0:5:|RectangleParameter| - 1]
RectangleRow := RectangleParameter[Sequence]
RectangleColumn := RectangleParameter[Sequence + 1]
RectanglePhi := RectangleParameter[Sequence + 2]
RectangleLength1 := RectangleParameter[Sequence + 3]
RectangleLength2 := RectangleParameter[Sequence + 4]
 
//获取计量模型的测量结果 

get_metrology_object_result (MetrologyHandle, MetrologyCircleIndices, 'all', 'result_type', 'all_param', CircleParameter)

//取参数
Sequence := [0:3:|CircleParameter| - 1]
CircleRow := CircleParameter[Sequence]
CircleColumn := CircleParameter[Sequence + 1]
CircleRadius := CircleParameter[Sequence + 2]

//显示结果,查询计量对象的结果轮廓。
get_metrology_object_result_contour (Contours, MetrologyHandle, 'all', 'all', 1.5)

//获取测量区域的轮廓以及边缘点的坐标,拟合圆和矩形的必要条件
get_metrology_object_measures (Contour, MetrologyHandle, 'all', 'all', Row1, Column1) //得到计量模型的测量区域和边缘定位结果
gen_cross_contour_xld (Cross, Row1, Column1, 6, 0.785398)

//显示结果
Color := ['gray','cyan','green']
dev_display (Image)
dev_set_line_width (1)
dev_set_color (Color[0])
dev_display (Contour)
dev_set_color (Color[1])
dev_display (Cross)
dev_set_line_width (2)
dev_set_color (Color[2])
dev_display (Contours)
Message := Color[2] + ': Measurement result'
Message[1] := Color[1] + ': Edge candidate points'
Message[2] := Color[0] + ': Measure regions'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
stop ()

//清理内存
clear_metrology_model (MetrologyHandle)  //释放句柄

用到的几个算子:
      create_metrology_model (MetrologyHandle)–创建计量模型句柄
      set_metrology_model_image_size --设置计量对象图像的大小。
      add_metrology_object_rectangle2_measure–将定义的矩形加入到计量模型中
      add_metrology_object_circle_measure–将定义的圆加入到计量模型中
      set_metrology_object_param–设置计量模型的相关参数
      apply_metrology_model—测量并拟合计量模型中所有计量对象的几何形状
      get_metrology_object_result–获取计量模型的测量结果
      get_metrology_object_result_contour --查询计量对象的结果轮廓
      get_metrology_object_measures --得到计量模型的测量区域和边缘定位结果。
      clear_metrology_model --释放计量模型的句柄
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&Mr.Gong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值