-
Notifications
You must be signed in to change notification settings - Fork 0
/
method1.m
114 lines (90 loc) · 3.11 KB
/
method1.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
function n = method1(imagen)
% imagen=imread(imagen);
%imagen=imread(ruta);
% figure
% imshow(imagen)
% title('Imagen Original')
hsvi=rgb2hsv(imagen);
Mask = (hsvi(:,:,3)>0.068);
% figure
% imshow(Mask);
% title('Capa 3 de hsv imagen')
gray_image = rgb2gray(imagen);
% figure
% imshow(gray_image);
% title('Imagenblanconegro')
%erosionar la capa 3 hsv
J = imerode(Mask,strel('disk',14));
% figure
% imshow(J);
% title('M erosionado')
%dilatar la capa 3 hsv
J = imdilate(J,strel('disk',13));
% figure
% imshow(J);
% title('J dilatado')
%negamos la imagen.
J = ~J;
% figure
% imshow(J);
%nextraemos el borde.
J= imclearborder(J);
% figure
% imshow(J);
%contamos las manchas.
[labeledImage0, manchas] = bwlabel(J);
% disp("Manchas")
% disp(numbercircles);
%intesificar la imagen y sobresaltar los colores blancos y negros.
gray_image = imadjust(gray_image,[0.3 0.7],[]);
% figure,imshow(gray_image)
% title('Intesificar colores imagen')
%binarizas la imagen
bin = imbinarize(gray_image);
%borra todo lo negro y se queda solo con lo blanco
bin = imclearborder(bin);
%elimina los hueco blanco que tienen menor de 10 pixeles.
bin = bwareaopen(bin, 10);
%te devuelde componentes conectado por default 8 objetos.
[labeledImage1, globulosblancos] = bwlabel(bin);
% m = regionprops(labeledImage0);
% figure,imshow(labeledImage0)
% title('bin')
% disp('Globulos blancos')
% disp(numbercircles0)
%En la imagen intesifica buscamos los bordes.
%Las figuras pegadas a los bordes de la imagen no las cuentas
%extrae el umbral de los bordes de las figuras.
[~, threshold] = edge(gray_image, 'canny');
cc = 1.5;
%te la la imagen bordeada.
imagen_bordeada = edge(gray_image,'canny', threshold*cc);
%borramos todo lo negro.
imagen_bordeada1= imclearborder(imagen_bordeada);
% rellenamos los edges cerrados.
imagen_sin_agujeros = imfill(imagen_bordeada1,'holes');
% extraemos los mayores a 20 pixeles.
imagen_sin_agujeros = bwareaopen(imagen_sin_agujeros, 20);
% figure
% imshow(imagen_sin_agujeros)
% title('imagen_sin_agujeros')
% [labeledImage2, numbercircles2] = bwlabel(imagen_sin_agujeros);
%Extraemos todas las areas de las figuras
stats = regionprops('table',imagen_sin_agujeros,'Area');
stats = sortrows(stats,'Area');
A=table2array(stats);
% disp(A);
%planteamos que el 23% de lo extraido es basura,debido a que A esta ordenado suponesmo que las menores
%areas son basuras, esto se podria arreglar con machine leerning.
mfloor=A( floor(length(A)*0.23));
%filtramos solo por el area
extractCircle = bwpropfilt(imagen_sin_agujeros,'Area',[mfloor max(A)]);
% figure
% imshow(extractCircle);
% title('RBC Extraídas')
% Contar el numero de circulos
f = bwconncomp(extractCircle, 8);
totalCelulas = f.NumObjects;
globulosRojos=totalCelulas-globulosblancos-manchas;
n=[totalCelulas globulosRojos globulosblancos manchas];
end