Halcon图像分割-分水岭算法

提示:文章参考了网络上其他作者的文章,以及相关书籍,如有侵权,请联系作者。


前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、watersheds算子

       分水岭算法是一种典型的基于边缘的图像分割算法,通过寻找区域之间的分界线,对图像进行分割。“分水岭”这个名字与一种地貌特点有关,它的思想是,把图像的灰度看作一张地形图,其中像素的灰度表示该地点的高度。灰度值低的区域是低地,灰度值越高,地势越高。
       低地聚集的地方如同一块盆地,如果模拟向整片区域注水,那么每块盆地将成为一个单独的积水区,即图像上的分割区域,盆地与盆地之间的边界就是区域的边界。随着注水的量越来越多,盆地的积水面积会不断扩大,边界区域则会越来越小,最后形成的分割边界就是分水岭。
       分水岭算法能较好地适用于复杂背景下的目标分割,特别是具有蜂窝状结构的画面的内容分割。Halcon 中使用watersheds 算子提取图像的分水岭。该算子的原型如下:
       watersheds( Image : Basins, Watersheds : : )
       其中各参数的含义如下。
       1)、参数1:Image为输入的图像,一般为单通道图像。这里要注意,因为盆地一般指的是灰度值低的区域,所以如果前景目标比较亮而背景比较暗,可以在导入图像后使用 invert_image 算子将图像颜色进行反转。
       2)、参数2:Basins为输出的盆地区域。
       3)、参数3:Watersheds为输出的分水岭区域。一般一幅输入图像对应一个分水岭区域,而输出的Basins区域则是多个区域的集合。
       注意:如果图像上包含过多的精细区域或者噪点,输出的区域数量将非常庞大,并影响算法的速度。

二、watersheds_threshold算子

       除了 watersheds 算子外,也可以使用watersheds_threshold算子进行分水岭分割。二者的区别在于,后者比前者多了一步操作,即在得到初步的分水岭分割结果之后,将灰度小于阈值的分水岭合并。具体来说,假设分水岭的最小灰度为Wmin,分水岭两侧的“洼地”区域的最小灰度分别为B1、B2,如果max{(Wmin-B1,),(Wmin-B2,)}的值小于阈值,则将这两个“洼地”区域合并,分水岭消失。通过这样的阈值处理,符合灰度阈值条件的灰度“洼地”区域即被提取出来。该算子的原型如下:
       watersheds_threshold(Image : Basins:Threshold:)
       其中各参数的含义如下。
       1)、参数1:Image为输入的图像,一般为单通道图像。如果前景目标比较亮而背景比较暗,可以在导入图像后使用invert_image 算子将图像颜色进行反转。
       2)、参数2:Basins为输出的盆地区域。
       3)、参数3:Threshold为设置的灰度阈值。建议该值不要超过原图的最大灰度,否则将无法提取出分水岭,图像整体将作为一个区域被提取出来。
       这里以一个实际场景图片为例,介绍图像分水岭算法的算子与应用。案例的图像如下图所示,其中:左图为输入的原始图像,中图为使用Watersheds算子进行分割的结果,右图为提取出的缺陷区域,并以不同的颜色对分割出的区域进行了区分。
在这里插入图片描述
       使用分水岭算法进行分割的代码如下:

*输入待检测的木材图像
read_image (Image, 'data/woodboard')
*将原始图转化为灰度图,便于后续的平滑处理
rgb1_to_gray (Image, GrayImage)
*对单通道图像进行高斯平滑处理,以去除噪声
gauss_filter (GrayImage, ImageGauss,11)
*对高斯平滑后的图像进行分水岭处理与阈值分割,提取出盆地区域
watersheds (ImageGauss, Basinsl, Watersheds)
watersheds_ threshold(ImageGauss, Basins, 50)

       经过上述步骤,即可得到图像中的灰度“洼地”区域,结合图像的内容,这部分区域即为木材缺陷的局部区域。


参考文献

1、Halcon机器视觉算法原理与编程实战/杨青编著.北京大学出版社

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Halcon中的分水岭算子是指watersheds算子和watersheds_threshold算子。 watersheds算子是用于图像分割的一种算法,它通过寻找图像中的极小值和极大值来实现分割。算子的原型是watersheds(Image: Basins: Watersheds),其中参数Image是输入的图像,Basins是输出的盆地区域,Watersheds是输出的分水岭图像。 而watersheds_threshold算子是在watersheds算子的基础上进行了自定义的阈值处理。它在得到初步的分水岭分割结果之后,将灰度小于阈值的分水岭合并。具体来说,它会根据设置的灰度阈值,将符合条件的灰度“洼地”区域提取出来。该算子的原型是watersheds_threshold(Image: Basins: Threshold),其中参数Image是输入的图像,Basins是输出的盆地区域,Threshold是设置的灰度阈值。 通过使用这两个算子,可以实现对图像进行准确的分割,并得到所需的盆地区域。可以根据具体的需求选择使用watersheds算子还是watersheds_threshold算子。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Halcon图像分割-分水岭算法](https://blog.csdn.net/yuanrongyouzhi/article/details/124445952)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Halcon 编程算子详解PDF](https://download.csdn.net/download/qq_36081078/10993025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值