zl程序教程

您现在的位置是:首页 >  后端

当前栏目

利用均值漂移实现图像分割的原理和OpenCV代码

Opencv原理代码 实现 利用 图像 分割 均值
2023-09-11 14:15:39 时间

图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601

要想大致理解均值漂移实现图像分割的原理请见网页基于均值漂移的图像分割算法 - 豆丁网,网页中对原理的理解已经说得比较清楚。如果你想了解详细原理,可以参考PAMI 2003的一篇文章,非常经典的哦,Mean Shift:A Robust Approach Toward Feature Space Analysis。

算法实施过程为:原点是选定的初始迭代点,将蓝色圆(其半径记为h)内所有向量相加,相加的结果如黄色向量所示,其终点指向上图所示的红色点,则下一次迭代以该红色点为圆心,h为半径画圆,然后求这个圆内以圆心为起点所有向量的和。如此迭代下去,圆的中心点为收敛于一个固定的点,也就是概率密度最大的地方。所以 均值漂移算法本质上是一种基于梯度的优化算法。

OpenCV中提供了函数pyrMeanShiftFiltering()来实现,函数原型如下

void pyrMeanShiftFiltering( InputArray src, OutputArray dst, double sp, double sr, int maxLevel = 1, TermCriteria termcrit=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS,5,1) );

各参数的含义如下

src-输入图像,要求是8位的三通道图像

dst-表示结果输出图像,与输入图像同类型同尺寸。

sp-空间窗的半径,空间和颜色两个因素作为迭代的对象

sr-颜色窗的半径,空间和颜色两个因素作为迭代的对象

maxLevel-高斯金字塔分割的最高水平,当maxlevel>0时,建立maxlevel+1层高斯金字塔,层层迭代,减少运算量

termcrit-均值漂移参数的终止条件

代码如下(代码中用到的图像的下载链接:sea.jpg_免费高速下载|百度网盘-分享无限制):

代码请访问博文0042-在OpenCV下利用均值漂移(Meanshift)进行图像分割_清溪算法-CSDN博客_均值漂移算法图像分割获取

代码请访问博文0042-在OpenCV下利用均值漂移(Meanshift)进行图像分割_清溪算法-CSDN博客_均值漂移算法图像分割获取

代码请访问博文0042-在OpenCV下利用均值漂移(Meanshift)进行图像分割_清溪算法-CSDN博客_均值漂移算法图像分割获取

运行结果如下图所示

从结果中来看,此算法比分水岭分割法的效果要好很多嘛,不过我在运行过程中发现花的时间较长啊!

图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601