1-Halcon--select_shape函数功能(用于筛选区域(Region))

select_shape 是 Halcon 中用于筛选区域(Region)的关键算子,它基于区域的形状特征(如面积、长宽比、圆度等)对输入区域进行过滤。其参数灵活,使用广泛,但对于初学者可能较难掌握。以下是其参数详解及使用技巧:


函数原型

select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : )

参数解析

1. Regions(输入)
  • 类型: 区域集合(Region)
  • 说明: 输入的需要筛选的区域集合。需通过其他图像处理步骤(如阈值分割、形态学操作等)提前生成。

2. SelectedRegions(输出)
  • 类型: 区域集合
  • 说明: 符合筛选条件的输出区域集合。

3. Features(关键参数)
  • 类型: 字符串或字符串数组
  • 说明: 指定基于哪些形状特征进行筛选。Halcon 提供超过60种形状特征,以下为常见关键特征:
特征名含义典型范围
'area'区域面积(像素数量)≥ 0
'width'区域宽度(基于最小外接矩形)≥ 0
'height'区域高度(基于最小外接矩形)≥ 0
'ratio'宽度与高度的比值(width/height)≥ 0
'compactness'紧凑度(周长² / (4π*area)),圆=1≥ 1(越大越不圆)
'circularity'圆度(2D 区域接近圆形的程度)0(不圆)~1(完美圆)
'rectangularity'矩形度(区域面积 / 最小外接矩形面积)0~1
'contlength'区域轮廓的周长≥ 0
'convexity'凸性(区域面积 / 凸包面积)0~1
'num_holes'区域中孔洞的数量≥ 0

4. Operation(逻辑操作)
  • 类型: 字符串
  • 说明: 指定筛选条件的逻辑关系。支持以下操作符:
    • 'and':所有特征条件必须同时满足(默认)。
    • 'or':满足任一特征条件即可。
    • 其他复合逻辑(如 'xor' 根据版本可能支持)。

5. Min / Max(阈值范围)
  • 类型: 数值或数值数组
  • 说明: 设定每个特征的阈值范围。若只设定一个值,则另一界限自动取极值(如 Max=infMin=-inf)。
    • 适用示例:
      • Features='area', Min=100, Max=1000 → 选择面积在 100~1000 像素的区域。
      • Features=['area','circularity'], Min=[500,0.8], Max=[5000,1.0] → 面积 ≥500 且 ≤5000,且圆度 ≥0.8。

使用技巧

1. 多特征组合筛选
  • 可同时指定多个特征,例如筛选“面积大且接近圆形”的区域:
    select_shape(Regions, Selected, ['area','circularity'], 'and', [500,0.8], [5000,1.0])
    
2. 批量操作与优先级
  • 特征顺序无关Features 参数的特征顺序不影响筛选结果。
  • 逻辑优先级:使用 'or' 时建议谨慎,避免区域重复选中。
3. 动态阈值调整
  • 若对特征范围不确定,可通过算子 smallest_rectangle1area_center 等预先计算特征的统计值,再动态设置 Min/Max
4. 常见问题
  • 筛选结果为空:检查是否阈值范围过窄或逻辑条件冲突。
  • 特征取值范围异常:如 'circularity' 应为 0~1,超过范围将无效。

示例代码

案例1:筛选面积大于1000的圆形区域
* 分割得到初始区域
threshold(Image, Regions, 100, 255)
connection(Regions, ConnectedRegions)

* 筛选面积≥1000且圆度≥0.8的区域
select_shape(ConnectedRegions, Selected, ['area','circularity'], 'and', [1000,0.8], [999999,1.0])
案例2:过滤长宽比异常的矩形
* 筛选矩形区域,排除过于狭长的情况(长宽比在0.5~2之间)
select_shape(Regions, GoodRects, 'ratio', 'and', 0.5, 2.0)

注意事项

  • 特征依赖性:部分特征需基于特定区域属性(如 'convexity' 需要计算凸包)。
  • 效率优化:当处理大型区域集合时,优先筛选“廉价特征”(如面积)以提高速度。
  • 复合逻辑限制:Halcon 不支持自定义逻辑表达式(如 (A AND B) OR C),需多次调用 select_shape 组合实现。

通过灵活配置 Features 和阈值,select_shape 可以高效处理复杂形状过滤任务。建议结合 Halcon 的 features 工具(获取区域的具体特征值)调试参数范围。

Halcon 的 select_shape 支持的形状特征(Features)非常丰富,实际应用中包含近百种特征参数。由于篇幅限制,上述回答仅列举了部分常用特征。以下将系统分类并全面补充所有关键特征,同时标注其数学定义和应用场景,助您彻底掌握。


Halcon select_shapeFeatures 参数完整分类及详解

1. 基础几何特征

特征名数学定义/描述范围/类型应用场景
'area'区域像素数量≥ 0 的整数筛选大小符合目标的区域
'width'最小外接矩形的宽度≥ 0,浮点数排除过宽或过窄的物体
'height'最小外接矩形的高度≥ 0,浮点数筛选特定高度范围的物体
'row'区域重心行坐标(Y坐标)图像坐标系内值根据位置筛选区域
'column'区域重心列坐标(X坐标)图像坐标系内值同上
'row1', 'column1', 'row2', 'column2'最小外接矩形的左上角(row1, column1) 和右下角(row2, column2)像素坐标定位物体的包围框位置

2. 形态与轮廓特征

特征名数学定义/描述范围/类型应用场景
'compactness'( \text{Compactness} = \frac{\text{Perimeter}^2}{4\pi \times \text{Area}} )≥1(圆为1,值越大越不圆)区分圆形与其他形状
'circularity'( \text{Circularity} = \frac{4\pi \times \text{Area}}{\text{Perimeter}^2} )0(不圆)~1(完美圆)高精度圆检测(比紧凑度更直观)
'contlength'区域轮廓总长度≥0,浮点数筛选边缘复杂的物体
'convexity'( \text{Convexity} = \frac{\text{Area}}{\text{Convex Hull Area}} )0~1(1为完全凸形)检测凹痕或缺口(如缺陷检测)
'rectangularity'( \text{Rectangularity} = \frac{\text{Area}}{\text{Width} \times \text{Height}} )0~1(矩形为1)筛选矩形或方形物体
'num_sides'多边形近似后的边数(需先调用 shape_trans 进行多边形逼近)≥3,整数识别规则多边形(如六角螺母)
'contarea'区域闭合轮廓内的面积≥0,整数区分空心和实心区域

3. 方向与对称性特征

特征名数学定义/描述范围/类型应用场景
'orientation'区域的主轴方向(指向最大惯量轴的角度)[-π/2, π/2] 弧度调整工件方向(如零件排序)
'anisometry'各向异性 = 主轴长度 / 短轴长度(等效椭圆的轴比)≥1(圆为1)检测拉伸形变(如椭圆度检测)
'bulkiness'( \text{Bulkiness} = \pi \times \frac{\text{Length1} \times \text{Length2}}{4 \times \text{Area}} )≥1 浮点数衡量区域“膨胀”程度
'structure_factor'结构因子(区域紧密度与面积平衡指标)复杂定义,参考手册综合形状复杂性分析

4. 矩与高阶统计特征

特征名数学定义/描述范围/类型应用场景
'moments_xx'二阶中心矩(用于计算协方差矩阵)浮点数形状的高阶统计描述
'moments_yy'同上浮点数同上
'moments_xy'同上浮点数同上
'ra'区域等效椭圆的半长轴长度(Length1)≥0,浮点数描述物体伸展程度
'rb'区域等效椭圆的半短轴长度(Length2)≥0,浮点数同上
'phi'等效椭圆的取向角度(同 'orientation'[-π/2, π/2] 弧度替代 'orientation',但需注意椭圆的物理意义

5. 孔洞与拓扑特征

特征名数学定义/描述范围/类型应用场景
'num_holes'区域内部孔洞的数量≥0,整数检查零件是否有缺失(如孔洞数量异常)
'area_holes'孔洞的总面积≥0,整数分析空心区域的比例
'euler_number'欧拉数 = 孔洞数 - 连接数 + 1整数,可正可负拓扑结构分析(如验证网格完整性)

6. 投影特征

特征名数学定义/描述范围/类型应用场景
'proj_horizontal'区域在水平方向上的投影长度≥0,浮点数检测水平延伸的物体(如横杆)
'proj_vertical'区域在垂直方向上的投影长度≥0,浮点数检测垂直结构(如立柱)

高级应用技巧

1. 组合多条件筛选

用数组传入多个特征,通过 OperationMin/Max 数组实现复杂逻辑。例如,筛选 圆形、无孔洞且面积适中 的物体:

select_shape(Regions, Selected, ['circularity', 'num_holes', 'area'], 'and', [0.9, 0, 500], [1.0, 0, 2000])

2. 动态计算特征阈值

若特征范围未知,先用 area_centercircularity 等单特征算子提取样本值,再确定动态阈值:

* 计算面积均值,筛选中大型区域
area_center(Regions, Area, Row, Column)
mean := mean(Area)
select_shape(Regions, Selected, 'area', 'and', mean*0.5, mean*2)

3. 特征依赖关系

某些特征需要特定预处理:

  • 'num_sides':需先用 shape_trans 将区域转换为多边形。
  • 'euler_number':需确保区域已连通(无碎块)。

4. 注意特征计算开销

'moments_xx' 等高阶矩计算成本较高,建议先用基础特征(如面积)初步筛选,再应用高级特征。


完整代码示例:精密定位六角螺钉

* 分割并连接区域
read_image(Image, 'screws.png')
threshold(Image, Regions, 128, 255)
connection(Regions, ConnectedRegions)

* 转换为多边形以使用 `num_sides` 特征
shape_trans(ConnectedRegions, Polygons, 'convex')

* 筛选六边形(边数5.5~6.5)且凸性好的螺钉
select_shape(Polygons, Screws, ['num_sides', 'convexity'], 'and', [5.5, 0.95], [6.5, 1.0])

特征查找工具

使用 features 算子可输出区域的全部特征值,便于调试:

* 获取区域所有特征并显示
features(Regions, 'all', Features)
write_string('特征值:' + Features)

或通过 HDevelop 的工具菜单Inspect Features… 可视化分析区域特征分布。


通过合理选择特征及其组合,select_shape 可成为复杂视觉检测任务的强力工具。建议结合《Halcon 形状特征官方手册》深入学习每个特征的计算方法及适用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

观视界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值