分水岭是用于分割的经典算法,即用于分离图像中的不同对象。

从用户定义的标记开始,分水岭算法将像素值视为局部地形(高程)。该算法从标记中泛洪盆地,直到归因于不同标记的盆地在分水岭线上相遇。在许多情况下,选择标记作为图像的局部最小值,然后从中淹没盆地。

在下面的示例中,两个重叠的圆要分开。为此,您需要计算一张图像,即与背景之间的距离。选择该距离的最大值(即,距离的反方向的最小值)作为标记,并且从此类标记开始的盆地泛滥将两个圆圈沿分水岭线分开。

分水岭算法(watershed)是一种比较基本的数学形态学分割算法,其基本思想是将灰度图像转换为梯度图像,将梯度值看作高低起伏的山岭,将局部极小值及其邻域看作一个“集水盆”。设想一个个“集水盆”中存在积水,且水位不断升高,淹没梯度较低的地方,当水漫过程停止后,就找出了分割线,图像也就可以被分割成几块连通区域。

import numpy as np
import matplotlib.pyplot as plt
from scipy import ndimage as ndifrom skimage.morphology import watershed
from skimage.feature import peak_local_max# Generate an initial image with two overlapping circles
x, y = np.indices((80, 80))
x1, y1, x2, y2 = 28, 28, 44, 52
r1, r2 = 16, 20
mask_circle1 = (x - x1)**2 + (y - y1)**2 < r1**2
mask_circle2 = (x - x2)**2 + (y - y2)**2 < r2**2
image = np.logical_or(mask_circle1, mask_circle2)# Now we want to separate the two objects in image
# Generate the markers as local maxima of the distance to the background
distance = ndi.distance_transform_edt(image)
local_maxi = peak_local_max(distance, indices=False, footprint=np.ones((3, 3)),labels=image)
markers = ndi.label(local_maxi)[0]
labels = watershed(-distance, markers, mask=image)fig, axes = plt.subplots(ncols=3, figsize=(9, 3), sharex=True, sharey=True)
ax = axes.ravel()ax[0].imshow(image, cmap=plt.cm.gray)
ax[0].set_title('Overlapping objects')
ax[1].imshow(-distance, cmap=plt.cm.gray)
ax[1].set_title('Distances')
ax[2].imshow(labels, cmap=plt.cm.nipy_spectral)
ax[2].set_title('Separated objects')for a in ax:a.set_axis_off()fig.tight_layout()
plt.show()

脚本的总运行时间:(0分钟0.217秒)

Download Python source code: plot_watershed.py

Download Jupyter notebook: plot_watershed.ipynb

Watershed segmentation 分水岭分割相关推荐

  1. OpenCV watershed分水岭分割算法的实例(附完整代码)

    OpenCV watershed分水岭分割算法的实例 OpenCV watershed分水岭分割算法的实例 OpenCV watershed分水岭分割算法的实例 #include <opencv ...

  2. OpenCV分水岭分割函数:watershed()介绍

    OpenCV分水岭分割函数:watershed()介绍

  3. 基于Matlab的标记分水岭分割算法(imreconstruct)

    1 综述 Separating touching objects in an image is one of the more difficult image processing operation ...

  4. [Medical Image Process] 3.4 Morphology Application—Watershed Algorithm 分水岭算法

    1. 分水岭原理 分水岭算法是一种基于拓扑理论的数学形态学分割理论,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域成为集水盆,而集 ...

  5. OpenCV分水岭分割算法2

    分水岭算法是用于分割的经典算法,在提取图像中粘连或重叠的对象时特别有用,例如上图中的硬币. 使用传统的图像处理方法,如阈值和轮廓检测,我们将无法从图像中提取每一个硬币,但通过利用分水岭算法,我们能够检 ...

  6. 基于标记的分水岭分割算法

    分水岭技术是一种众所周知的分割算法,特别适用于提取图片中的相邻或重叠对象.使用分水岭方法时,我们必须从用户定义的标记开始.这些标记可以使用点击手动定义,也可以使用阈值或形态学处理方法定义. 分水岭技术 ...

  7. 基于matlab山脊线,基于Matlab的标记分水岭分割算法

    lyqmath 1 综述 Separating touching objects in an image is one of the more difficult image processing o ...

  8. 做形态学方法的团队_图像分割实战-分水岭分割方法和GrabCut 算法

    1. 分水岭分割方法 它是依赖于形态学的,图像的灰度等级不一样,如果图像的灰度等级一样的情况下怎么人为的把它造成不一样?可以通过距离变换实现,这样它们的灰度值就有了阶梯状的变换.风水岭算法常见的有三种 ...

  9. 图像分割之分水岭分割算法

    基本思想 分水岭(watershed)是地形学中的一个经典概念,例如美国落基山脉分水岭,将美国分为两个区域,落在这个分水岭一边的雨滴,最终会到达大西洋,但是落在另一边的雨滴,最终回流到太平洋.为了提取 ...

最新文章

  1. 测试工程师工作流程概论
  2. spaugment--生成最小二乘增广矩阵
  3. JQuery 总结(7) index() data() each() 选项卡 表单验证
  4. encoder decoder模型_如何突破Decoder性能瓶颈?揭秘FasterTransformer的原理与应用
  5. python判断ip地址是否合法_python实现判断一个字符串是否是合法IP地址的示例
  6. 作业调度框架_Quartz
  7. zoj 3707 Calculate Prime S
  8. maven 结合idea入门
  9. 用iso镜像配置本地yum源
  10. 【codevs1001】舒适的路线,心累的冰茶几
  11. Python机器学习:多项式回归001什么是多项式回归
  12. 【java】Java 动态调试技术原理及实践
  13. 批量自动化配置Dell服务器idrac管理口IP
  14. Security+ 学习笔记48 攻击框架
  15. 谷粒学院(一)项目介绍
  16. TextWatcher使用
  17. 视频怎么加水印?这里有你想要的答案
  18. 菊风Juphoon 周波:5G消息+音视频,双风口下的融合发展
  19. IP变更导致redis集群不可用解决办法
  20. PMP考试 工作绩效数据 工作绩效信息 工作绩效报告 区别与联系

热门文章

  1. 查找并输出数组中出现频率最高的数字
  2. 非常实用的织梦dede所有标签调用方法大全 .
  3. 如何用织梦在本地搭建网站?
  4. 视频教程-JAVAEE真实课堂系列之javaScript全讲-云计算基础架构
  5. 第4次作业类测试代码+001+陈定国
  6. Android 沉浸状态栏
  7. 分布式机器学习——模型并行训练
  8. P2862 [USACO06JAN]Corral the Cows G
  9. RedisUtils和 RedisConfig代码封装如下
  10. 我们经常遇到网络不通的故障,列举出常见的故障原因,检查方法以及解决方案