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. ex perimento. a. Explique cada línea de código. clc clear all close all % Carlos Andres Narvaez HojaEnferma1=imread('Enferma5.jpg' HojaEnferma1=imread( 'Enferma5.jpg'); ); HojaEnferma2=imread('Enferma6.jpg' HojaEnferma2=imread( 'Enferma6.jpg'); ); HojaEnferma3=imread('Enferma7.jpg' HojaEnferma3=imread( 'Enferma7.jpg'); ); HojaEnferma1=im2double(HojaEnferma1); HojaEnferma2=im2double(HojaEnferma2); HojaEnferma3=im2double(HojaEnferma3); HojaSana1=imread('Sana5.jpg' HojaSana1=imread( 'Sana5.jpg'); ); HojaSana2=imread('Sana6.jpg' HojaSana2=imread( 'Sana6.jpg'); ); HojaSana3=imread('Sana7.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' se3=strel('line',8,3 ,8,3 ); %
crea un elemento de estructuración lineal que qu e 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'); Enferma5'); subplot(3,5,2),imshow(binHojaEnferma1), title('umbral 0.55 Enferma5'); Enferma5'); subplot(3,5,3),imshow(filtro1), title('100 pixeles Enferma5'); Enferma5'); subplot(3,5,4),imshow(dilatacion1), title('dilatacion Enferma5'); Enferma5'); subplot(3,5,5),imshow(Lo1),title('bwlabel subplot(3,5,5),imshow(Lo1),title( 'bwlabel Enferma5'); Enferma5'); subplot(3,5,6),imshow(HojaEnferma2), title('Originial Enferma6'); Enferma6'); subplot(3,5,7),imshow(binHojaEnferma2), title('umbral 0.55 Enferma6'); Enferma6'); subplot(3,5,8),imshow(filtro2), title('100 pixeles Enferma6'); Enferma6'); subplot(3,5,9),imshow(dilatacion2), title('dilatacion Enferma6'); Enferma6'); subplot(3,5,10),imshow(Lo2),title('bwlabel subplot(3,5,10),imshow(Lo2),title( 'bwlabel Enferma6'); Enferma6'); subplot(3,5,11),imshow(HojaEnferma3), title('Originial Enferma7'); Enferma7'); subplot(3,5,12),imshow(binHojaEnferma3), title('umbral 0.55 Enferma7'); Enferma7'); subplot(3,5,13),imshow(filtro3), title('97 pixeles Enferma7'); Enferma7'); subplot(3,5,14),imshow(dilatacion3), title('dilatacion Enferma7'); Enferma7'); subplot(3,5,15),imshow(Lo3),title('bwlabel subplot(3,5,15),imshow(Lo3),title( 'bwlabel Enferma7'); Enferma7'); figure; subplot(3,5,1),imshow(HojaSana1), title('Originial Sana5'); Sana5');
subplot(3,5,2),imshow(binHojaSana1), title('umbral 0.45 Sana5'); Sana5'); subplot(3,5,3),imshow(filtro11), title('200 pixeles Sana5'); Sana5'); subplot(3,5,4),imshow(dilatacion11), title('dilatacion Sana5'); Sana5'); subplot(3,5,5),imshow(Lo11),title('bwlabel subplot(3,5,5),imshow(Lo11),title( 'bwlabel Sana5'); Sana5'); subplot(3,5,6),imshow(HojaSana2), title('Originial Sana6'); Sana6'); subplot(3,5,7),imshow(binHojaSana2), title('umbral 0.45 Sana6'); Sana6'); subplot(3,5,8),imshow(filtro22), title('200 pixeles Sana6'); Sana6'); subplot(3,5,9),imshow(dilatacion22), title('dilatacion Sana6'); Sana6'); subplot(3,5,10),imshow(Lo22),title('bwlabel subplot(3,5,10),imshow(Lo22),title( 'bwlabel Sana6'); Sana6'); subplot(3,5,11),imshow(HojaSana3), title('Originial Sana7'); Sana7'); subplot(3,5,12),imshow(binHojaSana3), title('umbral 0.45 Sana7'); Sana7'); subplot(3,5,13),imshow(filtro33), title('200 pixeles Sana7'); Sana7'); subplot(3,5,14),imshow(dilatacion33), title('dilatacion Sana7'); Sana7'); subplot(3,5,15),imshow(Lo33),title('bwlabel subplot(3,5,15),imshow(Lo33),title( 'bwlabel Sana7'); 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 pued e 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 u na 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 objetos en la imagen
Área mínima
Clasificación
5
12908
186
1
3
65658
204
1
2
19757
1226
1
Imagen sana 1 5
34787
653
0
Imagen sana 2 8
3930
159
0
Imagen enferma 1 Imagen enferma 2 Imagen enferma 3
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 u na 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 qu e 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 co ntenidas 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' 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 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 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' svmStruct=fitcsvm(caracteristicas,entrenamiento, 'Standardize',true, ,true, 'KernelFunction', 'KernelFunction' ,'linear' 'linear', ,'KernelScale' 'KernelScale', ,'auto' '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' prueba=xlsread( 'prueba.xlsx'); );%lee %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);% 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 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.