(四)动态阈值分割

一、基本概念

  基于局部阈值分割的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')

二、实例解析

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

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)

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


   

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

                           2023年10月2日晚

猜你喜欢

转载自blog.csdn.net/weixin_44463519/article/details/133501308
今日推荐