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各模式工作机制
-
字符模式(
'character'
):- 适用于文本字符的排序(OCR场景),模拟人类的阅读顺序。
- 当
RowOrCol
为'row'
时,横排文本按从左到右、从上到下的顺序排序;当RowOrCol
为'column'
时,竖排文本按从上到下、从左到右的顺序排序。 - 可以通过
SortMode
附加一个数值(默认为15),表示允许的行或列之间最大重叠百分比。该值用来控制分行或分列的精度。当区域之间的重叠比例小于指定值时,被认为是不同行(或列);当区域之间的重叠比例大于指定值时,被认为是同一行(或列)。
-
基于行的排序(
'first_point'
和'last_point'
):'first_point'
:使用区域第一行中列坐标最小的点进行排序。'last_point'
:使用区域最后一行中列坐标最大的点进行排序。- 这些模式通常用于具有几何特征的物体分析,确保按照一定的方向排序。
-
外接矩形的角点排序:
'upper_left'
:以外接矩形的左上角点排序。'upper_right'
:以外接矩形的右上角点排序。'lower_left'
:以外接矩形的左下角点排序。'lower_right'
:以外接矩形的右下角点排序。- 这些模式用于分析物体的边缘位置,适合视觉检测中对外接矩形位置的对比和排序需求。
四、应用场景
-
光学字符识别(OCR):
- 在OCR场景中,字符识别的关键在于正确排序,尤其是横排或竖排文本。
sort_region
可以基于字符的阅读顺序,将检测到的字符区域排序为从左到右、从上到下(横排)或从上到下、从左到右(竖排)。
- 在OCR场景中,字符识别的关键在于正确排序,尤其是横排或竖排文本。
-
物体位置检测与分类:
- 在目标检测中,可能需要按照物体在图像中的位置进行排序。例如,按照物体从左到右的顺序排列,用于生产线的加工顺序安排。
-
行列对齐分析:
- 在多行多列的表格分析中,可使用
sort_region
按照表格的行列顺序排序每个单元格的区域。
- 在多行多列的表格分析中,可使用
三 upper_left:先比较行坐标,若行坐标相同,则比较列坐标
在HALCON中,sort_region
算子的'upper_left'
参数是SortMode
(排序模式)的一种选项,用于根据区域外接矩形的左上角坐标对区域进行排序。它的核心作用是为需要按空间位置(尤其是左上角位置)排列的区域集合提供一种直观、明确的排序依据,适用于物体定位、行列对齐、区域分组等场景。以下是详细解析:
一、'upper_left'
参数的作用机制
-
排序依据:
- 当
SortMode
设置为'upper_left'
时,sort_region
会提取每个区域的外接矩形(即能完全包围该区域的最小矩形),并计算其左上角点的坐标(行坐标和列坐标)。 - 排序时,先比较所有区域左上角点的行坐标(即垂直方向位置),行坐标较小的区域排在前面;若行坐标相同,则比较列坐标(即水平方向位置),列坐标较小的区域排在前面。
- 当
-
排序顺序:
- 通过
Order
参数控制升序或降序:'true'
(默认):按左上角坐标升序排列(从图像左上角到右下角)。'false'
:按左上角坐标降序排列(从图像右下角到左上角)。
- 通过
二、'upper_left'
参数的典型应用场景
-
物体定位与排序:
- 在生产线检测中,若需按物体在图像中的位置顺序处理(如从左到右、从上到下),可使用
'upper_left'
结合Order='true'
和RowOrCol='row'
,将物体区域排序为符合加工顺序的列表。 - 示例:检测电路板上的元件,按元件在板上的物理位置排序,以便后续逐个检测或装配。
- 在生产线检测中,若需按物体在图像中的位置顺序处理(如从左到右、从上到下),可使用
-
行列对齐分析:
- 在表格或网格结构中,若需将单元格区域按行列顺序排列,
'upper_left'
可确保同一行的区域按列坐标排序,同一列的区域按行坐标排序。 - 示例:识别表格中的文字区域,先按行分组,再对每行内的区域按列排序。
- 在表格或网格结构中,若需将单元格区域按行列顺序排列,
-
区域分组与聚类:
- 结合其他算子(如
distance_transform
或cluster_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)