I have a segmented liver. I need to segment the tumor. I used the FCM method. This is a FCM level 3 threshold. When I apply it to images, I need a region of the tumor (an area that is darker than the rest) to get segmentation. But I get the opposite. The entire region surrounding the tumor undergoes segmentation. Please help me. The program has two files, testfcmthresh.m and the function fcmthresh.m
Entering "segmented liver (using growth area)" and FCM output image:

from here
I tried to complement the image obtained with imcomplement() but I got the whole background as white, since the background was initially dark. Please help me.


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 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');