前言
select_contours_xld 我认为是一个非常常用且实用的算子,用于对轮廓进行筛选。
简介
这段文档描述了一个名为"SelectContoursXld"的操作,用于根据不同特征选择XLD(XLD是一种图像数据表示形式,表示轮廓线)轮廓。以下是关于该操作的重要信息:
名称:
- SelectContoursXld
参数
![在这里插入图片描述](https://img-blog.csdnimg.cn/825ff460e4ec4d5cbda863787b83f885.png
第一个参数,是输入的轮廓。第二个是输出的轮廓。
重点是控制参数部分。
控制参数描述:
- SelectContoursXld根据参数feature中的不同特征选择输入的轮廓(contours)。可用的特征包括:
- "contour_length":选择长度小于min1或大于max1的轮廓。
- "maximum_extent":选择最大范围小于min1或大于max1的轮廓。
- "direction":选择回归线方向在min1和max1之间的轮廓。
- "curvature":选择平均距离从回归线的轮廓,以及距离的标准差在min1和max1之间的轮廓。
- "closed":选择起点到终点距离小于等于max1像素的封闭轮廓。
- "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"特征根据以下两个参数来选择轮廓:
- min1:定义了曲率的下限阈值。只有那些平均距离从回归线(曲线的近似线)不小于min1的轮廓会被选择。
- max1:定义了曲率的上限阈值。只有那些平均距离从回归线不大于max1的轮廓会被选择。
此外,还有另外两个参数:
- min2:用于定义标准差的下限阈值。只有那些距离的标准差不小于min2的轮廓会被选择。
- 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"特征进行筛选时。以下是解释:
-
Before contour can be filtered by SelectContoursXld according to "direction" or "curvature"(在使用"direction"或"curvature"特征进行选择之前):在你尝试使用"SelectContoursXld"操作基于"direction"(方向)或"curvature"(曲率)特征来筛选轮廓之前,有一个重要的前提条件。
-
the parameters of the regression lines to the contours must be calculated with RegressContoursXld(必须先使用RegressContoursXld计算轮廓的回归线参数):在进行"direction"或"curvature"筛选之前,你需要首先使用"RegressContoursXld"操作来计算轮廓的回归线参数。这是因为"direction"和"curvature"特征需要回归线的信息来进行计算和筛选。
-
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来计算回归线参数。
-
If a different mode should be used, RegressContoursXld must be called explicitly(如果需要使用不同的模式,必须显式调用RegressContoursXld):如果你需要使用"RegressContoursXld"操作的不同参数模式来计算回归线参数,你需要显式地调用该操作并提供所需的参数。
总之,这段文档提醒你在使用"SelectContoursXld"来根据"direction"或"curvature"特征筛选轮廓之前,确保先进行回归线参数的计算,否则系统会自动进行默认计算。如果需要不同的计算方式,你需要手动调用"RegressContoursXld"并提供自定义参数。
总之,引出了一个 regress_contours_xld 这个算子,那这个算子具体怎么用?点赞过2,更新下一篇。