Seuil adaptatif pour la segmentation du foie à l'aide de Matlab

11

J'ai besoin de segmenter le foie à partir d'une image CT abdominale en utilisant le seuil adaptatif. Mais j'obtiens tout le premier plan séparé de l'arrière-plan seul. J'ai seulement besoin de séparer la partie hépatique du premier plan. Consultez le fichier pdf à http://www.ijcaonline.org/casct/number1/SPE34T.pdf J'ai besoin d'une sortie similaire à celle illustrée à la figure 6.

J'attache mon codage ici. Veuillez m'aider.

%testadaptivethresh.m
clear;close all;
im1=imread('nfliver2.jpg');
bwim1=adaptivethreshold(im1,11,0.03,0);
figure,imshow(im1);
figure,imshow(bwim1);
imwrite(bwim1,'at2.jpg');

function bw=adaptivethreshold(IM,ws,C,tm)
%ADAPTIVETHRESHOLD An adaptive thresholding algorithm that seperates the
%foreground from the background with nonuniform illumination.
%  bw=adaptivethreshold(IM,ws,C) outputs a binary image bw with the local 
%   threshold mean-C or median-C to the image IM.
%  ws is the local window size.
%  tm is 0 or 1, a switch between mean and median. tm=0 mean(default); tm=1 median.
%
%  Contributed by Guanglei Xiong ([email protected])
%  at Tsinghua University, Beijing, China.
%
%  For more information, please see
%  http://homepages.inf.ed.ac.uk/rbf/HIPR2/adpthrsh.htm

if (nargin<3)
    error('You must provide the image IM, the window size ws, and C.');
elseif (nargin==3)
    tm=0;
elseif (tm~=0 && tm~=1)
    error('tm must be 0 or 1.');
end

IM=mat2gray(IM);

if tm==0
    mIM=imfilter(IM,fspecial('average',ws),'replicate');
else
    mIM=medfilt2(IM,[ws ws]);
end
sIM=mIM-IM-C;
bw=im2bw(sIM,0);
bw=imcomplement(bw);

Image originale Après la segmentation

Mon code modifié pour testadaptivethresh.m

clear;
im=imread('nfliver7.gif');
figure,imshow(im)
bwim1=adaptivethreshold(im,300,-0.15,0);
bw=bwareaopen(bwim1,3000);
se=strel('diamond',4);
er=imerode(bw,se);
bw1=bwareaopen(er,3000);
er1=imerode(bw1,se);
bw2=bwareaopen(er1,1000);
fi=imfill(bw2,'holes');
figure,imshow(fi)

op=uint8(fi);
seg=im.*op;
figure,imshow(seg)
imwrite(seg,'sliver7.jpg');
Gomathi
la source
est-il nécessaire d'utiliser un seuillage adaptatif?
vini
blogs.mathworks.com/steve/2006/06/02/cell-segmentation a trouvé que vous pouviez l'essayer
vini
Oui, je dois utiliser uniquement le seuillage adaptatif. Sinon, pouvez-vous me suggérer une autre bonne méthode de segmentation (autre que la croissance de la région et la FCM)?
Gomathi
www4.comp.polyu.edu.hk/~cslzhang/code.htm j'ai trouvé que vous pouvez rechercher le code pour K. Zhang, H. Song et L. Zhang, «Contours actifs entraînés par l'énergie de montage d'image locale», Pattern reconnaissance, vol. 43, numéro 4, pp. 1199-1206, avril 2010. Cela a assez bien fonctionné pour cette image
vini
Merci beaucoup. J'ai eu la sortie. J'ai changé les valeurs des paramètres et fait des opérations morphologiques. Merci tout le monde.
Gomathi

Réponses:

6

J'ai vu le lien du document (de SS Kumar) que vous avez mentionné et le lien où vous avez obtenu le code (HIPR) sont deux algorithmes différents - même si les deux sons comme Adaptive Thresholding

J'aimerais d'abord vous faire la différence.

Dans la méthode HIPR, une hypothèse générale est essentiellement une image de niveau 2 - c'est-à-dire l'avant-plan et l'arrière-plan. Dans n'importe quel seuil de 2 classes, on s'attend à 2 pics ou régions dans l'histogramme d'image, en particulier l'arrière-plan par rapport au fond, le texte par rapport au papier blanc. Si vous en quelque sorte trouvé un point de la vallée optimale dans l'histogramme - vous obtenez plus propre division. Voici à quoi l'histogramme peut ressembler:
entrez la description de l'image ici

Cependant, ce point de vallée peut se déplacer légèrement autour du local. On y trouve de bons exemples de variations d'éclairage. Par conséquent, ce point de vallée optimal existe partout mais varie légèrement dans l'espace, donc un seuil universel échouerait. Par conséquent, le point de vallée (seuil) est calculé sur chaque région locale.

La méthode de l'article de SS Kumar et plus précisément la classe d'images que vous traitez est multi-classe (plusieurs objets ayant chacun une bande d'intensité et une répartition différentes). Dans ce cas, les histogrammes sont multimodaux, c'est-à-dire qu'ils comportent de nombreux pics et vallées et que chaque pic correspond probablement à un objet différent, mais il peut être encore plus complexe.

L'histogramme pourrait ressembler à ceci: (c'est la même image que dans le papier). entrez la description de l'image ici

Dans ce cas, l'approche de classe 2 ci-dessus échouera simplement parce qu'il n'y a pas une seule bonne vallée. C'est pourquoi votre première image que vous avez publiée ressemble à des points noirs / blancs tout autour.

La signification du seuil adaptatif ici, implique que vous devez identifier le pic correct et que la bande d'échelle de gris qui couvre la plupart des intensités du levier et que d'autres objets sont en contraste frappant ce qui permet

Que devrais tu faire?

Tout d'abord, s'il est obligatoire d'utiliser le seuillage adaptatif, recherchez l'histogramme et voyez quelle plage d'intensité puis pour un seuil de gauche ou de droite sont les limites d'intensité dont les pixels doivent être jetés.

Vous pouvez également utiliser l'algorithme de croissance de région ou de fractionnement et de fusion. Référez-vous à cette question pour quelques informations: Quelles méthodes de segmentation peuvent être utilisées pour des images simples?

Dipan Mehta
la source
Merci beaucoup. C'était une réponse très instructive monsieur.
Gomathi