首先给出一个问题:如下边一个图片中,如何获取矩形的测量,也就是说,需要更准确的矩形位置参数?halcon提供的一般方法是,首先基本将矩形框住,然后用测量对象进行精确测量。因此,该矩形大致的中心点,长度、宽度、方向角要基本给出,见
首先给出代码,然后一条一条解释代码的意义:
read_image (Image, 'rect2')
rgb1_to_gray(Image,Image)
create_metrology_model (MetrologyHandle)
get_image_size (Image, Width, Height)
set_metrology_model_image_size (MetrologyHandle, Width, Height)
add_metrology_object_rectangle2_measure (MetrologyHandle, 172.3, 239.2, rad(11.609), 146.7, 50.9, 30, 12, 1, 30, [], [], Index)
apply_metrology_model (Image, MetrologyHandle)
get_metrology_object_result (MetrologyHandle, Index, 'all', 'result_type', 'all_param', Rectangle)
get_metrology_object_result_contour (Contour, MetrologyHandle, Index, 'all', 1.5)
clear_metrology_model (MetrologyHandle)
1) create_metrology_model (MetrologyHandle)
该语句定义一个测量容器,该容器可以盛放许多不同的测量对象,本例中测量对象只有一个。
2) set_metrology_model_image_size (MetrologyHandle, Width, Height)
定义测量容器针对的测量范围,本例是全图。
3) add_metrology_object_rectangle2_measure( : : MetrologyHandle, Row, Column, Phi, Length1, Length2, *定义外侧包含矩形框 MeasureLength1,MeasureLength2, *定义测量对象
MeasureSigma, MeasureThreshold, GenParamName, GenParamValue : Index) *定义被检图像灰度
理解该语句,首先要理解【被检物体、矩形范围框、和检测对象】三者的关系。如下图:
【被检物体、矩形范围框、和检测对象】三者的对应参数定义如下图:
* 矩形类计量对象的几何形状由其中心(Row, Column)、主轴φ的方向以及半边长度Length1和Length2指定。
* Phi的输入值自动映射到间隔。
* 矩形测量区域垂直于区域矩形的边界。与矩形边界垂直和相切的测量区域的半边长度在“ Length1”和“ Length2”中设置。
* 测量区域的中心位于矩形的边界上。参数MeasureSigma指定了一个标准偏差,算子使用该标准偏差应用计量学模型来平滑图像的灰度值。
* 可以使用参数MeasureThreshold来选择突出边缘,该参数构成了一个振幅阈值,即边缘一阶导数的绝对值。
此外,还可以在GenParamName和GenParamValue中调整一些通用参数。特别是,可以设置运算 set_metrology_object_param 中可用的所有通用参数。但请注意,对于许多应用程序,默认值已足够,无需进行调整。
运算符 add_metrology_object_rectangle2_measure返回参数索引中计量模型内添加的计量对象的Index索引。
4)get_metrology_object_result( : : MetrologyHandle, Index, Instance, GenParamName, GenParamValue : Parameter)
获取测量结果。
get_metrology_object_result 允许访问通过apply_metrology_model 获得的测量测量对象MetrologyHandle的测量结果。参数 Index指定查询结果的计量对象(MetrologyHandle中有多个计量对象)。对于设置为“all”的 Index,将返回所有计量对象的结果。通过参数 Instance,可以指定,在参数中返回结果是哪个测量实例的结果。将实例 Instance 设置为“all”将返回所有实例的结果。可以使用不同的泛型参数来控制参数中的返回值Parameter。泛型参数名称以 GenParamName传递。相应的值以GenParamValue传递。以下参数和值是可能的:
5)get_metrology_object_result_contour( : Contour : MetrologyHandle, Index, Instance, Resolution : )
获取测量结果。即以上测量的轮廓线。
最后轮廓结果如图:
如果原理上还不明白,参考下文,文中继续探讨本问题。也可参考网文:测量函数
测量问题
以上得到轮廓线并非测量结果。如何进一步解决测量问题,因为针对的情况很多,无法一一列举,这里仅对案例中提出的矩形进行矩形测量。
法1:用 fit_rectangle2_contour_xld可以从轮廓线提取矩形,根据长宽边满足测量。
法2:用gen_parallel_contour_xld(contour, parallelcontour, ‘regression_normal’, -Distance)直接得到平行线的距离,(长、宽各一个)
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !