Você está na página 1de 9

2.1 Desarrolle el siguiente código en el script de Matlab.

(Asegúrese de estar trabajando


en la carpeta que ya se ha creado). Para esta unidad el estudiante debe seleccionar 3
imágenes enfermas y 3 imágenes sanas sanas (la base de datos será proporcionada
por el tutor, por favor, solicitarla por correo interno)

El código a utilizar es el que ya se implementó en la fase 2, en el ejercicio 2.1. La


combinación de numpixel y umbral, debe ser única para las 6 imágenes y debe ser la que
detecte por lo menos el 70% del “tumor” en las 3 imágenes enfermas. Es decir, el
estudiante no debe hacer un código por cada imagen, sino un código para todas las
imágenes proporcionadas por el tutor.

Nota: Si no está trabajando en la carpeta donde se encuentra la imagen guardada, al realizar


el código le saldrá error.

Nota: El filtro utilizado para este experimento es el generado después de la binarización (fase
2, ejercicio 2.1), si el estudiante utiliza el filtro que se obtuvo después de la dilatación no
obtendrá el puntaje correcto de este experimento.

a. Explique cada línea de código.


clc
clear all
close all
% Carlos Andres Narvaez
HojaEnferma1=imread('Enferma5.jpg');
HojaEnferma2=imread('Enferma6.jpg');
HojaEnferma3=imread('Enferma7.jpg');
HojaEnferma1=im2double(HojaEnferma1);
HojaEnferma2=im2double(HojaEnferma2);
HojaEnferma3=im2double(HojaEnferma3);
HojaSana1=imread('Sana5.jpg');
HojaSana2=imread('Sana6.jpg');
HojaSana3=imread('Sana7.jpg');
HojaSana1=im2double(HojaSana1);
HojaSana2=im2double(HojaSana2);
HojaSana3=im2double(HojaSana3);
%Binarozacion de las imaganes
umbral=0.55;
binHojaEnferma1=im2bw(HojaEnferma1,umbral);
binHojaEnferma2=im2bw(HojaEnferma2,umbral);
binHojaEnferma3=im2bw(HojaEnferma3,umbral);
binHojaSana1=im2bw(HojaSana1,umbral);
binHojaSana2=im2bw(HojaSana2,umbral);
binHojaSana3=im2bw(HojaSana3,umbral);
%Configuracion de 200 pixeles
numpixels=100;
filtro1=bwareaopen(binHojaEnferma1,numpixels);
filtro2=bwareaopen(binHojaEnferma2,numpixels);
filtro3=bwareaopen(binHojaEnferma3,numpixels);
filtro11=bwareaopen(binHojaSana1,numpixels);
filtro22=bwareaopen(binHojaSana2,numpixels);
filtro33=bwareaopen(binHojaSana3,numpixels);
se3=strel('line',8,3 ); %
crea un elemento de estructuración lineal que es simétrico con respecto al centro del
vecindario. grados especifica el ángulo (en grados) de la línea según se mide en sentido
contrario a las agujas del reloj desde el eje horizontal. 8 es aproximadamente la distancia
entre los centros de los miembros del elemento estructurante en los extremos opuestos de la
línea.
dilatacion1=imdilate(filtro1,se3);
dilatacion2=imdilate(filtro2,se3);
dilatacion3=imdilate(filtro3,se3);
dilatacion11=imdilate(filtro11,se3);
dilatacion22=imdilate(filtro22,se3);
dilatacion33=imdilate(filtro33,se3);
[Lo1 num1]=bwlabel(dilatacion1);
prop1=regionprops(Lo1);
[Lo2 num2]=bwlabel(dilatacion2);
prop2=regionprops(Lo2);
[Lo3 num3]=bwlabel(dilatacion3);
prop3=regionprops(Lo3);
[Lo11 num11]=bwlabel(dilatacion11);
prop11=regionprops(Lo11);
[Lo22 num22]=bwlabel(dilatacion22);
prop22=regionprops(Lo22);
[Lo33 num33]=bwlabel(dilatacion33);
prop33=regionprops(Lo33);
%representaciones de las imágenes
figure;
subplot(3,5,1),imshow(HojaEnferma1), title('Originial Enferma5');
subplot(3,5,2),imshow(binHojaEnferma1), title('umbral 0.55 Enferma5');
subplot(3,5,3),imshow(filtro1), title('100 pixeles Enferma5');
subplot(3,5,4),imshow(dilatacion1), title('dilatacion Enferma5');
subplot(3,5,5),imshow(Lo1),title('bwlabel Enferma5');
subplot(3,5,6),imshow(HojaEnferma2), title('Originial Enferma6');
subplot(3,5,7),imshow(binHojaEnferma2), title('umbral 0.55 Enferma6');
subplot(3,5,8),imshow(filtro2), title('100 pixeles Enferma6');
subplot(3,5,9),imshow(dilatacion2), title('dilatacion Enferma6');
subplot(3,5,10),imshow(Lo2),title('bwlabel Enferma6');
subplot(3,5,11),imshow(HojaEnferma3), title('Originial Enferma7');
subplot(3,5,12),imshow(binHojaEnferma3), title('umbral 0.55 Enferma7');
subplot(3,5,13),imshow(filtro3), title('97 pixeles Enferma7');
subplot(3,5,14),imshow(dilatacion3), title('dilatacion Enferma7');
subplot(3,5,15),imshow(Lo3),title('bwlabel Enferma7');
figure;
subplot(3,5,1),imshow(HojaSana1), title('Originial Sana5');
subplot(3,5,2),imshow(binHojaSana1), title('umbral 0.45 Sana5');
subplot(3,5,3),imshow(filtro11), title('200 pixeles Sana5');
subplot(3,5,4),imshow(dilatacion11), title('dilatacion Sana5');
subplot(3,5,5),imshow(Lo11),title('bwlabel Sana5');
subplot(3,5,6),imshow(HojaSana2), title('Originial Sana6');
subplot(3,5,7),imshow(binHojaSana2), title('umbral 0.45 Sana6');
subplot(3,5,8),imshow(filtro22), title('200 pixeles Sana6');
subplot(3,5,9),imshow(dilatacion22), title('dilatacion Sana6');
subplot(3,5,10),imshow(Lo22),title('bwlabel Sana6');
subplot(3,5,11),imshow(HojaSana3), title('Originial Sana7');
subplot(3,5,12),imshow(binHojaSana3), title('umbral 0.45 Sana7');
subplot(3,5,13),imshow(filtro33), title('200 pixeles Sana7');
subplot(3,5,14),imshow(dilatacion33), title('dilatacion Sana7');
subplot(3,5,15),imshow(Lo33),title('bwlabel Sana7');

%muestra el área mínima de la imagen con respecto a la regionprops

minArea1=min([prop1.Area]);
MaxArea1=max([prop1.Area]);
minArea2=min([prop2.Area]);
MaxArea2=max([prop2.Area]);
minArea3=min([prop3.Area]);
MaxArea3=max([prop3.Area]);

minArea11=min([prop11.Area]);
MaxArea11=max([prop11.Area]);
minArea22=min([prop22.Area]);
MaxArea22=max([prop22.Area]);
minArea33=min([prop33.Area]);
MaxArea33=max([prop33.Area]);

b. ¿Cómo funciona y que datos obtienen de la función “bwlabel”?

Se aplica la función bwlabel para obtener los objetos contenidos en la imagen binarizada
considerando la conectividad conexión-8

c. ¿Qué valor se obtiene en las variables “Lo” y en “num”?

Devuelve una matriz L, del mismo tamaño que BW, que contiene etiquetas para los
objetos conectados en BW. n puede tener un valor de 4 u 8, donde 4 especifica objetos
conectados a 4 y 8 objetos conectados a 8; si se omite el argumento, el valor
predeterminado es 8.
El valor que devuelve la variable son números binarios.
Devuelve en núm el número de objetos conectados encontrados en BW.

d. ¿Cómo funciona y que datos obtienen de la función “regionprops”?

Regionprops es una función muy útil para el procesamiento morfológico de una


imagen. El siguiente script es una aplicación de la función que cuenta el número de
objetos de una imagen y ubica su posición dentro de la misma.
2.2. Cada estudiante debe obtener las siguientes características de cada una de 3 imágenes
enfermas y de las 3 imágenes sanas. Las características las debe guardar en una matriz
de Excel donde se tenga la siguiente información:

Nota: todas las características deben ser obtenidas del mismo código, es decir el mismo
umbral y el mismo filtro, o crear un código adaptativo por resolución de imagen. Asegúrese
de hacer el mismo cuadro que se encuentra a continuación en Excel.

Cantidad de Área máxima Área mínima Clasificación


objetos en la
imagen
Imagen 5 12908 186 1
enferma 1
Imagen 3 65658 204 1
enferma 2
Imagen 2 19757 1226 1
enferma 3
Imagen sana 1 5 34787 653 0

Imagen sana 2 8 3930 159 0

Imagen sana 3 2 70830 198 0


El estudiante debe anexar el resultado e cada imagen procesada con un pantallazo de toda la
ventana de Matlab, donde se observe: ComandWindows, Workspace, y Current Folder.
De acuerdo a la investigación que usted ha realizado sobre máquinas de soporte vectorial,
sabe que la clasificación está dada en binario, por lo tanto, 1 será nuestra clasificación para
la imagen enferma y 0 para la imagen sana.

 Guarde la tabla anterior como “datos.xlsx”


2.3 Desarrolle el siguiente código en el script de Matlab. (Asegúrese de estar trabajando en
la carpeta que ya se ha creado).

Nota: Si no está trabajando en la carpeta donde se encuentra la imagen guardada, al


realizar el código le saldrá error.

donde datos.xlsx es la tabla anteriormente creada y prueba.xlsx es una tabla que contiene
nuevas características con imágenes diferentes a las 3 enfermas y las 3 sanas del punto
anterior, ya que estas son con las que se entrenó la máquina (solicitar por correo interno
a su tutor, la base de datos de las imágenes de prueba).

 El estudiante debe incluir en el documento de entrega tanto la tabla de las


características con las que entreno la máquina, es decir las contenidas en datos.xlsx y
la tabla que contiene las características nuevas contenidas en prueba.xlsx.
 Explique cada línea del código.
clc
clear all
close all
%Carlos Andrés Narvaez Carvajal
datos = xlsread('datos.xlsx');% lee la primera hoja de cálculo del
libro de hojas de cálculo de Microsoft® Excel® denominado
datos.xlsx y devuelve los datos numéricos en una matriz.
caracteristicas=datos(1:end,1:3);%crea la variable caracteristicas
y del documento seleccionado anteriormente se dictamina leer las
columas de 1 a 3.
entrenamiento=datos(1:end,4);%crea la variable entrenamiento y
leera del documento datos los datos de la columna 4
%entrenamiento maquina
svmStruct=fitcsvm(caracteristicas,entrenamiento,'Standardize',true,
'KernelFunction','linear','KernelScale','auto');% especifica
opciones usando uno o más argumentos de pares nombre-valor para
este caso tomará las variables caracteristicas y entrenamiento;
además de los argumentos de entrada en sintaxis anteriores. Por
ejemplo, puede especificar el tipo de validación cruzada, el costo
de la clasificación errónea y el tipo de función de transformación
de puntuación.
prueba=xlsread('prueba.xlsx');%lee la primera hoja de cálculo del
libro de hojas de cálculo de Microsoft® Excel® denominado
prueba.xlsx y devuelve los datos numéricos en una matriz.
xprueba=prueba(1:end,1:3);% crea la variable xprueba y del
documento seleccionado anteriormente se dictamina leer las columas
de 1 a 3.
clasificacion=predict(svmStruct,xprueba);%devuelve un vector de
etiquetas de clase predichas para los datos del predictor en la
tabla o matriz, xprueba, en función del modelo de clasificación de
análisis discriminante entrenado svmStruct.
2.4 Clasificador de umbral: con las dos primeras características (cantidad de objetos y
área máxima), el estudiante realizará el clasificador por umbral. El estudiante debe
investigar cómo realizar este clasificador, anexar el código y resultados obtenidos.

Você também pode gostar