• (四)动态阈值分割


    一、基本概念

      基于局部阈值分割dyn_threshold()算子,适用于一些无法用单一灰度进行分割的情况,如背景比较复杂,有的部分比前景目标亮,或者有的部分比前景目标暗;又比如前景目标包含许多杂乱的灰度,从而无法是用全局阈值完成分割。
      此时,该算子可以利用邻域,通过局部灰度对比,找到一个合适的阈值进行分割。
      dyn_threshold算子的使用一般分为三步:
    (1)读取图像
    (2)使用平滑滤波器对原始图像进行适当平滑。
    (3)使用算子比较原始图像与均值图像处理后的图像局部像素差异,将差异大于设定的值的点提取出来。
      下面,会用代码实例来为大家演示。
    算子的解释:

    * 均值滤波平滑图像,30,30是横向与纵向的调整参数
    mean_image(GrayImage, ImageMean, 30, 30)
    * 最后一个参数有三种选择,分别是'dark' 'light' 'not_equal'
    * 30的意思就是,把某像素周围灰度差异超过30的挑出来。
    * 该值越小,提取出的信息越多,反之越大。
    dyn_threshold(GrayImage, ImageMean, RegionDynThresh, 30, 'not_equal')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二、实例解析

      原图是这样的:
    在这里插入图片描述
      这幅图片字体部分与前景部分灰度差异不大, 而且噪声干扰较大,因此使用局部阈值分割是比较合适的。
      使用均值滤波对图像进行平滑处理。
      再进行一个开运算,去除一下噪点,就可以把图像中的字体提取出来了。

    read_image (Text, 'Z:/学习studying——————学习/Halcon自己练习/data/text.jpg')
    rgb1_to_gray (Text, GrayImage)
    mult_image (GrayImage, GrayImage, ImageResult, 0.005, 0)
    mean_image (ImageResult, ImageMean, 50, 50)
    dyn_threshold (ImageResult, ImageMean, RegionDynThresh, 5, 'dark')
    opening_circle (RegionDynThresh, RegionOpening, 1.5)
    * 显示
    dev_clear_window ()
    dev_display (RegionOpening)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

      提取出来的图像如下所示:
    在这里插入图片描述


       

    加油,努力工作!!!出人头地。

                               2023年10月2日晚

  • 相关阅读:
    洛谷P2456 二进制方程
    VUE day_08(7.26)学子商城项目3
    通达OA系统,MYOA中OfficeRedis启动不了
    前端面试知识查漏补缺
    【UE5 Cesium】16-Cesium for Unreal 建立飞行跟踪器(1)
    智能家居2.0 - Matter 1.0 标准和受益者
    机器学习/深度学习模型的8个测试属性
    Spring -Spring之依赖注入源码解析(下)
    centos7.6安装 guacamole-server.1.4.0踩坑记录
    C++右值引用是一个左值引发的思考
  • 原文地址:https://blog.csdn.net/weixin_44463519/article/details/133501308