OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)

什么是图像分割(Image Segmentation)

  • 图像分割(Image Segmentation)是图像处理最重要的处理手段之一

  • 图像分割的目标是将图像中像素根据一定的规则分为若干(N)个cluster集合,每个集合包含一类像素。

  • 根据算法分为监督学习方法和无监督学习方法,图像分割的算法多数都是无监督学习方法 - KMeans

  • 从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像索赋予相同的编号。目的是将图像中像素根据一定的规则分为若干(N)个聚(cluster)集合,每个集合包含一类像素。将对象在背景提取出来。
    OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)_第1张图片

距离变换与分水岭介绍

可以参考:https://blog.csdn.net/zhangjunp3/article/details/79672098

  • OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)_第2张图片

  • 在这里插入图片描述

  • OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)_第3张图片

距离变换常见算法有两种:

  • 不断膨胀/ 腐蚀得到
  • 基于倒角距离

分水岭变换常见的算法

  • 基于浸泡理论实现

可以参考:https://blog.csdn.net/zhu_hongji/article/details/81703350

相关API

  • (1)距离变换:计算源图像的每个像素到最近的零像素的距离.
    distanceTransform(
    InputArray src, //8位单通道(二进制)源图像
    OutputArray dst, //输出具有计算距离的图像,8位或32位浮点的单通道图像,大小与src相同.
    OutputArray labels, //输出二维数组标签labels(离散维诺Voronoi图),类型为 CV_32SC1 ,相同距离的算做同一个 label ,算出总共由多少个 labels
    int distanceType, //距离类型 = DIST_L1/DIST_L2
    int maskSize, //距离变换的掩膜大小,DIST_MASK_3(maskSize = 3x3),最新的支持DIST_MASK_5(mask = 5x5),//最新的支持5x5,推荐3x3、
    int labelType=DIST_LABEL_CCOMP //要生成的标签数组的类型
    )

    参数四距离可选类型:
    OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)_第4张图片
    参数六标签可选类型:在这里插入图片描述
  • (2)分水岭:用分水岭算法执行基于标记的图像分割
    watershed(
    InputArray image, //输入8位3通道图像(输入锐化原图8位3通道)
    InputOutputArray markers // 输入或输出32位单通道的标记,和图像一样大小。(输入高峰轮廓标记)
    )

处理流程

  1. 将白色背景变成黑色-目的是为后面的变换做准备
  2. 使用filter2D与拉普拉斯算子实现图像对比度提高,sharp
  3. 转为二值图像通过threshold
  4. 距离变换
  5. 对距离变换结果进行归一化到[0~1]之间
  6. 使用阈值,再次二值化,得到标记
  7. 腐蚀得到每个Peak - erode
  8. 发现轮廓 – findContours
  9. 绘制轮廓- drawContours
  10. 分水岭变换 watershed
  11. 对每个分割区域着色输出结果

演示代码

OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)_第5张图片
OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)_第6张图片
OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)_第7张图片
OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)_第8张图片
OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)_第9张图片
OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)_第10张图片
OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)_第11张图片
OpenCV-图像处理(33、基于距离变换与分水岭的图像分割)_第12张图片

程序代码

可以参考:https://blog.csdn.net/huanghuangjin/article/details/81194552

运行截图

参考博客

  1. https://blog.csdn.net/zhangjunp3/article/details/79672098
  2. https://blog.csdn.net/zhu_hongji/article/details/81703350
  3. https://blog.csdn.net/iracer/article/details/49225823
  4. https://blog.csdn.net/huanghuangjin/article/details/81194552

你可能感兴趣的:(OpenCV,OpenCV,图像处理,基于距离变换与分水岭的图像分割)