File Exchange

image thumbnail

Segmentation

version 1.4 (19.6 KB) by

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

4.26667
16 Ratings

106 Downloads

Updated

View License

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
v4.0
01/11/2011
Created 15/11/2010
Last Update 16/01/2012

Comments and Ratings (42)

wonderful !
but have you a 3D version applied for :
load mri
D=squeeze(D);

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

thank you again

rahul verma

It worked after a restart ;-)

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 : rahulverma1790@gmail.com

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 is:tirutalari@gmail.com

shivali k

Sir
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.

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

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?

Joy Goswami

Ahmad Azar

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

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 me.my mail id is:nithyamanianbeece@gmail.com

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.
email id-pankaj.vats1010@gmail.com.

Akshay Gore

Akshay Gore (view profile)

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 micaelcouceiro@gmail.com and I'll try to check what's going on.

Regards.

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 dayanghalimah@ymail.com and may God bless you for helping other people.

Micael Couceiro

Micael Couceiro (view profile)

Hello,

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 micaelcouceiro@gmail.com and I'll send you my personal copy.

Regards.

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 is:gexinmin2002@163.com

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?
Regards

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 :)

amal hamed

Manini

Manini (view profile)

Sir,
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.

Thanks

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:

I=imread('teste.bmp');

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

shaik gousal

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

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.

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?

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.

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.

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
http://ac.els-cdn.com/S0957417412006756/1-s2.0-S0957417412006756-main.pdf?_tid=43de80bc-1c5f-11e2-a6bf-00000aab0f26&acdnat=1350920806_8d3bff7624f9aa0dd9cda3d10b6c3a4f
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!

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;
            end
            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;
            fitBestR(j)=fitR(j);

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

Micael Couceiro

Micael Couceiro (view profile)

Either you read the article recently publised on:
http://www.sciencedirect.com/science/article/pii/S0957417412006756?v=s5

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.

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?

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.

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
   e.g.,
        Iout = segmentation(I);

3º See the result
   e.g.,
        imshow(Iout);

jjj

jjj (view profile)

how to run it sir

Siro

Siro (view profile)

Micael Couceiro

Micael Couceiro (view profile)

You're welcome

wonderful program,thank you dear

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 http://www.netsup.net/~jtillett/darwin/) 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.

Kyle Wang

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

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);
IMAGE(a,b)=255;

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!

Strongly recommended for multicolour and multi objects images.

Updates

1.4

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

1.3

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

1.2

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

New outputs

1.1

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

MATLAB Release
MATLAB 7.9 (R2009b)

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

» Watch video