필터 지우기
필터 지우기

Fuzzy C Means for tumor segmentation using Matlab

조회 수: 2 (최근 30일)
Gomathi C
Gomathi C 2012년 3월 2일
댓글: YASSER 2014년 3월 6일
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
YASSER
YASSER 2014년 3월 6일
you say that you have 3 class images, but in the result you have 2 Images why? and how to get the third imge?

댓글을 달려면 로그인하십시오.

답변 (1개)

Nerea Zubiaurre
Nerea Zubiaurre 2012년 3월 2일
Where did you find the FCM method?
  댓글 수: 1
Gomathi C
Gomathi C 2012년 3월 2일
matlab central file exchange as FCM Thresholding

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by