2011-07-14 10 views
8

Ktoś wie, jak napisać funkcję w Matlab, aby podzielić komórki na segmenty i obliczyć średnią powierzchnię komórki przy pomocy watershed algorithm? każda pomoc byłaby bardzo cenna. Dziękuję Ci!algorytm zlewni w matlab

Oto obraz komórek drożdży

yeast cells

Odpowiedz

13

Oto jeden ze sposobów segmentowania obrazu za pomocą działu wodnego. Jest jeszcze wiele rzeczy, które możesz zrobić (np. Połączyć komórki z dwoma jądrami, jeśli jeszcze nie ukończyły one cytokinezy), ale poniższe kroki powinny dać ci pierwszy pomysł.

(1) Określić próg komórek tła próg komórek jądra

%# read image 
img = imread('http://i.stack.imgur.com/nFDkX.png'); 
%# normalize to 0...1 
imgN = double(img-min(img(:)))/(max(img(:)-min(img(:)))); 
th1=graythresh(imgN); 
th2 = graythresh(imgN(imgN>th1)); 

cellMsk = imgN>th1; 
nucMsk = imgN>th2; 

figure,imshow(cellMsk+nucMsk,[]) 

enter image description here

(2) Gładkie raw (w celu uniknięcia oversegmentation) i nałożyć jąder jako minimum

[xx,yy]=ndgrid(-5:5,-5:5); 
gf = exp((-xx.^2-yy.^2)/20); 
filtImg = conv2(imgN,gf,'same'); 

figure,imshow(filtImg,[]) 

filtImgM = imimposemin(-filtImg,nucMsk); 

enter image description here

(3) komórki Watershed, maski, i wyświetlacz

ws = watershed(filtImgM); 
ws(~cellMsk) = 0; 

lblImg = bwlabel(ws); 

figure,imshow(label2rgb(lblImg,'jet','k','shuffle')); 

enter image description here

(4) Teraz można użyć REGIONPROPS na znakowanym obrazek, aby wyodrębnić statystyk chcesz.

+0

dziękuję bardzo! – Glove

0

Zobacz watershed z przybornika przetwarzania obrazu i this post na segmentacji komórki na „Steve na przetwarzanie obrazu” blogu.