File Exchange

image thumbnail

Fuzzy c-means thresholding

version (22 KB) by Guanglei Xiong
Thresholding by 3-class fuzzy c-means clustering.


Updated 31 Mar 2016

View License

FCMTHRESH Thresholding by 3-class fuzzy c-means clustering
[bw,level]=fcmthresh(IM,sw) outputs the binary image bw and threshold level of image IM using a 3-class fuzzy c-means clustering. It often works better than Otsu's methold which outputs larger or smaller threshold on fluorescence images.

sw is 0 or 1, a switch of cut-off position.
sw=0, cut between the small and middle class
sw=1, cut between the middle and large class

Contributed by Guanglei Xiong (
at Tsinghua University, Beijing, China.

Inspired by Xiaobo Zhou
at Harvard Medical School.

Cite As

Guanglei Xiong (2020). Fuzzy c-means thresholding (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (20)

thank you sir for the code.can you please mail me the reference paper at

Hai Sir
I tried your code on my dataset it works better. I want to clear my doubts.I want only level 1 for segmenting the image no need to use level2. what paper you have used for this .please send me the paper to my mail:

Michael Luo

suja s

Could you please email me the paper that is related to this code thank thati can cited the paper.


For 3 class fuzzy c-means clustering, I believe it means the number of categories (i.e. classes) used in the program. For instance, if you have 2 classes, this can be the "background" of the image, and the "foreground" of the image.

Can someone explain what is the meaning of 3 class fuzzy? Is it the output of the image which has three output with different level ?


Sadoon U

thanks for your code. can you sent me this paper in my email.

thanks very well


Could you please email me the paper that is related to this code thank thati can cited the paper.

Will you please email me its paper.



Hi Guanglei,the code is so nice on biological images.and fair on remote sensing images.have tried to test both methods on remote sensing images but results show otsu is better.
though i have used tested your code on several remote sensing images,I have failed to understand how the code operates.all is that your code segments the image into three classes using FCM clustering thresholding based on 3-class Fuzzy clustering,where by the threshold is obtained by averaging the maximum
in the class with the smallest center and the minimum in the class with the middle center. am i right or wrong about your method?.hope to hear from you.chao

Stacy Ross

I received an error when trying to run the test code.

In the fcmthresh function, it does not now what fcm is in

Any advice?

Thank you.




the sourcode is good !thank you.

giri babu kande

oleksandr makoveychuk




Update description

MATLAB Release Compatibility
Created with R14SP2
Compatible with any release
Platform Compatibility
Windows macOS Linux