【halcon】halcon轮廓总结之select_contours_xld

前言

select_contours_xld 我认为是一个非常常用且实用的算子,用于对轮廓进行筛选。

简介

这段文档描述了一个名为"SelectContoursXld"的操作,用于根据不同特征选择XLD(XLD是一种图像数据表示形式,表示轮廓线)轮廓。以下是关于该操作的重要信息:

名称

  • SelectContoursXld

参数

![在这里插入图片描述](https://img-blog.csdnimg.cn/825ff460e4ec4d5cbda863787b83f885.png

第一个参数,是输入的轮廓。第二个是输出的轮廓。

重点是控制参数部分。

控制参数描述

  • SelectContoursXld根据参数feature中的不同特征选择输入的轮廓(contours)。可用的特征包括:
    1. "contour_length":选择长度小于min1或大于max1的轮廓。
    2. "maximum_extent":选择最大范围小于min1或大于max1的轮廓。
    3. "direction":选择回归线方向在min1和max1之间的轮廓。
    4. "curvature":选择平均距离从回归线的轮廓,以及距离的标准差在min1和max1之间的轮廓。
    5. "closed":选择起点到终点距离小于等于max1像素的封闭轮廓。
    6. "open":选择起点到终点距离大于min1像素的开放轮廓。

contour_length: 很简单,筛选轮廓的长度。

maximum_extent: 目前还不理解,后续理解了再补充

direction:选择轮廓的方向。这里具体讲一下。

direction

这里有几个不同方向的轮廓此时我们进行筛选。

select_contours_xld (Contours, SelectedContours, 'direction', rad(0), rad(45), -0.5, 0.5)

得到的结果是:

首先 feature 设置为 'direction' 表示对 角度的筛选,rad(0), rad(45), 表示选择 0 到 45 度之前的

轮廓。(ps:当选择 'direction' 时,最后两个参数 是无作用的不参与控制)

如果,我将角度调整为:rad(180), rad(180 + 45)

select_contours_xld (Contours, SelectedContours, 'direction', rad(180), rad(180 + 45), -0.5, 0.5)

得到相同的结果。如上图所示。

结论:

1 方向的范围是 0~180° 不是0 ~ 360, 说明针对的是轮廓对应的直线的方向,而非线段。

2 度数的计算是逆时针方向

curvature

"Curvature"(曲率)指的是轮廓的曲率,它表示轮廓的弯曲程度。在"SelectContoursXld"操作中,"curvature"特征用于选择符合特定曲率范围的轮廓。

具体来说,"curvature"特征根据以下两个参数来选择轮廓:

  1. min1:定义了曲率的下限阈值。只有那些平均距离从回归线(曲线的近似线)不小于min1的轮廓会被选择。
  2. max1:定义了曲率的上限阈值。只有那些平均距离从回归线不大于max1的轮廓会被选择。

此外,还有另外两个参数:

  1. min2:用于定义标准差的下限阈值。只有那些距离的标准差不小于min2的轮廓会被选择。
  2. max2:用于定义标准差的上限阈值。只有那些距离的标准差不大于max2的轮廓会被选择。

小结: 用一条直线去拟合这条轮廓,min1 max1 限制的是和直线相差的平均距离,min1 max1 限制的是直线相差的标准差。

我理解大概就是这个意思:

如果在曲率("curvature")选择特征中,你将min1和max1都设置为0,或者将min2和max2都设置为0,那么这个特定特征将不会影响轮廓的选择。

换句话说,如果你将这些参数都设置为0,那么曲率特征将不再起作用,不会对轮廓的选择产生限制,所有轮廓都将被保留。这在某些情况下可能是有用的,特别是当你希望不考虑曲率特征时。

举个栗子:

select_contours_xld (Contours, SelectedContours1, 'curvature', 0, 0, 0, 10)

这里我通过标准差进行筛选,筛选后的结果为:

可以看到曲率较大的就被筛选掉了。

open 和 closed

"closed":选择起点到终点距离小于等于max1像素的封闭轮廓。

"open":选择起点到终点距离大于min1像素的开放轮廓。

很好理解,就是轮廓的闭合程度,或者是开放程度!

注意事项

文档中有个注意事项,这里逐句翻译解释一下:

这段文档包含了一些重要的注意事项,特别涉及到使用"SelectContoursXld"操作来筛选轮廓,特别是在根据"direction"或"curvature"特征进行筛选时。以下是解释:

  1. Before contour can be filtered by SelectContoursXld according to "direction" or "curvature"(在使用"direction"或"curvature"特征进行选择之前):在你尝试使用"SelectContoursXld"操作基于"direction"(方向)或"curvature"(曲率)特征来筛选轮廓之前,有一个重要的前提条件。

  2. the parameters of the regression lines to the contours must be calculated with RegressContoursXld(必须先使用RegressContoursXld计算轮廓的回归线参数):在进行"direction"或"curvature"筛选之前,你需要首先使用"RegressContoursXld"操作来计算轮廓的回归线参数。这是因为"direction"和"curvature"特征需要回归线的信息来进行计算和筛选。

  3. If this has not been done, SelectContoursXld calls RegressContoursXld internally with the parameters mode = "no" and iterations = 1(如果没有进行回归线参数计算,SelectContoursXld将内部使用RegressContoursXld,参数mode="no"和iterations=1):如果你没有手动执行"RegressContoursXld"来计算回归线参数,"SelectContoursXld"会自动在内部调用"RegressContoursXld",使用默认参数mode="no"和iterations=1来计算回归线参数。

  4. If a different mode should be used, RegressContoursXld must be called explicitly(如果需要使用不同的模式,必须显式调用RegressContoursXld):如果你需要使用"RegressContoursXld"操作的不同参数模式来计算回归线参数,你需要显式地调用该操作并提供所需的参数。

总之,这段文档提醒你在使用"SelectContoursXld"来根据"direction"或"curvature"特征筛选轮廓之前,确保先进行回归线参数的计算,否则系统会自动进行默认计算。如果需要不同的计算方式,你需要手动调用"RegressContoursXld"并提供自定义参数。

总之,引出了一个 regress_contours_xld 这个算子,那这个算子具体怎么用?点赞过2,更新下一篇。

相关推荐
仙贝大饼14 天前
C#Halcon从零开发_Day14_AOI缺陷检测策略1_Bolb分析+特征分析_饼干破损检测
c#·缺陷检测·halcon·机器视觉·aoi
张鱼小丸子_微辣15 天前
Halcon/C# 图像窗口、读取图片及仿射变换
c#·halcon
lingxiao1688817 天前
管件接头的无序抓取
机器学习·计算机视觉·halcon·3d视觉
机器视觉知识推荐、就业指导18 天前
Qt联合Halcon开发一:Qt配置Halcon环境【详细图解流程】
开发语言·qt·halcon
lingxiao1688825 天前
对3D对象进行形变分析
计算机视觉·halcon·3d视觉·3d表面匹配·3d变形的表面匹配
码小跳25 天前
Halcon案例(三):C#联合Halcon识别排线
计算机视觉·c#·halcon
栗克1 个月前
Halcon 图像预处理②
人工智能·计算机视觉·halcon
栗克1 个月前
halcon 透视矩阵
计算机视觉·halcon
一杯解心烦1 个月前
Halcon透视矩阵
矩阵·halcon
LeonDL1681 个月前
HALCON 深度学习训练 3D 图像的几种方式优缺点
人工智能·python·深度学习·3d·halcon·halcon训练3d图像·深度学习训练3d图像