美文网首页人工智能初见
OpenCV-Python学习(十七):图像分割与Watersh

OpenCV-Python学习(十七):图像分割与Watersh

作者: 星光下的胖子 | 来源:发表于2020-06-27 22:44 被阅读0次

...待更新...

理论

任何灰度图像都可以看作是一个地形表面,其中高强度表示山峰,低强度表示山谷。你开始用不同颜色的水(标签)填充每个孤立的山谷(局部最小值)。随着水位的上升,根据附近的山峰(坡度),来自不同山谷的水明显会开始合并,颜色也不同。为了避免这种情况,你要在水融合的地方建造屏障。你继续填满水,建造障碍,直到所有的山峰都在水下。然后你创建的屏障将返回你的分割结果。这就是Watershed背后的“思想”。
但是这种方法会由于图像中的噪声或其他不规则性而产生过度分割的结果。因此OpenCV实现了一个基于标记的分水岭算法,你可以指定哪些是要合并的山谷点,哪些不是。这是一个交互式的图像分割。我们所做的是给我们知道的对象赋予不同的标签。用一种颜色(或强度)标记我们确定为前景或对象的区域,用另一种颜色标记我们确定为背景或非对象的区域,最后用0标记我们不确定的区域。这是我们的标记。然后应用分水岭算法。然后我们的标记将使用我们给出的标签进行更新,对象的边界值将为-1。

代码

import cv2
import numpy

img = cv2.imread("image/water_coins.jpg")
cv2.imshow("img", img)

# 1.图像二值化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)

kernel = numpy.ones((3, 3), dtype=numpy.uint8)
# 2.噪声去除
open = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2)
# 3.确定背景区域
sure_bg = cv2.dilate(open, kernel, iterations=3)
# 4.寻找前景区域
dist_transform = cv2.distanceTransform(open, 1, 5)
ret, sure_fg = cv2.threshold(dist_transform, 0.5 * dist_transform.max(), 255, cv2.THRESH_BINARY)
# 5.找到未知区域
sure_fg = numpy.uint8(sure_fg)
unknow = cv2.subtract(sure_bg, sure_fg)

# 6.类别标记
ret, markers = cv2.connectedComponents(sure_fg)
# 为所有的标记加1,保证背景是0而不是1
markers = markers + 1
# 现在让所有的未知区域为0
markers[unknow == 255] = 0

# 7.分水岭算法
markers = cv2.watershed(img, markers)
img[markers == -1] = (0, 0, 255)

cv2.imshow("gray", gray)
cv2.imshow("thresh", thresh)
cv2.imshow("open", open)
cv2.imshow("sure_bg", sure_bg)
cv2.imshow("sure_fg", sure_fg)
cv2.imshow("unknow", unknow)
cv2.imshow("img_watershed", img)
cv2.waitKey(0)
cv2.destroyWindow()
分水岭算法.png

相关文章

  • OpenCV-Python学习(十七):图像分割与Watersh

    ...待更新... 理论 任何灰度图像都可以看作是一个地形表面,其中高强度表示山峰,低强度表示山谷。你开始用不同颜...

  • OpenCV-Python 图像分割与Watershed算法 |

    目标 在本章中, 我们将学习使用分水岭算法实现基于标记的图像分割 我们将看到:cv.watershed() 理论 ...

  • 医学图像处理与深度学习、图像分割

    人工智能在医学领域发展迅速,很大程度上得益于机器学习[https://www.zhihu.com/search?q...

  • 图割算法阅读笔记

    交互式图像分割 交互式图像分割指用户以某种交互手段指定图像的部分前景与部分背景,然后算法以用户的输入作为分割的约束...

  • 2018-04-21 语义分割Semantic segmenta

    按难易程度进行分类:从易到难*--->*** 一、易 1、图像语义分析学习(一):图像语义分割的概念与原理以及常用...

  • pyrMeanShiftFiltering

    图像分割学习笔记_1(opencv自带meanshift分割例子) Opencv均值漂移pyrMeanShiftF...

  • 2017.9.9

    清华实验室情况: ·高光谱图像超分、数据融合 ·目标检测与识别 ·图像修复与重构 ·图像理解与分割 ·图像信息表征...

  • 医学图像分割及应用

    截至目前,我们已经学习了很多关于图像分割的相关算法,就此,对图像的分割算法做以下总结: 基于边界驱动的分割边缘检测...

  • 图像分割

    图像分割 什么是图像分割? 图像分割就是预测图像中每一个像素所属的类别或者物体。图像分割有两个子问题,一个是只预测...

  • 【图像处理】OpenCV系列二十七 --- 积分图(integr

    上一节我们学习了图像分割算法,相信大家学习之后,对图像分割算法已经有了基本的认识,本节呢,我们对学习积分图,对in...

网友评论

    本文标题:OpenCV-Python学习(十七):图像分割与Watersh

    本文链接:https://www.haomeiwen.com/subject/mfdbfktx.html