Halcon之区域排序:sort_region

Halcon之区域排序:sort_region

一 按文本阅读顺序进行排序

在这里插入图片描述

read_image (Image20250707124322954, 'C:/Users/Administrator/Desktop/Image.bmp')

*** 定位
rgb1_to_gray (Image20250707124322954, GrayImage)
threshold (GrayImage, Region, 130, 255)
fill_up (Region, RegionFillUp)
connection (RegionFillUp, ConnectedRegions)
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
*** 

reduce_domain (GrayImage, SelectedRegions, ImageReduced)

threshold (ImageReduced, Region1, 0, 130)

connection (Region1, ConnectedRegions1)

select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 1000, 2000)



* 排序:水平阅读
sort_region (SelectedRegions1, SortedRegions, 'character', 'true', 'row')

select_obj (SortedRegions, ObjectSelected1, 1)
select_obj (SortedRegions, ObjectSelected2, 2)
select_obj (SortedRegions, ObjectSelected1, 3)
select_obj (SortedRegions, ObjectSelected2, 4)

* 排序:垂直阅读
sort_region (SelectedRegions1, SortedRegions, 'character', 'true', 'column')

select_obj (SortedRegions, ObjectSelected1, 1)
select_obj (SortedRegions, ObjectSelected2, 2)
select_obj (SortedRegions, ObjectSelected3, 3)
select_obj (SortedRegions, ObjectSelected4, 4)

在这里插入图片描述

二 算子描述

在HALCON机器视觉库中,sort_region算子是一个用于对区域集合(Region Array)进行排序的重要工具,它根据区域的相对位置进行排序,以满足不同应用场景中的需求,如光学字符识别(OCR)、物体检测及排列分析等。以下是对sort_region算子的详细讲解:

一、算子功能概述

sort_region算子能够根据区域的某一特征(如位置、大小)进行升序或降序排序。它支持多种排序方式,包括基于几何位置、外接矩形角点和字符排列的特殊模式。

二、输入与输出参数

  • 输入参数

    • Regions:需要排序的区域集合。
  • 输出参数

    • SortedRegions:排序后的区域集合。
  • 核心参数

    • SortMode:排序方式,决定了区域的排序依据。支持以下几种模式:

      • 'character':字符模式,模拟文本的阅读顺序(按行优先或列优先)。
      • 'first_point':按区域第一行中列坐标最小的点排序。
      • 'last_point':按区域最后一行中列坐标最大的点排序。
      • 'upper_left':按区域外接矩形的左上角点排序。
      • 'upper_right':按区域外接矩形的右上角点排序。
      • 'lower_left':按区域外接矩形的左下角点排序。
      • 'lower_right':按区域外接矩形的右下角点排序。
    • Order:排序顺序,指定排序的方向。'true'表示升序(默认),'false'表示降序。

    • RowOrCol:排序维度,定义排序时优先考虑的坐标。'row'表示按行优先(先比较行坐标,再比较列坐标),'column'表示按列优先(先比较列坐标,再比较行坐标)。

三、SortMode各模式工作机制

  1. 字符模式('character'

    • 适用于文本字符的排序(OCR场景),模拟人类的阅读顺序。
    • RowOrCol'row'时,横排文本按从左到右、从上到下的顺序排序;当RowOrCol'column'时,竖排文本按从上到下、从左到右的顺序排序。
    • 可以通过SortMode附加一个数值(默认为15),表示允许的行或列之间最大重叠百分比。该值用来控制分行或分列的精度。当区域之间的重叠比例小于指定值时,被认为是不同行(或列);当区域之间的重叠比例大于指定值时,被认为是同一行(或列)。
  2. 基于行的排序('first_point''last_point'

    • 'first_point':使用区域第一行中列坐标最小的点进行排序。
    • 'last_point':使用区域最后一行中列坐标最大的点进行排序。
    • 这些模式通常用于具有几何特征的物体分析,确保按照一定的方向排序。
  3. 外接矩形的角点排序

    • 'upper_left':以外接矩形的左上角点排序。
    • 'upper_right':以外接矩形的右上角点排序。
    • 'lower_left':以外接矩形的左下角点排序。
    • 'lower_right':以外接矩形的右下角点排序。
    • 这些模式用于分析物体的边缘位置,适合视觉检测中对外接矩形位置的对比和排序需求。

四、应用场景

  1. 光学字符识别(OCR)

    • 在OCR场景中,字符识别的关键在于正确排序,尤其是横排或竖排文本。sort_region可以基于字符的阅读顺序,将检测到的字符区域排序为从左到右、从上到下(横排)或从上到下、从左到右(竖排)。
  2. 物体位置检测与分类

    • 在目标检测中,可能需要按照物体在图像中的位置进行排序。例如,按照物体从左到右的顺序排列,用于生产线的加工顺序安排。
  3. 行列对齐分析

    • 在多行多列的表格分析中,可使用sort_region按照表格的行列顺序排序每个单元格的区域。

三 upper_left:先比较行坐标,若行坐标相同,则比较列坐标

在HALCON中,sort_region算子的'upper_left'参数是SortMode(排序模式)的一种选项,用于根据区域外接矩形的左上角坐标对区域进行排序。它的核心作用是为需要按空间位置(尤其是左上角位置)排列的区域集合提供一种直观、明确的排序依据,适用于物体定位、行列对齐、区域分组等场景。以下是详细解析:

一、'upper_left'参数的作用机制

  1. 排序依据

    • SortMode设置为'upper_left'时,sort_region会提取每个区域的外接矩形(即能完全包围该区域的最小矩形),并计算其左上角点的坐标(行坐标和列坐标)。
    • 排序时,先比较所有区域左上角点的行坐标(即垂直方向位置),行坐标较小的区域排在前面;若行坐标相同,则比较列坐标(即水平方向位置),列坐标较小的区域排在前面。
  2. 排序顺序

    • 通过Order参数控制升序或降序:
      • 'true'(默认):按左上角坐标升序排列(从图像左上角到右下角)。
      • 'false':按左上角坐标降序排列(从图像右下角到左上角)。

二、'upper_left'参数的典型应用场景

  1. 物体定位与排序

    • 在生产线检测中,若需按物体在图像中的位置顺序处理(如从左到右、从上到下),可使用'upper_left'结合Order='true'RowOrCol='row',将物体区域排序为符合加工顺序的列表。
    • 示例:检测电路板上的元件,按元件在板上的物理位置排序,以便后续逐个检测或装配。
  2. 行列对齐分析

    • 在表格或网格结构中,若需将单元格区域按行列顺序排列,'upper_left'可确保同一行的区域按列坐标排序,同一列的区域按行坐标排序。
    • 示例:识别表格中的文字区域,先按行分组,再对每行内的区域按列排序。
  3. 区域分组与聚类

    • 结合其他算子(如distance_transformcluster_contours_xld),'upper_left'可用于对空间上相近的区域进行分组或聚类后的排序。
* 生成随机区域(模拟检测到的物体)
gen_region_points(Region1, 10, 10)
gen_region_points(Region2, 20, 30)
gen_region_points(Region3, 10, 50)
concat_obj(Region1, Region2, Regions)
concat_obj(Regions, Region3, Regions)

* 按'upper_left'排序
sort_region(Regions, SortedRegions, 'upper_left', 'true', 'row')

* 显示结果
dev_display(SortedRegions)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值