前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【从零学习OpenCV 4】分割图像——Mean-Shift分割算法

【从零学习OpenCV 4】分割图像——Mean-Shift分割算法

作者头像
小白学视觉
发布2020-03-05 15:24:36
1.1K0
发布2020-03-05 15:24:36
举报

Mean-Shift算法又被称为均值漂移法,是一种基于颜色空间分布的图像分割算法。该算法的输出是一个经过滤色的“分色”图像,其颜色会变得渐变,并且细纹纹理会变得平缓。

在Mean-Shift算法中每个像素点用一个五维的向量表示,前两个量是像素点在图像中的坐标,后三个量是每个像素点的颜色分量(蓝、绿、红)。在颜色分布的峰值处开始,通过滑动窗口不断寻找属于同一类的像素点并统一像素点的像素值。滑动窗口由半径和颜色幅度构成,半径决定了滑动窗口的范围,即坐标的范围,颜色幅度决定了半径内像素点分类的标准。这样通过不断地移动滑动窗口,实现基于像素点颜色的图像分割。由于分割后同一类像素点具有相同像素值,因此Mean-Shift算法的输出结果是一个颜色渐变、纹理平缓的图像。

OpenCV 4中提供了实现Mean-Shift算法分割图像的pyrMeanShiftFiltering()函数,该函数的函数原型在代码清单8-23中给出。

代码语言:javascript
复制
代码清单8-23 pyrMeanShiftFiltering()函数原型
void cv::pyrMeanShiftFiltering(InputArray  src,
                               OutputArray  dst,
                               double  sp,
                               double  sr,
                               int  maxLevel = 1,
                               TermCriteria  termcrit = 
                               TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 5, 1)  
8.	                          )
  • src:待分割的输入图像,必须是三通道CU_8U的彩色图像
  • dst:分割后的输出图像,与输入图像具有相同的尺寸和数据类型
  • sp:滑动窗口的半径
  • sr:滑动窗口颜色幅度
  • maxLevel:分割金字塔缩放层数
  • termcrit:迭代算法终止条件。

该函数基于彩色图像的像素值实现对图像的分割,函数的输出结果是经过颜色分布平滑的图像。经过该函数分割后的图像具有较少的纹理信息,可以利用边缘检测函数Canny()以及连通域查找函数findContours()进行进一步细化分类和处理。函数前两个参数是待分割的输入图像和分割后的输出图像,两个图像具有相同的尺寸并且必须是CV_8U的三通道彩色图像。第三个参数为滑动窗口的半径,第四个参数为滑动窗口的颜色幅度。第五个参数为分割金字塔缩放层数,当参数大于1时构建maxLevel + 1层高斯金字塔。该算法首先在尺寸最小的图像层中进行分类,之后将结果传播到尺寸较大的图像层,并且仅在颜色与上一层颜色差异大于滑动窗口颜色幅度的像素上再次进行分类,从而使得颜色区域的边界更清晰。当分割金字塔缩放层数为0时表示直接在整个原始图像时进行均值平移分割。函数最后一个参数表示算法迭代停止的条件,该参数的数据类型是TermCriteria,该数据类型是OpenCV 4中用于表示迭代算法终止条件的数据类型,在所有涉及到迭代条件的函数中都有该参数,用于表示在满足某些条件时函数将停止迭代并输出结果。TermCriteria变量可以通过TermCriteria()函数进行赋值,该函数的函数原型在代码清单8-24中给出。

代码语言:javascript
复制
代码清单8-24 TermCriteria()函数原型
cv::TermCriteria::TermCriteria(int  type,
                               int  maxCount,
                               double  epsilon 
                               )
  • type:终止条件的类型标志,可以选择的参数及含义在表8-6中给出。
  • maxCount:最大迭代次数或者元素数。
  • epsilon:迭代算法停止时需要满足的精度或者参数变化。

该函数可以表示迭代算法的终止条件,主要分为满足迭代次数和满足计算精度两种。函数第一个参数是终止条件的类型标志,其可选参数在表8-6中给出,这几个标志可以互相结合使用,需要注意的是,由于该参数在TermCriteria类中,因此在使用时需要在变量前面添类名前缀。函数第二个参数表示最大迭代次数,在epsilon== TermCriteria::COUNT时发挥作用。函数第三个参数表示停止迭代时需要满足的计算精度,在epsilon== TermCriteria::EPS时发挥作用。

标志参数

简记

含义

TermCriteria::COUNT

1

迭代次数达到设定值才停止迭代

TermCriteria::MAX_ITER

1

同上

TermCriteria::EPS

2

当计算的精度满足要求时停止迭代

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白学视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档