区域的算子,初学者最好是每个都试试,这不仅是个加强映像问题,而且是了解Halcon能力的过程,以及提高工程实践效率问题。本篇介绍几个在数值图像分析中,较为有用的区域算子。请学友们共享!
填充区域之间的间隙或拆分重叠区域。ForbiddenArea是不参与运算(保留)的区域。

- read_image(Image, 'F:/images/maps/manyRegs')
- rgb1_to_gray(Image,gray)
- get_image_size(Image, Width, Height)
- threshold(gray, Region, 0, 215)
- connection(Region, ConRegions)
- gen_empty_region(EmptyRegion)
- expand_region(ConRegions, EmptyRegion, RegionExpanded, 'maximal', 'image')
结果显示:
先将区域分成多元组区域。

将多元组的区域进行展开,铺满整个全图区域。

select_obj 将具有 Index 给出的索引(从 1 开始)的图标对象从图标输入对象元组 Objects 复制到输出对象 ObjectSelected。没有为区域和图像分配新的存储空间。相反,会创建包含对现有对象的引用的新对象。一个对象元组中的对象个数可以通过操作count_obj来查询。
如:取出第12个区域的个体,存入 ObjectSelected元组
select_obj (RegionExpanded, ObjectSelected,12)
find_neighbors 功能:搜寻直接邻域。
输出 RegionIndex1, RegionIndex2存放,ObjectSelected区域的所有近邻的序号对。
参考代码:
- read_image(Image, 'F:/images/maps/manyRegs')
- rgb1_to_gray(Image,gray)
- get_image_size(Image, Width, Height)
- threshold(gray, Region, 0, 215)
- connection(Region, ConRegions)
- gen_empty_region(EmptyRegion)
- expand_region(ConRegions, EmptyRegion, RegionExpanded, 'maximal', 'image')
-
- select_obj (RegionExpanded, ObjectSelected,1)
- find_neighbors (RegionExpanded, RegionExpanded, 3, RegionIndex1, RegionIndex2)
下面是一个官方手册上的例子,其结果是将所有区域的近邻提取出来。
- read_image (Image, 'fabrik')
- dev_close_window ()
- dev_open_window (0, 0, 512, 512, 'black', WindowID)
- dev_set_colored (6)
- regiongrowing (Image, Regions, 1, 1, 3, 200)
- gen_empty_region (Empty)
- expand_region (Regions, Empty, RegionExpanded, 'maximal', 'image')
- dev_clear_window ()
- select_obj (RegionExpanded, ObjectSelected, 19)
- find_neighbors (ObjectSelected, RegionExpanded, 1, RegionIndex1, RegionIndex2)
- select_obj (RegionExpanded, ObjectSelected, RegionIndex2)
- gen_empty_obj (NoObj)
- find_neighbors (NoObj, RegionExpanded, 1, RegionIndex1, RegionIndex2)
- shape_trans (RegionExpanded, RegionTrans, 'inner_center')
- area_center (RegionTrans, Area, Row, Column)
- stop ()
- dev_clear_window ()
- dev_set_colored (6)
- dev_display (RegionExpanded)
- dev_set_draw ('margin')
- dev_set_color ('black')
- dev_set_line_width (1)
- dev_display (RegionExpanded)
- dev_set_color ('white')
- dev_set_line_width (3)
- for i := 0 to |RegionIndex1| - 1 by 1
- disp_line (WindowID, Row[RegionIndex1[i] - 1], Column[RegionIndex1[i] - 1], Row[RegionIndex2[i] - 1], Column[RegionIndex2[i] - 1])
- endfor
参考结果:
