基础篇15-二值图像数学形态学(下)--形态学操作

数学形态学是一种应用数学工具,它可用于处理二值图像和灰度图像。本节将介绍与二值图像形态学处理相关的组合操作算子,包括开、闭、击中击不中,以及在此基础上实现的形态学操作。

目录

1.  形态学操作

1.1 边界提取

1.2 孔洞填充

1.3 剪枝

1.4 骨架化

1.5 细化

1.6 粗化

1.7 顶帽变换

1.8 底帽变换

1.9 联合顶帽-底帽变换

1.10 适合

2.  小结


1.  形态学操作

使用上一节介绍的形态学各种基本操作,可以衍生出许多高级形态学处理方法,如边界提取、剪枝、骨架化、细化、粗化、顶帽/底帽变换等。

基于形态学基本操作的高级处理方法在图像处理中具有广泛的应用,包括:

  • 边界提取:用于获取物体轮廓。
  • 剪枝:用于去除细小分支。
  • 顶帽变换底帽变换:用于提取细小亮区域或暗区域。

Halcon中提供的形态学算子,一部分来自,另一部分来自Legacy/Morphology/目录下

    1.1 边界提取

    Halcon使用boundary算子用于从区域中提取边界(轮廓)。它通过形态学操作实现,能够生成单像素宽度的边界。

    算子声明

    • boundary ( Region : RegionBorder : BoundaryType : )

    参数说明

    • Region(输入参数):输入的区域,表示需要提取边界的对象。
    • BoundaryRegion(输出参数):输出的边界区域,表示提取的边界。
    • BoundaryType(输入参数):边界提取的类型,支持以下选项:
      'inner':提取内部边界(默认值)。
      'outer':提取外部边界。
      'inner_filled':提取内部边界并填充内部区域。
      'outer_filled':提取外部边界并填充外部区域。

    实例代码

    * 读取图像
    read_image(Image, 'example.png')
    
    * 将图像转换为区域
    threshold(Image, Region, 128, 255)
    
    * 提取内部边界
    boundary(Region, InnerBoundary, 'inner')
    
    * 提取外部边界
    boundary(Region, OuterBoundary, 'outer')
    
    * 提取内部边界并填充内部区域
    boundary(Region, InnerFilledBoundary, 'inner_filled')
    
    * 提取外部边界并填充外部区域
    boundary(Region, OuterFilledBoundary, 'outer_filled')
    
    * 显示结果
    dev_display(Image)
    dev_set_color('red')
    dev_display(InnerBoundary)
    dev_set_color('green')
    dev_display(OuterBoundary)
    dev_set_color('blue')
    dev_display(InnerFilledBoundary)
    dev_set_color('yellow')
    dev_display(OuterFilledBoundary)

    使用说明

    • 'inner':提取区域的内部边界,即物体与背景的交界处。结果是一个单像素宽度的轮廓。
    • 'outer':提取区域的外部边界,即物体外部的轮廓。结果是一个单像素宽度的轮廓。
    • 'inner filled':提取内部边界,并填充边界内部的区域。结果是边界及其内部区域。
    • 'outer_filled':提取外部边界,并填充边界外部的区域。结果是边界及其外部区域。

    注意事项

    • boundary 算子只能处理区域(Region),不能直接处理图像(Image)。如果输入是图像,需要先通过 threshold、connection 等算子生成区域。
    • 提取的边界是单像素宽度的,适合用于精确的轮廓分析。
    • 如果需要更复杂的边界处理(如多像素宽度边界),可以结合 dilation 或 erosion 算子实现。

    1.2 孔洞填充

    Halcon使用fill_up算子和fill_up_shape算子填充区域或区域中的孔洞的算子。它们的主要区别在于填充的条件和方式。

    算子声明

    • fill_up ( Region : RegionFillUp : : )
    • fill_up_shape ( Region : RegionFillUp : Feature, Min, Max : )

    参数说明

    • Region: 输入区域。
    • RegionFillUp: 输出的填充区域。
    • Feature: 区域特征,用于选择填充条件。常见特征包括:'area': 区域面积。'width': 区域宽。
      'height': 区域高度。'compactness': 区域紧凑度。
    • Min/Max: 特征的最小值和最大值。

    使用方法

    • 条件填充:根据指定的区域特征(如面积、宽度等)填充符合条件的孔洞。
    • 选择特征和条件:根据需求设置特征(如面积)和范围(如最小值和最大值)。

    实例代码

    read_image(Image, 'example_image')  // 读取图像
    threshold(Image, Region, 128, 255) // 阈值分割,获取区域
    
    fill_up(Region, RegionFillUp)       // 填充区域中的孔洞
    fill_up_shape(Region, RegionFillUp, 'area', 'and', 100, 1000) // 填充面积在100到1000之间的孔洞

    两者比较

    • fill_up:简单填充所有孔洞。适用于不需要条件限制的填充任务。
    • fill_up_shape:根据区域特征(如面积、宽度等)有条件地填充孔洞。适用于需要精确控制的填充任务。

    1.3 剪枝

    Halcon使用pruning算和子用于对骨架图像进行修剪,去除多余的分支,保留主要结构。它常用于图像处理中的骨架化操作后处理。

    算子声明

    • pruning ( Region : RegionPrune : Length : )

    参数说明

    • Region(输入参数):输入的区域,表示需要进行剪枝的对象。
    • RegionPrune(输出参数):输出的剪枝结果。
    • Length(输入参数):被去除的剪枝的长度,默认值是2:

    实例代码

    * 读取图像
    read_image(Image, 'example_image.png')
    
    * 将图像转换为灰度图像
    rgb1_to_gray(Image, GrayImage)
    
    * 对图像进行二值化处理
    threshold(GrayImage, Region, 128, 255)
    
    * 对二值化后的区域进行骨架化处理
    morph_skeleton(Region, Skeleton)
    
    * 对骨架图像进行修剪,移除长度为10的分支
    pruning(Skeleton, RegionPruned, 10)
    
    * 显示原始骨架图像和修剪后的图像
    dev_display(Skeleton)
    dev_display(PrunedRegion)

    1.4 骨架化

    Halcon使用morph_skeleton算子计算区域的形态学骨架信息。形态学骨架是区域的一种简化表示,能够保留区域的拓扑结构和形状特征,同时去除冗余信息。它通常用于图像分析、形状识别等任务。

    算子声明

    • morph_skeleton ( Region : RegionSkeleton : : )

    参数说明

    • Region: 输入的区域(Region),通常是二值化后的区域。
    • Skeleton: 输出的形态学骨架区域。

    实例代码

    * 读取图像
    read_image(Image, 'example_image.png')
    
    * 将图像转换为灰度图像
    rgb1_to_gray(Image, GrayImage)
    
    * 对图像进行二值化处理
    threshold(GrayImage, Region, 128, 255)
    
    * 计算形态学骨架
    morph_skeleton(Region, Skeleton)
    
    * 显示原始区域和形态学骨架
    dev_display(Region)
    dev_display(Skeleton)

    注意事项

    • 输入区域:morph_skeleton的输入区域应为二值化后的区域(Region),即只有前景和背景的区域。
    • 输出骨架:输出的骨架区域是单像素宽度的线条,保留了原始区域的拓扑结构和形状特征。
    • 与skeleton算子的区别:skeleton算子计算的是拓扑骨架,适用于任何区域。morph_skeleton算子基于形态学操作,计算的是形态学骨架,通常更适用于规则的形状。

    1.5 细化

    Halcon使用thinning算子用于从区域中提取边界(轮廓)。它通过形态学操作实现,能够生成单像素宽度的边界,最终生成一个单像素宽度的线条,同时保留区域的连通性。

    算子声明

    • thinning ( Region, StructElement1, StructElement2 : RegionThin : Row, Column, Iterations : )

    参数说明

    • Region(输入参数):输入的区域,表示需要细化的对象。
    • StructElement1(输入参数):用于处理前景的结构元。
    • StructElement2(输入参数):用于处理背景的结构元。
    • RegionThin(输出参数):细化处理结果。
    • Row/Column(输入参数):参考点的水平/垂直坐标。
    • Iterations (输入参数):处理的迭代次数。

    除了thinning算子之外,还有两个算子用于特殊的细化操作,分别是thinning_golay和thinning_seq。

    1.6 粗化

    Halcon使用thickening算子用于从区域中提取边界(轮廓)。它通过形态学操作逐步增加区域的厚度,通常用于填充区域的空洞或增强区域的连通性。

    算子声明

    • thickening ( Region, StructElement1, StructElement2 : RegionThin : Row, Column, Iterations : )

    参数说明

    • Region(输入参数):输入的区域,表示需要粗化的对象。
    • StructElement1(输入参数):用于处理前景的结构元。
    • StructElement2(输入参数):用于处理背景的结构元。
    • RegionThin(输出参数):粗化处理结果。
    • Row/Column(输入参数):参考点的水平/垂直坐标。
    • Iterations (输入参数):处理的迭代次数。

    除了thickening算子之外,还有两个算子用于特殊的粗化操作,分别是thickening_golay和thickening_seq。

    1.7 顶帽变换

    Halcon使用bottom_hat算子用于顶帽变换。用于提取比结构元素小的亮区域。常用于图像分割和特征提取。

    算子声明

    • top_hat ( Region, StructElement : RegionTopHat : : )

    参数说明

    • Region(输入参数):输入的区域,用于进行顶帽的对象。
    • StructElement(输入参数):用于顶帽变换所需的结构元。
    • RegionTopHat(输出参数):输出的顶帽变换处理结果。

    1.8 底帽变换

    Halcon使用bottom_hat算子用于底帽变换。底帽变换是形态学操作的一种,用于提取图像中比结构元素小的暗区域。

    算子声明

    • bottom_hat ( Region, StructElement : RegionBottomHat : : )

    参数说明

    • Region(输入参数):输入的区域,用于进行底帽的对象。
    • StructElement(输入参数):用于底帽变换所需的结构元。
    • RegionBottomHat(输出参数):输出的底帽变换处理结果。

    1.9 联合顶帽-底帽变换

    Halcon使用morph_hat算子用于从区域中提取边界(轮廓)。它通过形态学操作实现,能够生成单像素宽度的边界。

    算子声明

    • morph_hat ( Region, StructElement : RegionMorphHat : : )

    参数说明

    • Region(输入参数):输入的区域,表示需要提取边界的对象。
    • StructElement(输入参数):用于顶帽/底帽变换所需的结构元。
    • RegionMorphHat (输出参数):输出的处理结果。

    1.10 适合

    Halcon中的fitting算子使用多个结构元依次进行开运算和闭运算。

    算子声明

    • fitting ( Region, StructElements : RegionFitted : : )

    参数说明

    • Region(输入参数):输入的区域。
    • StructElements(输入参数):形态学所用的结构元。
    • RegionFitted(输出参数):适合操作的结果。

    2.  小结

    本节介绍多种典型的形态学操作,包括细化、粗化、骨架化、边界提取、剪枝、以及顶帽变换和底帽变换。


    (初稿完成,最新更新2025-03-17)

    本专栏将介绍基于Halcon的各种传统经典的数字图像处理技术,所介绍内容基本与Gonzalez的教材基本保持一致。作为学习和实践DIP技术的入门教程。

    感谢大家的支持和浏览,本专栏将持续更新(每周至少更新1篇),每篇的篇幅控制在5000字左右,这样大家阅读起来也比较轻松。估计2025年上半年完成全部内容,欢迎加收藏。但由于到了假期,更新的速度不会很快。

    在专栏全部完成之前,所有内容将一直免费。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值