Halcon 第五章『模板匹配Matching』◆第7节:基于描述符的模板匹配|Descriptor-Based

        一、介绍

        与基于透视形变的模板匹配类似,基于描述符的模板匹配能够在物体处于透视形变的状态下进行匹配,并且已标定和未标定的相机图像都适用。与透视形变不同的是,它的模板不是根据边缘轮廓创建的,而是根据特征点创建的。

        例如:点的位置或者相邻像素的灰度信息等都可以作为描述符。有纹理的平面图形非常适用于这种方法,尤其是对于旋转倾斜等场景中的匹配可以得到非常理想的结果。

        与基于透视形变的匹配类似,基于描述符的匹配允许一定程度的透视形变,并且能在有标定和无标定的图像中进行。但是不同的是,基于描述符的匹配与物体的轮廓无关,而是与目标的纹理密切相关,或者说与目标的特征点相关。

        注:基于描述符的模板匹配只能用于有纹理的图像。

        创建基于描述符的模板这一步会比较耗时,所用的时间与纹理的复杂度有关。

        二、步骤

        ①选择ROI。与其他几种方法类似,在创建模板之前,先读取输入图像,选择ROI,可以是任意形状,也可以包含孔洞区域,尽量包含检测目标的突出特征。然后对ROI进行裁剪,得到模糊图像。

        ②创建基于描述符的匹配模型。由于基于描述符的匹配模型也有无标定和有标定两种情况,因此可以针对不同的方法选择对应的模型创建方式。可以使用create_uncalib_descriptor_model算子或者create_calib_descriptor_model算子,分别对应无标定和有标定的两种情况。对于有标定的情况,还需要知道相机内部参数和位姿。

        Matching / Descriptor-Based

        创建一个描述符的匹配模型,无标定

create_uncalib_descriptor_model(Template : : DetectorType, DetectorParamName, DetectorParamValue, DescriptorParamName, DescriptorParamValue, Seed : ModelID)

        Template:输入参数,输入一个用于产生模型的单通道图像。

        DetectorType:输入参数,探测器的类型。默认'lepetit',列表【

'harris':针对低对比度的模板图像。

'harris_binomial':一个比较好的折中,比harris快,但是比lepetit鲁棒。
'lepetit':一种检测速度非常快的方法检测重要的点,但是鲁棒性不如harris。当模板或者搜索的图像很暗或者有一个很低的对比度,不要使用lepetit。

】。

        DetectorParamName:输入参数,探测器的参数名称。默认 [],列表【 'alpha', 'check_neighbor', 'mask_size_grd', 'mask_size_smooth', 'min_check_neighbor_diff', 'min_score', 'radius', 'sigma_grad', 'sigma_smooth', 'subpix', 'threshold'】。

        DetectorParamValue:输入参数,探测器参数的值。默认 [],列表【0.08, 1, 1.2, 3, 15, 30, 1000, 'on', 'off', 'none', 'interpolation'】。

        DescriptorParamName:输入参数,描述符的参数名称。默认 [],列表

【描述符尺寸参数

 'depth'蕨形深度(菊花形状)。默认11,典型值5-11。

'number_ferns'蕨形数量,增加数量使得匹配更加精确,同时增加运行时间。默认30,典型值5-50。(当深度为5时,数量150;当较大深度11,数量建议10)。

'patch_size'边长的大小。默认17,典型值15-33。

模拟参数

'min_rot'最小旋转角度,。默认-180,参考值-180-0。

'max_rot'最大旋转角度。默认180,参考值0-180。

'min_scale'模板最小的比例大小,。默认0.5,典型值0.1-1.0。

'max_scale'模板最大的比例大小,。默认1.4,典型值1.0-3.5。

'tilt'倾斜值,投射倾斜描述符。

】。

        DescriptorParamValue:输入参数,描述符参数的值。默认 [],列表【0.5, 1.4, 11, 21, 30, -180, 180, 'on', 'off'】。

        Seed:输入参数,随机种子数量。默认42。

        ModelID:输出参数,输出描述符匹配模型的句柄。

        Matching / Descriptor-Based

        创建用于校准透视匹配的描述符模型(有标定)

create_calib_descriptor_model(Template : : CamParam, ReferencePose, DetectorType, DetectorParamName, DetectorParamValue, DescriptorParamName, DescriptorParamValue, Seed : ModelID)

        Template:输入参数,输入一个用于产生模型的单通道图像。

        CamParam:输入参数,照相机的原点方位。

        ReferencePose:输入参数,输入图像中物体参数方位。

        DetectorType:输入参数,探测器的类型。默认'lepetit',列表【

'harris':针对低对比度的模板图像。

'harris_binomial':一个比较好的折中,比harris快,但是比lepetit鲁棒。
'lepetit':一种检测速度非常快的方法检测重要的点,但是鲁棒性不如harris。当模板或者搜索的图像很暗或者有一个很低的对比度,不要使用lepetit。

】。

        DetectorParamName:输入参数,输入匹配参数名称。默认 [],列表【 'alpha', 'check_neighbor', 'mask_size_grd', 'mask_size_smooth', 'min_check_neighbor_diff', 'min_score', 'radius', 'sigma_grad', 'sigma_smooth', 'subpix', 'threshold'】。

        DetectorParamValue:输入参数,输入匹配参数对应的值。默认 [],列表【0.08, 1, 1.2, 3, 15, 30, 1000, 'on', 'off', 'none', 'interpolation'】。

        DescriptorParamName:输入参数,输入描述符的参数名称。默认 [],列表

【描述符尺寸参数

 'depth'蕨形深度(菊花形状)。默认11,典型值5-11。

'number_ferns'蕨形数量,增加数量使得匹配更加精确,同时增加运行时间。默认30,典型值5-50。(当深度为5时,数量150;当较大深度11,数量建议10)。

'patch_size'边长的大小。默认17,典型值15-33。

模拟参数

'min_rot'最小旋转角度,。默认-180,参考值-180-0。

'max_rot'最大旋转角度。默认180,参考值0-180。

'min_scale'模板最小的比例大小,。默认0.5,典型值0.1-1.0。

'max_scale'模板最大的比例大小,。默认1.4,典型值1.0-3.5。

'tilt'倾斜值,投射倾斜描述符。

】。

        DescriptorParamValue:输入参数,输入描述符参数对应的值。默认 [],列表【0.5, 1.4, 11, 21, 30, -180, 180, 'on', 'off'】。

        Seed:输入参数,随机种子数量。默认42。

        ModelID:输出参数,输出描述符匹配模型的句柄。

         ③搜索目标。基于描述符的模板也分两种情况,即使用find_uncalib_descriptor_model算子或者find_calib_descriptor_model算子,分别对应无标定和有标定的两种情况,返回目标的三维位姿和匹配分数。

        Matching / Descriptor-Based

        找到图像中描述符模型的最佳匹配(无标定)

find_uncalib_descriptor_model(Image : : ModelID, DetectorParamName, DetectorParamValue, DescriptorParamName, DescriptorParamValue, MinScore, NumMatches, ScoreType : HomMat2D, Score)

        Image:输入参数,输入需要匹配的单通道图像。

        ModelID:输入参数,输入描述符匹配模型句柄。

        DetectorParamName:输入参数,输入探测器的参数名称。默认 [],列表【'alpha', 'check_neighbor', 'mask_size_grd', 'mask_size_smooth', 'min_check_neighbor_diff', 'min_score', 'radius', 'sigma_grad', 'sigma_smooth', 'subpix', 'threshold'】。

        DetectorParamValue:输入参数,输入探测器的参数值。默认 [],列表【 0.08, 1, 1.2, 3, 15, 30, 1000, 'on', 'off'】。

        DescriptorParamName:输入参数,输入描述符的参数名称。默认 [],列表【'guided_matching', 'min_score_descr'】。

        DescriptorParamValue:输入参数,输入描述符对应的参数值。默认 [],列表【0.0, 0.001, 0.005, 0.01, 'on', 'off'】。

        MinScore:输入参数,与模板最小的匹配分数。默认0.2,建议值【0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0】,范围 0 ≤ MinScore ≤ 1。

        NumMatches:输入参数,最大发现实例数。默认1,建议值【1, 2, 3, 4】,范围≥1。

        ScoreType:输入参数,匹配的类型。默认'num_points',列表【 'inlier_ratio', 'num_points'】。

        HomMat2D:输出参数,匹配模型与实例之间的二维变换矩阵。

        Score:输出参数,输出目标物体的匹配分数。

        Matching / Descriptor-Based

        在图像中找到校准描述符模型的最佳匹配,并返回其3D姿态(有标定)。

find_calib_descriptor_model(Image : : ModelID, DetectorParamName, DetectorParamValue, DescriptorParamName, DescriptorParamValue, MinScore, NumMatches, CamParam, ScoreType : Pose, Score)

        Image:输入参数,输入需要匹配的单通道图像。

        ModelID:输入参数,输入描述符匹配模型句柄。

        DetectorParamName:输入参数,输入探测器的参数名称。默认 [],列表【'alpha', 'check_neighbor', 'mask_size_grd', 'mask_size_smooth', 'min_check_neighbor_diff', 'min_score', 'radius', 'sigma_grad', 'sigma_smooth', 'subpix', 'threshold'】。

        DetectorParamValue:输入参数,输入探测器的参数值。默认 [],列表【 0.08, 1, 1.2, 3, 15, 30, 1000, 'on', 'off'】。

        DescriptorParamName:输入参数,输入描述符的参数名称。默认 [],列表【'guided_matching', 'min_score_descr'】。

        DescriptorParamValue:输入参数,输入描述符对应的参数值。默认 [],列表【0.0, 0.001, 0.005, 0.01, 'on', 'off'】。

        MinScore:输入参数,与模板最小的匹配值。默认0.2,建议值【0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0】,范围 0 ≤ MinScore ≤ 1。

        NumMatches:输入参数,最大的匹配数量。默认1,建议值【1, 2, 3, 4】,范围≥1。

        CamParam:输入参数,相机的原点方位。

        ScoreType:输入参数,匹配的类型。默认'num_points',列表【 'inlier_ratio', 'num_points'】。

        Pose:输出参数,输出目标物体的3D位姿。

        Score:输出参数,输出目标物体的匹配分数。

         ④优化匹配过程。如果一次匹配的效果不理想,可以通过调整匹配参数来优化匹配结果。例如,修改搜索空间、限制图像金字塔的层级数。

        ⑤清除模型。匹配结束后,使用clear_component_model算子将模板清除,并释放内存资源。当目标匹配成功后,会得到目标的位置坐标、旋转角度、缩放值、二维投影矩阵和匹配分值等参数。这些参数可以作为继续匹配输入,也可以用来进行其他的视觉处理,如图像对齐、几何计算等。

        Matching / Descriptor-Based

        将模板清除,并释放内存资源

clear_descriptor_model( : : ModelID : )

猜你喜欢

转载自blog.csdn.net/qq_45336030/article/details/124534139
今日推荐