View License

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

» Watch video

Highlights from

4.3 | 16 ratings Rate this file 114 Downloads (last 30 days) File Size: 19.6 KB File ID: #29517 Version: 1.4
image thumbnail



Micael Couceiro (view profile)


24 Nov 2010 (Updated )

Multiple Image Segmentation using PSO, DPSO, FO-DPSO and exhaustive methods.

| Watch this File

File Information

MatLab function for Multiple Image Segmentation using PSO (Particle Swarm Optimization), DPSO (Darwinian PSO), FO-DPSO (Fractional-Order DPSO) and exhaustive methods based on the image histogram shape. The exhaustive method is still in development. The exhaustive method is still in development.

Iout = segmentation(I)
Iout - segmented image.
I - any type of image with multiple intensity levels(e.g., grayscale, color).

[Iout,intensity] = segmentation(I)
intensity - returns the intensity that maximizes the between-class variance. size(intensity)=[size(I,3) level].

[Iout,intensity,fitness] = segmentation(I)
fitness - returns the fitness of the between-class variance. size(fitness)=[size(I,3) 1]

[Iout,intensity,fitness,time] = segmentation(I)
time - returns the CPU computation time
size(time)=[1 1]

[Iout,intensity] = segmentation(I,level)
level - segmentation level. Must be integer ... (Default 2). If level>2
then the segmented image Iout will be an RGB image.

[Iout,intensity] = segmentation(I,level,method)
method - choose the method to perform the multi-segmentation of the image. The pso, dpso, fodpso and exhaustive are the only ones implemented yet. Default pso).
Example: Iout = segmentation(I,4,'pso')

For a detailed description on multiple image segmentation using PSO algorithms please refer to:

Pedram Ghamisi, Micael S. Couceiro, Jón Atli Benediktsson & Nuno M.F. Ferreira. “An Efficient Method for Segmentation of Images Based on Fractional Calculus and Natural Selection”, Expert Systems with Applications, Elsevier, 2012.

Micael S. Couceiro & J. Miguel A. Luz
Created 15/11/2010
Last Update 16/01/2012

Required Products Image Processing Toolbox
MATLAB release MATLAB 7.9 (R2009b)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (42)
14 Oct 2016 Franck n'guyen

wonderful !
but have you a 3D version applied for :
load mri

Iout=segmentation(D); ?????

thank you again

26 Jul 2016 rahul verma

It worked after a restart ;-)

24 Jul 2016 rahul verma

I tried these,

1) Didn't work
>> I=imread('C:\mtlb\1.jpg');
>> Iout = segmentation(I,4,'pso')

2) >> Iout = segmentation(1,4,'pso')
Undefined function or variable 'segmentation'.

Please help me how to run this code
thanks in advanced

email :

Comment only
08 Jan 2016 Tirupal Talari

Respected Sir,
im a Research Scholar solving a paper in image fusion using PSO and I need to divide the image (size 256x256) into 3x3, 5x5, 7x7 blocks automatically using PSO please help me. my mail id

Comment only
06 Nov 2015 shivali k

can u please mail me code to calculate threshold of an image using pso only. I have understood the algo of pso but i am not able to write its code in matlab. Will be very thankful to you if u help me.

Comment only
13 Oct 2015 Andrew Diamond

Gave it a color image, returned a segmentation image of 0s.

29 Apr 2015 Vasumathi Ganesh

Hello sir,

I tried to run your segmentation.m file, But it shows following error.

Error using segmentation (line 50)
Not enough input arguments.

How to clear this?

Comment only
24 Mar 2015 Joy Goswami

19 Nov 2014 Ahmad Azar

31 Aug 2014 ABIN joy

Respected Sir,
I already try your coding and it give me a good result. I need your help,how to choose the level for the PSO as 2.
so can u please help me. Thank you

Comment only
18 Aug 2014 NITHYA

NITHYA (view profile)

Respected Sir,
i'm doing my ME project in brain tumor image segmentation using PSO i dont know how to calculate the fitness function and how to divide 256x256 image into 3x3,4x4 labels please help mail id

14 Jul 2014 vats

vats (view profile)

respected sir,
iam not able to get your code. sir please can you mail me the matlab code for image thresholding using pso only. i'll be very thankful to you.

Comment only
28 Jan 2014 Akshay Gore

Akshay Gore (view profile)

09 Nov 2013 Micael Couceiro

Micael Couceiro (view profile)

Hello Marikhs,

Please, note that deleting the DPSO and FODPSO is irrelevant. As long as you choose 'pso' as method it won't influence at all.

The example given in the header should work on any image:
Iout = segmentation(I,4,'pso')

If you're having a problem working with a specific image just send it to me to and I'll try to check what's going on.


Comment only
09 Nov 2013 Marikhs Roses

Dear Sir,
I already try your coding and it give me a good result for the first try but after that it cannot give a result. I need your help. Can you please give me the coding for image segmentation using PSO only. the one that u have uploaded having some problem when i try to delete the DPSO and FODPSO. Please email me the code and may God bless you for helping other people.

Comment only
08 Oct 2013 Micael Couceiro

Micael Couceiro (view profile)


One of the references is cited on the description of the matlab file:

Pedram Ghamisi, Micael S. Couceiro, Jón Atli Benediktsson & Nuno M.F. Ferreira. “An Efficient Method for Segmentation of Images Based on Fractional Calculus and Natural Selection”, Expert Systems with Applications, Elsevier, 2012.

An alternative would be:

Pedram Ghamisi, Micael S. Couceiro, Fernando M. L. Martins and Jón Atli Benediktsson. “Multilevel Image Segmentation Based on Fractional-Order Darwinian Particle Swarm Optimization”, IEEE Transactions on Geoscience and Remote Sensing, 99, pp. 1-13, 2013.

If you have any problem accessing those e-mail me to and I'll send you my personal copy.


Comment only
08 Oct 2013 ge

ge (view profile)

Dear Micael Couceiro,
The functions looks wonderful,but can your give me some reference about this algorithm, if the principle will be presented ,I would be appreciated.Thanks.
My E_mail address

Comment only
28 Sep 2013 Micael Couceiro

Micael Couceiro (view profile)

Dear Marikhs Roses,
Can you please tell me more details about what you may need? Did you tried to use this function on your case study first?

Comment only
28 Sep 2013 Marikhs Roses

i have final year project title 'PSO-based approach in image segmenttation.' I dont really know about my own project because we will learn image processing in another months. so can u please help me. Thank you :)

Comment only
08 Sep 2013 amal hamed

15 May 2013 Manini

Manini (view profile)

Could you please suggest a code for color image segmentation using PSO for matlab beginners like me. I am unable to follow the code particularly the fitness function. Could you please suggest a simple code or a fitness function that i could modify to get the color image segmented output.


Comment only
11 Feb 2013 Micael Couceiro

Micael Couceiro (view profile)

Dear Gousal,

The help (header of the script) is pretty much straightforward. But, basically, you simply have to open an image using MatLab as, for instance:


Then call the segmentation function as, for instance:

Iout = segmentation(I,4,'pso')

This will result in a image Iout with the same dimensions than I but with only 4 different levels.

Kind regards

Comment only
11 Feb 2013 shaik gousal

Tell me the execution process of this code .please,,,,

20 Jan 2013 Micael Couceiro

Micael Couceiro (view profile)

Dear Chen,

You may use nanmax(fitR) instead. This gnores the NaN's and return the maximum value excluding NaN's. That's what I did in the code and thought it was fixed everywhere but seems not.

Comment only
20 Jan 2013 chen

chen (view profile)

Dear Micael,
I use this algorithm to catch on to PSO algorithm, and improve the algorithm by doing some experiments. My experiment just use the PSO. I have understood the reason how the NAN happened. But now another question is how to find max(fitR) because the fitR is NAN. Does the procedure stop when it has find max(fitR) is NAN or how to compare NAN?

18 Jan 2013 Micael Couceiro

Micael Couceiro (view profile)

Dear Chen,

This is a really boring error that bothers me sometimes. By the way, does that happen for the PSO, DPSO and FODPSO or only one of those? I'm asking that cause I remember to implement a way to avoid outputing a fitness function of NaN if that ever occurs but seems that it's not totally fixed...

Now I'll tell you why it happens. As you may know, the algorithms perform the image segmentation maximizing the between-class variance. On the other hand, the computation of the between-class variance depends on the inverse (as denominator) of the probability of occuring a specific level on that image. So, let us suppose that you have a grayscale 8-bit image with all the components except the intensity level 100. This will mean that the probability of occuring 100 will be zero. Hence, if a particle traveling on the search space decides to compute the between-class variance based on the 100 level, its fitness will return NaN since the probability of 100 is zero.

As I didn't implemented a system to avoid non-existant colors, I implemented a way to ignore NaN values and saw it working...and that's why I need to know in which occasions does that happen.

Comment only
18 Jan 2013 chen

chen (view profile)

Dear Sir,
Thank you for supplying this code. While the algorithm run, the result of the fitness sometimes is NAN. So I wanna know the reason. Hope for your reply.

22 Oct 2012 Micael Couceiro

Micael Couceiro (view profile)

Dear Manini,

The code you're presenting is exactly the fitness function, i.e., the between-class variance.

N is the number of particles and level the number of levels within each component (256 for 8-bit images).

You should read my paper
for more details about the fitness function.

In some few words, to compute the between-class variance, and since the number of levels may be different (it depends on the image you're using) a for loop is used. Therefore, the probability distribution and some other relevant parameters are then calculated at each iteration for each colour component and for each particle. In sum, the fitR(j) will represent the fitness function of the red colour component for robot j.

Hope that helps!

Comment only
22 Oct 2012 Manini

Manini (view profile)

Sir, I am using your code for RGB multiobject image. Sir i want to know which is the fitness function here. and
for j=1:N
if size(I,3)==1 %grayscale image
fitR(j)=sum(probR(1:xR(j,1)))*(sum((1:xR(j,1)).*probR(1:xR(j,1))/sum(probR(1:xR(j,1)))) - sum((1:Lmax).*probR(1:Lmax)) )^2;
for jlevel=2:level-1
fitR(j)=fitR(j)+sum(probR(xR(j,jlevel-1)+1:xR(j,jlevel)))*(sum((xR(j,jlevel-1)+1:xR(j,jlevel)).*probR(xR(j,jlevel-1)+1:xR(j,jlevel))/sum(probR(xR(j,jlevel-1)+1:xR(j,jlevel))))- sum((1:Lmax).*probR(1:Lmax)))^2;
fitR(j)=fitR(j)+sum(probR(xR(j,level-1)+1:Lmax))*(sum((xR(j,level-1)+1:Lmax).*probR(xR(j,level-1)+1:Lmax)/sum(probR(xR(j,level-1)+1:Lmax)))- sum((1:Lmax).*probR(1:Lmax)))^2;

sir this is one of the the for loop from your code. can you please explain this for loop. I will be thankful.

11 May 2012 Micael Couceiro

Micael Couceiro (view profile)

Either you read the article recently publised on:

Or you simply compare the fitness value (one of the outputs of the function).

Don't forget that all those algorithm are stochastic and for a correct evaluation you should perform multiple trials.

Comment only
11 May 2012 Mohsen Davarynejad

How to do evaluate the performance of each algorithm? So my question is that how should I believe that for instance the dpso outperforms the pso?

Comment only
12 Apr 2012 Harish

Harish (view profile)

Dear sir,
Thank you very much for providing the code.
Please provide me mathematical description of the fitness function and if u have any published paper on it then a copy of that.

04 Apr 2012 Micael Couceiro

Micael Couceiro (view profile)

1º open an image in MatLab
I = imread('pic.jpg');

2º Follow instructions in the beginning of the code
Iout = segmentation(I);

3º See the result

Comment only
04 Apr 2012 jjj

jjj (view profile)

how to run it sir

Comment only
26 Mar 2012 Siro

Siro (view profile)

09 Mar 2012 Micael Couceiro

Micael Couceiro (view profile)

You're welcome

Comment only
09 Mar 2012 Majid Al-Sirafi

wonderful program,thank you dear

Comment only
21 Feb 2012 Micael Couceiro

Micael Couceiro (view profile)

Kyle, I just uploaded a new version with a new segmentation method btw (FO-DPSO).

The segmentation methods are based on the traditional PSO presented by Kennedy and Eberhart in 1995, the Darwinian PSO presented by Tillett et al in 2005 (see more about it in and the Darwinian PSO extension using fractional calculus presented by me and other authors in the Fractional Signals and Systems Symposium in 2011. This last paper will be soon available.

Anyway, this script basically uses such optimization methods to find the maximum between-classes variances. Another more detailed paper describing this script will soon be published.

Comment only
20 Feb 2012 Kyle Wang

Could you indicate the paper that the code is implemented based on?

03 Feb 2012 Micael Couceiro

Micael Couceiro (view profile)

The intensity will have the same value than the intensity level that presents the higher between-class variance.
In other words, if it is presenting a level of 50 it means that this is the optimal level.

Anyway, you can easily change this with the matlab find function as:
eg: [a,b]=find(IMAGE==50);

Comment only
23 Jan 2012 Qing

Qing (view profile)

Hello Micael,
I'm using your function to segment my grayscale images. However the max intensity of the output image is only 50. How do you set it to be 255? Thanks!

Comment only
10 Nov 2011 Muhammad Nawaz

Strongly recommended for multicolour and multi objects images.

24 Oct 2011 1.1

There was some bugs on RGB multi-segmentation that were fixed.

01 Nov 2011 1.2

A new segmentation method based on the Darwinian Particle Swarm Optimization was implemented

New outputs

21 Feb 2012 1.3

A new segmentation method based on the Fractional-Order Darwinian Particle Swarm Optimization was added.

14 Dec 2012 1.4

A scientific reference describing the methodology behind the code was added in the description.

Contact us