No License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from
Mean Shift Clustering

3.9 | 23 ratings Rate this file 191 Downloads (last 30 days) File Size: 2.66 KB File ID: #10161 Version: 1.0

Mean Shift Clustering


Bart Finkston (view profile)

  • 1 file
  • 3.91304


26 Feb 2006 (Updated )

Cluster data by using the Mean Shift Algorithm

| Watch this File

File Information

Clusters data using the Mean Shift Algorithm. testMeanShift shows an example in 2-D. Set plotFlag to true to visualize iterations.

MATLAB release MATLAB 7 (R14)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (46)
13 Dec 2016 Pan Kelvin

it works very well

Comment only
06 May 2016 yu liu

yu liu (view profile)

01 Dec 2015 Filippos Markolefas


Comment only
17 Jul 2015 jack

jack (view profile)

I have tested this code on my data and found that i have 8 clusters but i have 7 labels , how can that be valid?

Please Inform me.

Comment only
17 Jul 2015 jack

jack (view profile)

I have tested this code on my data and found that i have 8 clusters but i have 7 labels , how can that be valid?

Please Inform me.

06 Feb 2015 Jeyshri j

while running this code..
Causing error like this

Error in testMeanShift (line 25)
[clustCent,point2cluster,clustMembsCell] = MeanShiftCluster(x,bandwidth);

Comment only
14 Apr 2014 Hussein

How to use this to cluster 3D points?

Comment only
28 Mar 2014 Ricky

Ricky (view profile)

03 Jan 2014 Hogwild

13 Dec 2013 Chen-Ping

I notice that there's some randomness to this implementation, anyone knows what parts of the method is causing the randomness?

Comment only
13 Nov 2013 ESTEFANÍA

Hi, I am trying to use meanshiftclustering for find clusters within a matrix of m (features) x n (images). Anyone know why this makes a grouping of thousands of pictures and then groups of just a picture? thanks
despite increasing the value of BW is going the same.

M = 105x3959

[clustCent, CdecadaP, PsdecadaC] = MeanShiftCluster (M, 0.8);
  >> Psdecadac = 2126 x 1 >> {1,1} = 767 elements

Comment only
30 Jan 2013 wang

wang (view profile)

meaning shift is OK?

Comment only
21 Nov 2012 Henrik Skovsgaard

22 Dec 2011 Punit Rathore

Can anybody give me the this code for colour image segmentation??

Comment only
06 Jul 2011 Peter K

This is great code! It's very easy to read and taught me a lot about mean shift.

I found that the runtime was decreased on my machine and data by replacing the lines:

sqDistToAll = sum((repmat(myMean,1,numPts) - dataPts).^2);
beenVisitedFlag(myMembers) = 1;


sqDistToAll = sum(bsxfun(@minus,myMean,dataPts).^2);
beenVisitedFlag(inInds) = 1;


Thanks for the code!

Comment only
06 Jul 2011 Peter K

11 Nov 2010 Nam

Nam (view profile)

Guys, is there any code for high dimensional data? This code doesnt work for D is greater than 2. Thanks.

Comment only
21 Jul 2010 Tali

Tali (view profile)

In order to Bart's code on 1D dim data a small change should be made:

sqDistToAll = sum((repmat(myMean,1,numPts) - dataPts).^2,1);

Comment only
25 May 2010 Harrison Woods

Very good code, thank u ,guy!

08 Jan 2010 Fuat Cogun

07 Oct 2009 Anton Kylling

Problem solved :)

Comment only
13 Jun 2009 Anton Kylling

I get an unhandled exception using edison_wrapper. Anyone else experiencing this?

MATLAB Version: (R2008b)
Operating System: Microsoft Windows Vista
Window System: Version 6.0 (Build 6002: Service Pack 2)
Processor ID: x86 Family 6 Model 7 Stepping 6, GenuineIntel
Virtual Machine: Java 1.6.0_04 with Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM mixed mode
Default Encoding: windows-1252

Vista x64 might be the problem, but I have recompiled the wrapper.

Any help is appreciated. Thanks in advance.

Comment only
11 May 2009 Shai

Shai (view profile)

>> doc edison_wrapper
and you'll get a description of the various parameters and default values.

Comment only
01 May 2009 Luis Mont Blanc

I see this:
But i don't understand how to use it.
How can i use the 4th argument of the function?

Can you please write a sample code of how to use it?

Thank you

Comment only
26 Apr 2009 Sebastien PARIS

Well done!

28 Jan 2009 Shai

Shai (view profile)

For image you have

Comment only
17 Oct 2008 brais martinez

good code and working straight away but there is no option to set weights to the clustered points

also a brief help file would be useful (to describe parameters and so on)

22 Jul 2008 Yun Yongsheng

I have downloaded this code, and tested in my pc'matlab6.5 R13. But there are still two errors happened. The error is reported as " The Error in ==> C:\MATLAB6p5\work\RectifKitU\MeanShift\MeanShiftCluster.m
On line 99 ==> clusterVotes(numClust,:) = thisClusterVotes; "
??? Subscripted assignment dimension mismatch."

I don't know how to solve this problem for the code. Could any one kind help me?

12 Jun 2008 Wahyu Caesar

can I use to vibration data.
please send the answer to my email :

22 May 2008 Daniel Carlton

Rob, by padding you mean adding a row containing only zeros ? Indeed using a 1D vector (a grayscale image vectorized) the code crashes as you say.

What does the "bandwitdh" parameter stand for ? Is it the window size ?

Thank you

Comment only
24 Apr 2008 Rob Barton

It is good base code:

However I believe that the author is using something closer to a nadaraya-watson estimator (When he takes the:

Mean = mean(dataPts:,inInds),2);

He states he is using a 'flat' or epanechnikov kernal and the computation is different:

See: Dorin Comaniciu "Mean Shift: A Robust Approach Toward Feature Space Analysis" IEEE Transactions on pattern analysis and machine intelligence, Vol. 24, No. 5, May 2002.

By altering this and making a few other minor edits this is excellent code to start from to customize to the users requirements.

the computation of 'sqDistToAll = sum(...)' makes the assumption that the user passes more than a 1D data... so if you passed just gray levels of an image in a 1D array the code will crash, however if you passed a LUV image, (3 elements per pixel) it would work. alternately you can pad the input data with a redundant row or alter the code to check for a single row input and perform the slightly modified but same computation.


27 Mar 2008 Tac Charles

Thank you

25 Dec 2007 jaya priya

i want to do it for color image segmentation how to do pls help me

18 Jun 2007 Kim GH

It's good but some problem occures when running on the matlab ver 6.5.
To aboide this modify like that
"zeros(1,numPts,'unit8');" -> "zeros(1,numPts);"

22 Mar 2007 Patson patrick

I would like to subscribe the algorithm mean shift .
Tank you

17 Mar 2007 praisan padungweang

clustering algorithm on images?
You may prepare the data in 1D(gray scale), 3D (RGB or x,y,I;in gray scale) or 5D (x,y,R,G,B) then go with mean shift.

05 Jan 2007 Ming Liu

The code is good, while more examples can further improve the quality.

03 Jan 2007 JW Lee

Can anyone provide some help for me on how to use this clustering algorithm on images?

27 Nov 2006 satria gunawan

i too not undestand to used to image, there are some body help me?

13 Nov 2006 hosung han


Comment only
14 Oct 2006 Ning J.

see D. Comaniciu PH.D Thesis about clustering or applying mean shift to image!

01 Sep 2006 Hanh Vu

Hello every body
I have to use the mean-shift algorithm for finding the modes of a
image histogram. is there anyone that have an M-file to do this?
Thanks in advance.

Comment only
20 Jul 2006 Abhijeet Jadhav

How to use it for image?

29 May 2006 orazio gambino

Hi guys,

I changed the following lines into MeanShiftCluster.m and now it works:

40: beenVisitedFlag = zeros(1,numPts);
42: clusterVotes = zeros(1,numPts);
51: thisClusterVotes = zeros(1,numPts);


Comment only
14 May 2006 yang Min

very good

Comment only
05 Apr 2006 Yang wool

??? Subscripted assignment dimension mismatch.

Error in ==> D:\¹êÅç\MeanShift\MeanShiftCluster.m
On line 99 ==> clusterVotes(numClust,:) = thisClusterVotes;

Error in ==> D:\¹êÅç\MeanShift\testMeanShift.m
On line 25 ==> [clustCent,point2cluster,clustMembsCell] = MeanShiftCluster(x,bandwidth);

Comment only

Contact us