5

Sto provando ad estrarre il plancton da un'immagine scansionata. scanned imageEstrazione di plancton usando la segmentazione con Matlab

ho segmentato il plancton utilizzando la tecnica che ho trovato qui, http://www.mathworks.com/help/images/examples/detecting-a-cell-using-image-segmentation.html

Il contorno non è male, però, ora non sono sicuro come estrarre le immagini in modo che ogni individuo plancton può essere salvato individualmente. Ho provato ad usare le etichette ma c'è molto rumore e etichetta ogni singola specifica. Mi chiedo se c'è un modo migliore per farlo.

Ecco il mio codice:

I = imread('plankton_2.jpg'); 
figure, imshow(I), title('original image'); 
[~, threshold] = edge(I, 'sobel'); 
fudgeFactor = .5; 
BWs = edge(I,'sobel', threshold * fudgeFactor); 
figure, imshow(BWs), title('binary gradient mask'); 
se90 = strel('line', 3, 90); 
se0 = strel('line', 3, 0); 
BWsdil = imdilate(BWs, [se90 se0]); 
figure, imshow(BWsdil), title('dilated gradient mask'); 
BWdfill = imfill(BWsdil, 'holes'); 
figure, imshow(BWdfill); 
title('binary image with filled holes'); 

BWnobord = imclearborder(BWdfill,1); 
figure, imshow(BWnobord), title('cleared border image'); 
seD = strel('diamond',1); 
BWfinal = imerode(BWnobord,seD); 
BWfinal = imerode(BWfinal,seD); 
figure, imshow(BWfinal), title('segmented image'); 
BWoutline = bwperim(BWfinal); 
Segout = I; 
Segout(BWoutline) = 0; 
figure, imshow(Segout), title('outlined original image'); 

label = bwlabel(BWfinal); 
max(max(label)) 


for j = 1:max(max(label)) 
    [row, col] = find(label == j); 
    len = max(row) - min(row)+2; 
    breadth = max(col)-min(col) +2; 
    target = uint8(zeros([len breadth])); 
    sy = min(col)-1; 
    sx = min(row)-1; 

    for i = 1:size(row,1) 
     x = row(i,1)-sx; 
     y = col(i,1) - sy; 
     target(x,y)=I(row(i,1),col(i,1)); 
    end 
    mytitle =strcat('Object Number:',num2str(j)); 
    figure, imshow(target);mytitle; 
end 



for j = 1:max(max(label)) 
    [row, col] = find(label == j); 
    len = max(row) - min(row)+2; 
    breadth = max(col)-min(col) +2; 
    target = uint8(zeros([len breadth])); 
    sy = min(col)-1; 
    sx = min(row)-1; 

    for i = 1:size(row,1) 
     x = row(i,1)-sx; 
     y = col(i,1) - sy; 
     target(x,y)=I(row(i,1),col(i,1)); 
    end 
    mytitle =strcat('Object Number:',num2str(j)); 
    figure, imshow(target);mytitle; 
end 

risposta

2

si dovrebbe utilizzare la funzione regionprops per filtrare gli oggetti rilevati per dimensione e/o forma caratteristiche.

+0

Ho ottenuto questo lavoro con regionprops. Grazie per il suggerimento. –