Fuzzy C Means for tumor segmentation using Matlab

2 views (last 30 days)
I have a segmented liver. I need to segment the tumor in it. I used the FCM method. It is a 3 level FCM thresholding. When I apply it to the images, I need the tumor region(the region that is darker than the remaining parts) alone to get segmented. But am getting the reverse. All the region surrounding the tumor gets segmented. Kindly help me out. The program has two files. testfcmthresh.m and a function fcmthresh.m
I tried complementing the image obtained by using imcomplement() But I got the entire background also as white, since the background was originally dark. Kindly help me out.
function [bw,level]=fcmthresh(IM,sw)
%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 (xgl99@mails.tsinghua.edu.cn)
% at Tsinghua University, Beijing, China.
% check the parameters
if (nargin<1)
error('You must provide an image.');
elseif (nargin==1)
sw=0;
elseif (sw~=0 && sw~=1)
error('sw must be 0 or 1.');
end
data=reshape(IM,[],1);
[center,member]=fcm(data,3);
[center,cidx]=sort(center);
member=member';
member=member(:,cidx);
[maxmember,label]=max(member,[],2);
if sw==0
level=(max(data(label==1))+min(data(label==2)))/2;
else
level=(max(data(label==2))+min(data(label==3)))/2;
end
bw=im2bw(IM,level);
--------------------------------------------------------------
%testfcmthresh.m
clear;clc;
im=imread('mliver3.jpg');
fim=mat2gray(im);
level=graythresh(fim);
bwfim=im2bw(fim,0.1);
[bwfim0,level0]=fcmthresh(fim,0);
[bwfim1,level1]=fcmthresh(fim,1);
subplot(2,2,1);
imshow(fim);title('Original');
subplot(2,2,2);
imshow(bwfim);title(sprintf('Otsu,level=%f',level));
subplot(2,2,3);
imshow(bwfim0);title(sprintf('FCM0,level=%f',level0));
subplot(2,2,4);
imshow(bwfim1);title(sprintf('FCM1,level=%f',level1));
% imwrite(bwfim1,'fliver6.jpg');
  1 Comment
YASSER
YASSER on 6 Mar 2014
you say that you have 3 class images, but in the result you have 2 Images why? and how to get the third imge?

Sign in to comment.

Answers (1)

Nerea Zubiaurre
Nerea Zubiaurre on 2 Mar 2012
Where did you find the FCM method?

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!