opencv中的meanshift图像分割

标签: MeanShift均值漂移图像分割opencv
5432人阅读 评论(3) 收藏 举报
分类:

 Meanshift(均值漂移)是一种在一组数据的密度分布中寻找局部极值的稳定的方法。Meanshift不仅可以用于图像滤波,视频跟踪,还可以用于图像分割。

     通过给出一组多维数据点,其维数是(x,y,r,g,b),均值漂移可以用一个窗口扫描空间来找到数据密度最大的区域,可以理解为数据分布最集中的区域。

     在这里需要注意,由于空间位置(也就是上面的xy)的变化范围与颜色的变化范围(上面的r,g,b)有极大的不同,所以,meanshift对这两个维数要采用不同的窗口半径。在opencv自带的meanshift分割函数cvPyrMeanShiftFiltering()中,就专门有2个半径参数,分别是spatialRadiuscolorRadius,这两个参数分别代表的是空间半径(x,y)和颜色(r,g,b)半径。

     当均值漂移窗口移动时,经过窗口变换后收敛到数据峰值的所有点都会连通起来,并且属于该峰值。这种所属关系从密集的尖峰辐射,形成了图像的分割。opencv中的meanshift分割实际上是由比例金字塔(cvPyrUP(),cvPyrDown())完成的,相关的介绍大家可以看年learning opencv中关于图像金字塔的介绍。

     下面的代码是我自己写的,大家可以参考一下。PS:我运行的时候发现实际上cvPyrMeanShiftFiltering的运行效率并不是很高,特别是把spatialRadius的值增大以后迭代时感觉很费时。

#include"highgui.h"
#include"cv.h"

#include <iostream>

using namespace cv;
using namespace std;


IplImage* src;  //source image
IplImage* dst;  //the dst image after meanshift
int spatialRad=10,colorRad=20,maxPryLevel=1;


void on_Meanshift(int )  //the callback function
{

	//cout<<"spatialRad="<<spatialRad<<endl;   //for test
	//cout<<"   colorRad="<<colorRad<<endl;
	//cout<<"        maxPryLevel="<<maxPryLevel<<endl;
	cvPyrMeanShiftFiltering(src,dst,spatialRad,colorRad,maxPryLevel);  //segmentation use meanshift
	cvShowImage("dst",dst);   //show the segmented image

}
void main()
{
	src = cvLoadImage("1.png");   //load the picture
	CvSize size;
	size.width = src->width;
	size.height = src->height;
	dst = cvCreateImage(size,src->depth,3);  //set the size of the dst image
	cvNamedWindow("src",CV_WINDOW_AUTOSIZE);
	cvNamedWindow("dst",CV_WINDOW_AUTOSIZE);
	cvShowImage("src",src);
	cvPyrMeanShiftFiltering(src,dst,spatialRad,colorRad,maxPryLevel);

	//create the trackbar
	cvCreateTrackbar("spatialRad","dst",&spatialRad,50,on_Meanshift); 
	cvCreateTrackbar("colorRad","dst",&colorRad,60,on_Meanshift);
	cvCreateTrackbar("maxPryLevel","dst",&maxPryLevel,5,on_Meanshift);

	cvShowImage("dst",dst);

	cvWaitKey(0);
}

   在代码中使用了trackbar,因此可以自己 改变spatialRad,colorRad,maxPryLevel的值,以便观察不同参数下的效果。截图如下



下面图是源图片



**************************************************************************************************************************

关注IT行业发展,关注互联网时代创业趋势,就来我们的公众号吧~~
微信公众号ID: chuangye_beginner   欢迎在公众号里与我互动
博主微博:IT修道者 
**************************************************************************************************************************
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:155826次
    • 积分:2453
    • 等级:
    • 排名:第16627名
    • 原创:83篇
    • 转载:6篇
    • 译文:0篇
    • 评论:66条
    文章分类
    最新评论