Fuzzy C Средство для сегментации опухоли с использованием Matlab - PullRequest
4 голосов
/ 01 марта 2012

У меня сегментированная печень.Мне нужно сегментировать опухоль в нем.Я использовал метод FCM.Это трехуровневый порог FCM.Когда я применяю его к изображениям, мне нужна только одна область опухоли (область, которая темнее остальных частей), чтобы ее можно было сегментировать.Но я получаю обратное.Вся область, окружающая опухоль, становится сегментированной.Пожалуйста, помогите мне.Программа имеет два файла, testfcmthresh.m и функцию fcmthresh.m

Вход «Сегментированная печень (с использованием выращивания региона)» и изображение вывода FCM:

input segemented liver output FCM image отсюда

Я попытался дополнить изображение, полученное с помощью imcomplement() Но я получил весь фон также белым, поскольку фон изначально был темным.Пожалуйста, помогите мне.

after imclearborder after fcm

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 Ответ

1 голос
/ 03 марта 2012

Ответ на мой вопрос сказал Гаул в моем предыдущем вопросе 'Извлечение области изображения в пределах границы' . Если кому-то нужно обратиться, просим вас прокомментировать комментарии Гауля. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...