• halcon之区域:多种区域(Region)特征(6)


    一、提要 

            区域的算子,初学者最好是每个都试试,这不仅是个加强映像问题,而且是了解Halcon能力的过程,以及提高工程实践效率问题。本篇介绍几个在数值图像分析中,较为有用的区域算子。请学友们共享!

    二、算子和实验

    2.1  区域的扩张

    • expand_region(Regions, ForbiddenArea : RegionExpanded : Iterations, Mode : )

    填充区域之间的间隙或拆分重叠区域。ForbiddenArea是不参与运算(保留)的区域。

    •  测试代码:
    1. read_image(Image, 'F:/images/maps/manyRegs')
    2. rgb1_to_gray(Image,gray)
    3. get_image_size(Image, Width, Height)
    4. threshold(gray, Region, 0, 215)
    5. connection(Region, ConRegions)
    6. gen_empty_region(EmptyRegion)
    7. expand_region(ConRegions, EmptyRegion, RegionExpanded, 'maximal', 'image')

    结果显示:

    先将区域分成多元组区域。

                     

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

     

    2.2 从区域元组中选中index个区域

            select_obj 将具有 Index 给出的索引(从 1 开始)的图标对象从图标输入对象元组 Objects 复制到输出对象 ObjectSelected。没有为区域和图像分配新的存储空间。相反,会创建包含对现有对象的引用的新对象。一个对象元组中的对象个数可以通过操作count_obj来查询。

    如:取出第12个区域的个体,存入 ObjectSelected元组

    select_obj (RegionExpanded, ObjectSelected,12)

    2.3  区域的近邻列出 

          find_neighbors  功能:搜寻直接邻域。

    • find_neighbors (ObjectSelected, RegionExpanded, 1, RegionIndex1, RegionIndex2)

    输出 RegionIndex1, RegionIndex2存放,ObjectSelected区域的所有近邻的序号对。

    参考代码:

    1. read_image(Image, 'F:/images/maps/manyRegs')
    2. rgb1_to_gray(Image,gray)
    3. get_image_size(Image, Width, Height)
    4. threshold(gray, Region, 0, 215)
    5. connection(Region, ConRegions)
    6. gen_empty_region(EmptyRegion)
    7. expand_region(ConRegions, EmptyRegion, RegionExpanded, 'maximal', 'image')
    8. select_obj (RegionExpanded, ObjectSelected,1)
    9. find_neighbors (RegionExpanded, RegionExpanded, 3, RegionIndex1, RegionIndex2)

     三、一个官方教程的例子

    下面是一个官方手册上的例子,其结果是将所有区域的近邻提取出来。

    1. read_image (Image, 'fabrik')
    2. dev_close_window ()
    3. dev_open_window (0, 0, 512, 512, 'black', WindowID)
    4. dev_set_colored (6)
    5. regiongrowing (Image, Regions, 1, 1, 3, 200)
    6. gen_empty_region (Empty)
    7. expand_region (Regions, Empty, RegionExpanded, 'maximal', 'image')
    8. dev_clear_window ()
    9. select_obj (RegionExpanded, ObjectSelected, 19)
    10. find_neighbors (ObjectSelected, RegionExpanded, 1, RegionIndex1, RegionIndex2)
    11. select_obj (RegionExpanded, ObjectSelected, RegionIndex2)
    12. gen_empty_obj (NoObj)
    13. find_neighbors (NoObj, RegionExpanded, 1, RegionIndex1, RegionIndex2)
    14. shape_trans (RegionExpanded, RegionTrans, 'inner_center')
    15. area_center (RegionTrans, Area, Row, Column)
    16. stop ()
    17. dev_clear_window ()
    18. dev_set_colored (6)
    19. dev_display (RegionExpanded)
    20. dev_set_draw ('margin')
    21. dev_set_color ('black')
    22. dev_set_line_width (1)
    23. dev_display (RegionExpanded)
    24. dev_set_color ('white')
    25. dev_set_line_width (3)
    26. for i := 0 to |RegionIndex1| - 1 by 1
    27. disp_line (WindowID, Row[RegionIndex1[i] - 1], Column[RegionIndex1[i] - 1], Row[RegionIndex2[i] - 1], Column[RegionIndex2[i] - 1])
    28. endfor

    参考结果:

     

  • 相关阅读:
    Vue3创建项目(一)新手教程
    条码软件中如何设置纵向条码
    函数模板和类模板实例介绍
    centos7篇---安装nvidia-docker
    【无标题】
    【JAVA】SpringMVC(下)—— SSM整合&异常处理器
    2022-03-02-Maven
    Flink重分区算子解析 - StreamPartitioner
    模拟器安装magisk
    ue5 lyra探索分析2 持续更新中
  • 原文地址:https://blog.csdn.net/gongdiwudu/article/details/125468378