• (四)动态阈值分割


    一、基本概念

      基于局部阈值分割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日晚

  • 相关阅读:
    数据结构复习之——图算法
    k8s备份
    计算机组成原理(六)
    C++设计模式---外观模式
    诊所要使用微信预约系统,需准备哪些资料?
    安捷伦E9321A射频传感器
    自动化和数字化在 ERP 系统中意味着什么?
    低代码平台和无代码平台有什么区别
    Matlab图像处理-区域描述
    力扣 -- 518. 零钱兑换 II(完全背包问题)
  • 原文地址:https://blog.csdn.net/weixin_44463519/article/details/133501308