-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcountLeucositos.m
75 lines (73 loc) · 2.22 KB
/
countLeucositos.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
function n=countLeucositos(ruta)
A = imread(ruta);
figure
imshow(A)
%convertimos blanco y negro
I = rgb2gray(A);
figure
imshow(I)
%aplicamos un ajuste de contraste
I = adapthisteq(I);
figure
imshow(I)
%eliminamos los bordes
I = imclearborder(I);
figure
imshow(I)
%eliminamos el ruido mediante un filtrado adaptivo utilizando
%una ventana de pizeles
I = wiener2(I, [5 5]);
figure
imshow(I)
%aplicamos la tecnica de binarizacion para extrear los perimetros
%de las celdas
bw = imbinarize(I, graythresh(I));
%imbinarize %im2bw
figure
imshow(bw)
%llenamos los agujeros
bw2 = imfill(bw,'holes');
figure
imshow(bw2)
%apertura morphologica usando un kernel de disco
bw3 = imopen(bw2, strel('disk',2));
figure
imshow(bw3)
%eliminamos todos las celdas menores a 10 pixeles
bw4 = bwareaopen(bw3, 100);
%probar con el region prop.
%ver los grupos de celdas que estas sobreagurpadas, para suporponer los
%perimetor se utilizo imoverlay
%%orbersar ...
bw4_perim = bwperim(bw4);
overlay1 = imoverlay(I, bw4_perim, [1 .3 .3]);
% figure
% imshow(overlay1)
% algorimo de cuenca de imagen, debimo que contar grupo no es correcto por
% la superposicion de celular.
maxs = imextendedmax(I, 5);
maxs = imclose(maxs, strel('disk',3));
maxs = imfill(maxs, 'holes');
maxs = bwareaopen(maxs, 2);
overlay2 = imoverlay(I, bw4_perim | maxs, [1 .3 .3]);
figure
imshow(overlay2)
% modificar la imagen para que los píxeles de fondo y los píxeles máximos extendidos se vean obligados a ser los únicos mínimos locales en la imagen.
Jc = imcomplement(I);
I_mod = imimposemin(Jc, ~bw4 | maxs);
figure
imshow(I_mod)
%aplicando watershed algorithm:
L = watershed(I_mod);
labeledImage = label2rgb(L);
figure
imshow(labeledImage)
%contamos la cantidad de celular
[L, num] = bwlabel(L);
%Superpongamos las celdas detectadas sobre la imagen en escala de grises original para evaluar visualmente el rendimiento del algoritmo:
mask = imbinarize(L, 1);
overlay3 = imoverlay(I, mask, [1 .3 .3]);
figure
imshow(overlay3)
n=num;
end