halcon 收集Region并带有一定的顺序(以收集有交集的Regon为例)
注意gen_empty_region不与concat_obj成对使用,而是gen_empty_obj与concat_obj成对使用。
例如想收集8个region,前者得到9个,第一个是那个被创建的空region。后者则正确。
concat_obj与union2相比,优点是有顺序观念。这个在需要添加自定义前后缀时很有用。
gen_empty_obj (RegionLabelIDs) *满足某个条件后 concat_obj (RegionLabelIDs, RegionSelected RegionLabelIDs)
或(有顺序需求时推荐上述方法)
gen_empty_region (EmptyRegion) *满足某个条件后 union2 (ObjectSelected, EmptyRegion, EmptyRegion)
【关于Region顺序】
concat_obj之后如果union1再connection,会打破之前的顺序。
如果是拆分的区域间进行交集,那么结果的顺序是第一个参数的顺序。RegionIntersectionSort的顺序与ConnectionRegions1一致
intersection (ConnectionRegions1, ConnectionRegions2, RegionIntersectionSort)
这个在自定义前后缀的需求中非常有用
【实战】
右图以左图的顺序进行排列(第三行的两个是颠倒的)
思路:左图右移,与右图交集,获取包含交集的右图Region(此时被重排)
move_region (ObjectSelectedCenterIn, RegionMovedRight, 0, MaxHeightLabelIDs*1.5) *注意带有顺序的区域放到前边(第1个参数) intersection (RegionMovedRight, ConnectedRegionsText, RegionIntersectionSort) shape_trans (RegionIntersectionSort, PointInRegion, 'inner_center') area_center (PointInRegion, AreaSort, RowSort, ColumnSort) tuple_int (RowSort, RowSort) tuple_int (ColumnSort, ColumnSort) IndexSort:=[] for idSort := 0 to |RowSort|-1 by 1 *获取包含质心点的区域索引 get_region_index (ConnectedRegionsText, RowSort[idSort], ColumnSort[idSort], IndexSortIn) if (IndexSortIn) IndexSort:=[IndexSort,IndexSortIn] endif endfor *ObjectSelectedSort的顺序与模型一致 select_obj (ConnectedRegionsText, ObjectSelectedSort, IndexSort)
参考 Halcon 获取有交集的其中一个区域,如何获取区域上的一个点