分水岭,顾名思义由地貌中的视觉形态演变而来。我们用一种场景来说明,想象一个干涩得裂开的农田赶上下雨,最终淹没到只看得见稻苗。它的整个过程先是灌满地势低的土地裂缝然后慢慢淹没整块土地只剩看得到稻苗。

将上面的思想引入到图像区域的分割上,我们就很容易实现一种以“侵泡”式的图像分割,其基本思想是把图像看作测地学上的拓扑地貌,图像中的每一点像素的灰度值表示该点的海拔高度,高灰度值代表山脉,低灰度值代表盆地,每一个局部极小值及其影响区域称为积水盆地,而积水盆地的边界则形成分水岭。

首先看一个场景的例子:

倘若我想一次干脆的拿到绿色圈圈以及它内部的所有细节,使用平常的阈值分割的方式分割起来会比较复杂。

其实从灰度值的大小来区分,图中绿色的灰度值是大于其它颜色的灰度值,因此采用分水岭的思想很容易解决:

代码:

read_image (Image, 'C:/Users/斌/Desktop/分水岭算法的研究/无标题4.png')
watersheds_threshold (Image, Basins, 150)
reduce_domain (Image, Basins, ImageReduced)
dev_clear_window ()
dev_display (ImageReduced)

效果:

然后再用一个动图来说明分水岭的过程细节:

halcon中采用"分水岭算法解决粘合度高的物体切割"的示例:

代码及注释讲解:

*这个示例演示的是如何将粘合度高的物体通过分水岭算法的思想进行图像分割。dev_set_draw ('margin')
dev_set_colored (12)
read_image (Image, 'pellets')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
threshold (Image, Region, 105, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 20, 99999)
dev_display (Image)
dev_display (SelectedRegions)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* 计算输入区域的距离变换(它的作用是输出一副图像,这幅图像是每个点到这个region的距离分布图,并不是一个真正的图像。只是一个距离值的分布图而已)
distance_transform (SelectedRegions, DistanceImage, 'octagonal', 'true', 380, 350)
*转换图像的类型(将图像的数据类型转换成适合处理的图像类型)
convert_image_type (DistanceImage, DistanceImageByte, 'byte')
*反转图像(亮的变暗,暗的变亮)
invert_image (DistanceImageByte, DistanceImageInv)
*扩展灰度值(以改变灰度值的形式进行图像增强)
scale_image_max (DistanceImageInv, DistanceImageInvScaled)
*阈值分水岭
watersheds_threshold (DistanceImageInv, Basins, 5)
dev_display (DistanceImageInvScaled)
dev_display (Basins)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*
dev_display (Image)
dev_display (SelectedRegions)
dev_set_color ('blue')
dev_display (Basins)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* 计算两个区域的交集
intersection (Basins, SelectedRegions, SegmentedPellets)
dev_display (Image)
dev_set_colored (12)
dev_display (SegmentedPellets)
disp_continue_message (WindowHandle, 'black', 'true')

halcon中的分水岭算法讲解以及作用和实例相关推荐

  1. Halcon 中实现 Otsu 算法

    Halcon 中的全局阈值分割算子 binary_threshold 中,Method = 'max_separability' 指的就是Otsu法(最大类间方差法,有时也称之为大津算法).

  2. 机器学习中的K-means算法原理与R语言实例

    聚类是将相似对象归到同一个簇中的方法,这有点像全自动分类.簇内的对象越相似,聚类的效果越好.支持向量机.神经网络所讨论的分类问题都是有监督的学习方式,现在我们所介绍的聚类则是无监督的.其中,K均值(K ...

  3. Python中的If嵌套讲解(语法、实例、执行流程)

    If就是if条件语句,嵌套的意思可以理解为在生活当中有种玩具叫做俄罗斯套娃,这个套娃呢就是大的套娃里面有小的娃,小娃里面有更小的娃,就这样一层一层的套下去.在编程语言当中,if嵌套指代的意思是一个大的 ...

  4. python图像分割算法_Opencv(二)—图像分割之分水岭算法!

    做图像处理时,我们可能会遇到一个问题:我们只需要图片的一部分区域,如何把图片中的某部分区域提取出来 或者 图像想要的区域用某种颜色(与其它区域颜色不一致)标记起来 ,以上描述的问题在像处理领域称为 图 ...

  5. 分水岭算法解析[halcon]

    分水岭算法 分水岭算法是根据分水岭的构成来考虑图像的分割, 它是-种基于拓扑理论的数学形态学的分割方法. 首先, 把一幅图像看作起伏的地形, 图像的每像素灰度值作为这个地形的高度, 极小值是盆地, 极 ...

  6. <Halcon>分割粘连区域(分水岭算法)

    read_image (Image, 'F:/培训/Halcon培训/2.jpg') rgb1_to_gray (Image, GrayImage)*平滑图片去噪 mean_image (GrayIm ...

  7. Python OpenCV分水岭算法分割和提取重叠或有衔接的图像中的对象

    本文将介绍如何使用分水岭算法对触摸和重叠的图像中的对象进行分割和提取. 参考:https://www.pyimagesearch.com/2015/11/02/watershed-opencv/ 分水 ...

  8. JAVA中希尔排序去的讲解_java 中基本算法之希尔排序的实例详解

    java 中基本算法之希尔排序的实例详解 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shel ...

  9. Learning to Rank 中Listwise关于ListNet算法讲解及实现

     [学习排序] Learning to Rank 中Listwise关于ListNet算法讲解及实现             版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习, ...

最新文章

  1. python如何定义一个简单的栈
  2. redis启动异常处理一例
  3. Linux编程简介——动态链接库
  4. Tomcat中配置MySQL数据库连接池
  5. Could not find a version that satisfies the requirement requests (from version : )
  6. IIS问题解决之——无法访问数据库
  7. django1.5 连接mysql_django1.5.5使用mysql
  8. python变量名区分大小写_python变量名要不要区分大小写
  9. Docker : 在宿主机查看docker使用cpu、内存、网络、io情况
  10. Leslie 模型预测
  11. 免费下载收费音乐教程,亲测有效
  12. 目前主要的网络试衣系统
  13. iOS和安卓各自优缺点和测试时区别
  14. greys在线问题诊断工具
  15. 关于创建电子邮件链接时如何发送邮件内容
  16. 大恒相机MER-302-56U3M在Linux环境下采集图像
  17. Linux系统的atop监控工具
  18. Nodejs和ajax不同,Nodejs和AJAX的区别是什么?
  19. Shiro反序列化漏洞【详细解析】
  20. 调研当前大学生的三个痛点

热门文章

  1. Android 11 wifi adb 连接错误 “Unable to start pairing client.“
  2. 小丁带你走进git世界一-git简单配置
  3. WordPress XMLRPC安全漏洞
  4. ant design vue 实现手机号 身份证 中文校验 邮箱校验
  5. 微信内分享网页自定义标题,图片,描述
  6. 第三章第二十四题(游戏:抽牌)(Game: pick a card)
  7. 普通人除了打工,究竟如何才能赚到钱?
  8. 紫光集团赵伟国:拒绝资本高手标签 做好科技产业重炮手
  9. python 开机自动切换必应壁纸
  10. 华为od77 python最大消费金额