如何获取矩形的测量及矩形位置参数?

描述

首先给出一个问题:如下边一个图片中,如何获取矩形的测量,也就是说,需要更准确的矩形位置参数?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)   *定义被检图像灰度    

理解该语句,首先要理解【被检物体、矩形范围框、和检测对象】三者的关系。如下图:

HALCON

【被检物体、矩形范围框、和检测对象】三者的对应参数定义如下图:

HALCON

* 矩形类计量对象的几何形状由其中心(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 : )

        获取测量结果。即以上测量的轮廓线。

        最后轮廓结果如图:

HALCON

        如果原理上还不明白,参考下文,文中继续探讨本问题。也可参考网文:测量函数

测量问题

        以上得到轮廓线并非测量结果。如何进一步解决测量问题,因为针对的情况很多,无法一一列举,这里仅对案例中提出的矩形进行矩形测量。

法1:用 fit_rectangle2_contour_xld可以从轮廓线提取矩形,根据长宽边满足测量。

法2:用gen_parallel_contour_xld(contour, parallelcontour, ‘regression_normal’, -Distance)直接得到平行线的距离,(长、宽各一个)





审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分