【图像分割】传统分割算法—分水岭算法(包含基于opencv的实例展示)

这篇具有很好参考价值的文章主要介绍了【图像分割】传统分割算法—分水岭算法(包含基于opencv的实例展示)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、分水岭算法原理

分水岭算法将图像看作地理学中的地形表面,图像中的高灰度值区域被看作山峰,低灰度值区域被看作山谷。进而实现图像的分割。

分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法

分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法

假如我们向“山谷”中注水,水位则会逐渐升高,然后不同山谷的水就会汇集在一起,如果我们阻止来自不同山谷的水汇集,我们需在水流可能交汇处建立堤坝,我们需要把图像分成两个不同的集合:集水盆地和分水岭线。我们建立的堤坝即是分水岭线,也即是对原图像的分割。
分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法
分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法

但是由于图像中的噪声或任何其他不规则性,这种方法会造成过度分割的结果。所以OpenCV实现了一种基于标记的分水岭算法,您可以指定哪些是所有要合并的山谷点,哪些不是。这是一种交互式图像分割。我们所做的是为我们知道的对象给出不同的标签。用一种颜色(或强度)标记我们确定是前景或对象的区域,用另一种颜色标记我们确定是背景或非对象的区域,最后用0标记我们不确定的区域。这就是我们的标记。然后应用分水岭算法。然后我们的标记将使用我们给出的标签进行更新,并且对象的边界将具有-1的值。

分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法
分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法
分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法

二、利用opencv实现分水岭算法的步骤:

  1. 找到图像前景的近似估计,可以使用Otsu的二值化。
  2. 通过形态学开运算实现原始图像O的去噪。
  3. 通过膨胀操作获取“确定背景B"。
  4. 利用距离变换函数cv2.distanceTransform()对图像进行处理,并对其结果进行阈值分割,得到”确定前景F“。
  5. 计算未知区域UN。UN=O-B-F
  6. 利用cv.connectedComponents()实现原始图像O的标注工作。
  7. cv.connectedComponents()的标注结果进行修正。
  8. 使用分水岭分割函数cv.watershed()完成对图像的分割。

三、算法实例

下面我们以下图相接触的硬币图像为例,分割获取硬币的范围。

分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法

1.获取硬币的近似估计

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('coins.png')
assert img is not None, "file could not be read, check with os.path.exists()"
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV+cv.THRESH_OTSU)

分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法

2.图像去噪

# noise removal
kernel = np.ones((3,3),np.uint8)
opening = cv.morphologyEx(thresh,cv.MORPH_OPEN,kernel, iterations = 2)

分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法

3.确定背景区域

# sure background area
sure_bg = cv.dilate(opening,kernel,iterations=3)

分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法

4.确定前景区域

# Finding sure foreground area
dist_transform = cv.distanceTransform(opening,cv.DIST_L2,5)
ret, sure_fg = cv.threshold(dist_transform,0.7*dist_transform.max(),255,0)

分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法

5.确定未知区域

# Finding unknown region
sure_fg = np.uint8(sure_fg)
unknown = cv.subtract(sure_bg,sure_fg)

分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法

6.实现图像标注以及修复处理

# Marker labelling
ret, markers = cv.connectedComponents(sure_fg)
# Add one to all labels so that sure background is not 0, but 1
markers = markers+1
# Now, mark the region of unknown with zero
markers[unknown==255] = 0

分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法

7.应用分水岭算法实现分割

markers = cv.watershed(img,markers)
# The boundary region will be marked with -1.
img[markers == -1] = [255,0,0]

分水岭算法csdn,OpenCV,# 语义分割,计算机视觉,opencv,算法

注意:以上方法中通过距离函数确定未知区域是针对物体相互接触的情况,对于物体独立,没有相互接触的情况,可以在膨胀操作后,进行腐蚀操作,然后前者减去后者,即得到未知区域:文章来源地址https://www.toymoban.com/news/detail-736480.html

sure_bg = cv2.dilate(opening, kernel, iterations=3)  # sure background area
sure_fg = cv2.erode(opening, kernel, iterations=3)  # sure foreground area
unknown = cv2.subtract(sure_bg, sure_fg)  # unknown area

到了这里,关于【图像分割】传统分割算法—分水岭算法(包含基于opencv的实例展示)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【OpenCV-Python】——单/多模板匹配&分水岭算法图像分割&图像金字塔&交互式前景提取

    目录 前言: 1、模板匹配 1.1 单目标匹配 1.2 多目标匹配 2、图像分割

    2024年02月07日
    浏览(36)
  • (数字图像处理MATLAB+Python)第十章图像分割-第四,五节:分水岭分割和综合案例

    分水岭分割 :图像处理中常用的一种分割方法,它基于图像中灰度或颜色的变化来划分不同的区域。分水岭分割算法的原理是基于地理学上的分水岭概念。将图像看作一个 地貌图 ,在图像中低洼的部分被看作水池,而高处则表示山脉。通过在图像中加入水并让其逐渐充满,

    2024年02月10日
    浏览(32)
  • 【实战篇:粘连物体分割——利用分水岭算法实现糖豆分割检测】

    通过pycharm安装时空门 问题: 讲一下分水岭算法的原理、实现步骤、以及应用。 回答: 分水岭算法是一种基于图像变换与分割的图像分析算法,主要用于图像分割。该算法可以解决很多图像处理领域的问题,例如医学图像分析、面部识别、数字水印等。下面将详细介绍分水岭

    2024年02月03日
    浏览(29)
  • 使用opencv c++完成图像中水果分割(分水岭、形态学操作、通道处理)单独标记每个水果

    2023.4.16日更新 1. 利用一阶矩增加了草莓等水果的质心绘制。 2. 绘制出了生长方向。 原为本人机器人视觉作业。参考文章http://t.csdn.cn/eQ0qp(目测是上一届的学长) 要求:在网络上寻找水果重叠在一起的图片、经过一系列图像处理,完成每个水果的分割,并单独标记出来。 导

    2024年02月04日
    浏览(58)
  • OpenCV——分水岭算法

      分水岭算法是一种图像分割常用的算法,可以有效地将图像中的目标从背景中分离出来。本文以OpenCV库中的分水岭算法为基础,介绍图像分割中的常用概念和算法原理,并结合实际案例展示分水岭算法的应用。   图像分割指的是将图像分成多个不同的区域或对象的过程

    2024年02月12日
    浏览(29)
  • 比特币上市首日:重要分水岭!

    作者:秦晋 如果按美国东部时间计算,今天是比特币现货ETF上市交易的第一天。也是具有历史纪念意义的一天。昨天,美国证券交易委员会正式批准11只比特币现货ETF进入证券交易所展开交易。这是加密金融与传统金融之间的一个重要「分水岭」时刻。 比特币现货ETF在开市交

    2024年01月16日
    浏览(32)
  • OPENCV实战分水岭法一

    2024年02月09日
    浏览(36)
  • [SDR] GNU Radio 系列教程(十四) —— GNU Radio 低阶到高阶用法的分水岭 ZMQ 的使用详解

    目录 1、前言 2、ZMQ 块的类型 3、ZMQ 块的使用 4、DEMO 4.1 同一台电脑上的两个流程图 4.2 不同电脑上的两个流程图 4.3 作为 REQ/REP 服务器的 Python 程序 4.4 作为 PUSH/PULL 服务器的 Python 程序 4.5 处理流程图数据的 Python 程序 参考链接 学会使用 GNU Radio 中的 ZMQ,是从低阶使用者向高阶

    2023年04月26日
    浏览(25)
  • 基于传统检测算法hog+svm实现图像多分类

    直接上效果图:    代码仓库和视频演示b站视频005期: 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 代码展示: 数据集在datasets文件夹下 运行01train.py即可训练 训练结束后会保存模型在本地 运行02pyqt.py会有一个可视化的界面,通过点击按钮加载图片识别

    2024年02月14日
    浏览(33)
  • 用OpenCV进行传统图像分割

    欢迎回来,我的图像处理爱好者们!本文我们将直接进入传统图像分析的新领域——图像分割,这是指将图像分成若干具有相似性质的区域的过程,从数学角度来看,图像分割是将图像划分成互不相交的区域的过程。 闲话少说,我们直接开始吧! 首先介绍的是基于阈值和基

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包