(一)基本描述

均值漂移是一种核密度估计方法,用来分析复杂多模特征空间。其算法本质是最优化理论中的梯度下降法,沿着梯度下降方法寻找目标函数的极值。图像分割是找到每个像素点所属类的中心,均值漂移认为类中心是概率密度的极大值点,对于任一像素沿着梯度方向总能找到其极值点。

给定一个维度为(x,y,blue,green,red)的多维数据点集,mean-shift可以在空间上找到该空间中数据的最高密度“块”,空间变量(x,y)的范围可以和彩色分量范围(蓝、绿、红)非常不同,在这种情况下,我们应该至少具有空间变量的一个半径和颜色幅度的一个的半径。随着mean-shift的移动,在数据中收敛于峰值的窗口遍历所有点都连接或拥有该峰值。从最密集的峰值部分辐射出来,形成了图像的分割。

分割实际上就是通过尺度金字塔cv::pyrup()和cv::prydown()完成的,因此金字塔中强度较高的彩色聚类就会在较低处的金字塔修正边界。输出是一个“色调分离”的新图像,意味着去除了精细纹理、颜色梯度大部分变得平坦了。如果实际上是最终需要轮廓分割,就可以用cv::canny()结合cv::findcoutours()进一步细分此类图像。

(二)算法步骤

(1)平滑mask搜索。图像由N维像素构成特征空间,特征空间由坐标空间与颜色空间构成,空间域与颜色域构成相应的联合域。对于图像中的像素点,他在联合特征空间中迭代搜索相应的mask点,设原始图像的像素为

均值漂移算法 处理gps数据 均值漂移算法原理_特征空间

表示,平滑后的图像用

均值漂移算法 处理gps数据 均值漂移算法原理_opencv_02

表示,平滑是将模点的颜色值初始化为原始像素点,利用空间颜色域特征函数

均值漂移算法 处理gps数据 均值漂移算法原理_特征空间_03

,得到平滑后的像素值,如下式所示:

均值漂移算法 处理gps数据 均值漂移算法原理_像素点_04

其中,g为核函数,

均值漂移算法 处理gps数据 均值漂移算法原理_特征空间_05

为颜色空间的核平滑尺度,

均值漂移算法 处理gps数据 均值漂移算法原理_opencv_06

为特征函数的空间域部分。(2)mask点聚类。对平滑后的图像应用颜色相似度与空间位置相似性进行判定,在实际的计算中常常只考虑颜色相似性,对满足

均值漂移算法 处理gps数据 均值漂移算法原理_点集_07

的点集进行合并。

(3)合并相似小区域。将上一步得到的模点集消除像素个数小于S的区域或与它相似的区域进行合并。

(三)函数原型

void cv::pyrMeaShiftFiltering(cv::InputArray src,cv::OutputArray dst,cv::double sp,cv::double sr,int maxLevel = 1,TermCriteria termcrit = TermCriteria(TermCriteria::Max_ITER + TermCriteria::EPS,5,1))

  其中参数src为8位3通道图像;参数dst表示结果输出图像,与输入图像同类型同尺寸;参数sp为空间窗半径;sr为颜色窗半径;参数maxlevel为高斯金字塔分割的最高水平;参数termcrit为均值漂移参数的终止条件。cv::TermCriteria用于opnecv中所有的迭代算法。