Tabla de contenido:
- Paso 1: requisitos previos
- Paso 2: requisitos previos (continuación)
- Paso 3: requisitos previos (continuación)
- Paso 4: requisitos previos (continuación)
- Paso 5: Limpiar Matlab para preparar el código en ejecución
- Paso 6: seleccione 10 imágenes de ojos normales y 10 imágenes con síntomas de retinopatía diabética
- Paso 7: seleccione 10 imágenes de ojos normales y 10 imágenes con síntomas de retinopatía diabética (cont.)
- Paso 8: Cree 2 variables (normales y diagnosticadas) y configúrelas como 0
- Paso 9: cree un bucle for para cargar automáticamente imágenes normales
- Paso 10: Cree un bucle for para cargar automáticamente imágenes normales (cont.)
- Paso 11: Recorta los bordes de la imagen
- Paso 12: cree una imagen en escala de grises
- Paso 13: crea una imagen contrastada
- Paso 14: mejora la imagen de contraste
- Paso 15: cree un filtro promedio
- Paso 16: combine el filtro de promediado con la imagen contrastada
- Paso 17: crea una nueva máscara media restando píxeles
- Paso 18: Cree una imagen filtrada binaria
- Paso 19: eliminar las manchas más pequeñas que se encuentran en las imágenes filtradas
- Paso 20: Cree un elemento de estructuración de disco
- Paso 21: Realizar operaciones de cierre morfológico
- Paso 22: Encuentre los objetos con conectividad de al menos 8
- Paso 23: Encuentre el número máximo de píxeles conectados
- Paso 24: establezca los valores máximos de píxeles en 0 y busque píxeles con> = 26 píxeles de conectividad
- Paso 25: eliminar los vasos sanguíneos de la imagen
- Paso 26: Visualización de la figura
- Paso 27: Retire los vasos y cuente las gotas de sangre
- Paso 28: diagnostique la imagen de la retina según la cantidad de coágulos de sangre identificados
- Paso 29: si hay más de 5 manchas …
- Paso 30: Repita el proceso de filtrado para imágenes normales con valores de dígitos de imagen como 2 y 3
- Paso 31: Repita todo el proceso para las imágenes diagnosticadas
- Paso 32: Análisis estadístico
- Paso 33: Encontrar el intervalo de confianza
Video: Diagnóstico automatizado de la retinopatía diabética a través de MATLAB: 33 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
(Ver esquema de código arriba)
La retinopatía diabética es una enfermedad ocular relacionada con la diabetes causada por niveles altos de azúcar en sangre. Los niveles altos de azúcar en sangre hacen que los vasos sanguíneos de las retinas se hinchen, lo que conduce a vasos sanguíneos agrandados e incluso fugas de vasos, lo que conduce a manchas oscuras en las imágenes de la retina. Con este código, nuestro objetivo es utilizar la aparición de manchas de fugas en los vasos sanguíneos como un indicador de retinopatía diabética de fondo, aunque se requerirían más técnicas de diagnóstico en el mundo real. El objetivo de este código es automatizar el procesamiento de imágenes y el diagnóstico de imágenes retinianas para identificar signos de retinopatía diabética que se muestran a través de manchas oscuras en las imágenes retinianas.
Se procesaron 10 imágenes retinianas normales y 10 imágenes retinianas diagnosticadas a través de un código que primero lee y filtra las imágenes y luego cuantifica las manchas oscuras para determinar si los síntomas de la retinopatía diabética están presentes, según un umbral determinado. Luego, los resultados se imprimen en la ventana de comandos para que el espectador los interprete.
Paso 1: requisitos previos
1. Asegúrese de haber descargado el programa MATLAB en su computadora.
2. Descargue el archivo txt que se encuentra en el enlace. (Presione 'ctrl + s' para guardar en el mismo directorio que el código MATLAB)
Paso 2: requisitos previos (continuación)
4. Abra MATLAB y escriba "uiimport" en la ventana de comandos.
5. Seleccione el archivo officialdiagnoses.txt e impórtelo a MATLAB como una matriz de celda.
6. Asegúrese de ver "diagnósticos oficiales" como una variable en el espacio de trabajo.
Paso 3: requisitos previos (continuación)
7. Descargue la función ModWald.m, que puede obtener del código anterior o descárguela de Canvas.
(Código proporcionado por el profesor King y el profesor Choi)
Paso 4: requisitos previos (continuación)
8. Descargue las 400 imágenes sin procesar de la sección de datos de The STARE Project.
Paso 5: Limpiar Matlab para preparar el código en ejecución
Agregar al código:
1. cerrar todo (cierra todas las imágenes abiertas anteriormente)
2. clearvars - excepto los diagnósticos oficiales (borra todas las variables excepto el archivo txt de diagnósticos oficiales importado previamente)
3. cclc (borra la ventana de comandos)
Paso 6: seleccione 10 imágenes de ojos normales y 10 imágenes con síntomas de retinopatía diabética
1. Tome el archivo de texto de diagnóstico y extraiga los nombres de las imágenes. Estos nombres están contenidos en la primera columna del archivo de texto, por lo que para extraerlos escriba 'officialdiagnoses (:, 1)'. La matriz de nombres de imágenes se asignó a una variable, "all_image_numbers"
2. Convierta la variable all_image_numbers de una matriz de celdas a una matriz de matriz utilizando la función cell2mat
Paso 7: seleccione 10 imágenes de ojos normales y 10 imágenes con síntomas de retinopatía diabética (cont.)
3. Seleccione 10 imágenes de ojos normales para ejecutar el código. Las imágenes seleccionadas en este caso fueron 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.
Coloque estos números en una matriz y asígnelos a una variable que se llamará al cargar las imágenes.
4. Repita el paso 3 para las imágenes de retina que hayan sido diagnosticadas con retinopatía diabética. Las imágenes seleccionadas en este caso fueron 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.
Paso 8: Cree 2 variables (normales y diagnosticadas) y configúrelas como 0
Cree estas variables antes del ciclo for para inicializar los números de ciclo.
Paso 9: cree un bucle for para cargar automáticamente imágenes normales
1. Crea un bucle for
2. Establezca una variable de conteo (i, en este caso) en una matriz de valores 1-10. Esta variable de recuento se utilizará para llamar a cada imagen individualmente
3. Tome el elemento i en la matriz de imágenes para extraer y convertir el nombre de la imagen de una cadena a un número usando la función num2str.
Encuentre el número de dígitos presentes en el nombre de la imagen usando la función numérica. Asigne este valor a una variable, digits_normal. Este número debe ser 1 para números de un solo dígito, 2 para números de dos dígitos y 3 para números de tres dígitos. Esta información se utilizará para llamar automáticamente a las imágenes.
Paso 10: Cree un bucle for para cargar automáticamente imágenes normales (cont.)
3. Cree una declaración if que contenga las tres posibilidades de los pasos anteriores. Si el nombre de la imagen tiene 1 dígito, la imagen se llamará “im000”, si tiene 2 dígitos, la imagen se llamará “im00”, y si tiene 3 la imagen se llamará “im0”.
4. Debajo de cada instrucción if, asigne una variable para leer "im" debajo de la instrucción if correspondiente con el número apropiado de ceros (como se describe arriba), seguido de la i.
Paso 11: Recorta los bordes de la imagen
Tome la imagen original y aplique un filtro imcrop para eliminar los bordes negros y asigne una variable I_crop. El rectángulo de recorte se especifica mediante una matriz [95, 95, 500, 410].
Paso 12: cree una imagen en escala de grises
Tome la imagen recortada y aplique el filtro rbg2gray para cambiar la imagen a escala de grises. Asigne esta imagen a la variable I2.
Paso 13: crea una imagen contrastada
Tome la imagen I2 y use imadjust para cambiar la escala de los valores de intensidad.
Tome valores que se encuentren dentro del rango [0,2, 0,7] y cambie la escala a [0, 1]. La gamma se establece en 0.8 para hacer que la imagen sea más brillante. Asigne la nueva imagen a I_adjusted.
Paso 14: mejora la imagen de contraste
Tome la imagen I_adjusted y use la función adapthisteq para mejorar el contraste.
La sintaxis de Adapthisteq requiere el nombre de la imagen, I_adjusted, "numTiles", el tamaño de numTiles, "nBins" y el número de bins. El tamaño de numTiles se establece en [8 8], dividiendo la imagen en mosaicos de 8x8 y el número de contenedores se establece en 28. Asigne la imagen a I_constrast.
Paso 15: cree un filtro promedio
Cree una variable llamada 'meanfilt' usando la función fspecial. Ingrese "función promedio" para crear el filtro promedio e inserte [90 90] para el tamaño de la ventana deslizante.
Paso 16: combine el filtro de promediado con la imagen contrastada
Cree una nueva variable llamada mask_mean y use la función imfilter para tomar la imagen I_contrast y aplicar el filtro de media creado previamente.
Paso 17: crea una nueva máscara media restando píxeles
Cree una variable denominada mask_mean2 y utilice la función imsubtract para restar el valor de cada píxel en I_contrast del píxel correspondiente en mask_mean.
Paso 18: Cree una imagen filtrada binaria
Convierta las imágenes en escala de grises a blanco y negro usando imbinarize. Introduzca mask_mean2, "adaptable", "ForegroundPolarity", "oscuro", "Sensibilidad", 0,6. Asigne esta nueva imagen a mask_binarize.
Paso 19: eliminar las manchas más pequeñas que se encuentran en las imágenes filtradas
Elimine los objetos con conectividad de menos de 100 píxeles utilizando la función bwareaopen en mask_binarize y establezca el valor de umbral en 100. Asigne la variable como bw.
Paso 20: Cree un elemento de estructuración de disco
Cree un elemento de estructura de disco (con un radio de 2) usando la función strel. Asignarlo a se.
Paso 21: Realizar operaciones de cierre morfológico
Tome bw y aplique la función imclose al elemento estructural para realizar una operación morfológica de cierre en el objeto.
Paso 22: Encuentre los objetos con conectividad de al menos 8
Tome bw y use bwconncomp para encontrar los objetos con conectividad de al menos 8 en la imagen. Asigne la salida numérica a cc_1.
Paso 23: Encuentre el número máximo de píxeles conectados
Utilice la función cellfun para realizar la función "numel" en cada celda de CC. Esto encuentra el número de elementos en la celda PixelIdxList. Asignar valor a "numPixels".
Encuentre los valores máximos en numPIxels. Asigne el máximo más grande a "más grande" y el índice del valor máximo a "idx".
Paso 24: establezca los valores máximos de píxeles en 0 y busque píxeles con> = 26 píxeles de conectividad
= Conectividad de 26 píxeles "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= Conectividad de 26 píxeles "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 Pixel Connectivity "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">
= 26 Pixel Connectivity "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">
Establezca los píxeles con los valores más grandes en la imagen "bw" en 0, haciendo que los píxeles sean negros.
Encuentre los objetos con una conectividad de al menos 26 píxeles en la imagen usando bwconncomp. Asignar a la variable cc_1.
Paso 25: eliminar los vasos sanguíneos de la imagen
Retire los vasos sanguíneos aún presentes en la imagen utilizando la función bwpropfilt con un rango de [0, 0,9].
[0.9, 1] se excluye porque los valores cercanos a 1 indican una línea. Asignar a "RemoveVessels".
Paso 26: Visualización de la figura
Muestra cada imagen filtrada en una subtrama. Imshow. con entradas de "borde" y "ajustado", muestra cada imagen en una estructura de subtrama. Agregue un título a cada imagen para distinguir qué filtro se utilizó.
Paso 27: Retire los vasos y cuente las gotas de sangre
1. Tome "RemoveVessels" y aplique la función "Centroide" en los accesorios regionales para identificar los centroides de los objetos en la imagen. Estos objetos deben corresponder a los coágulos de sangre presentes en la imagen.
2. Cuente el número de coágulos de sangre identificados tomando la longitud de la matriz del centroide.
Paso 28: diagnostique la imagen de la retina según la cantidad de coágulos de sangre identificados
Utilice las declaraciones if para diagnosticar la imagen según la cantidad de coágulos de sangre identificados.
Si el número de centroides identificados fue menor o igual a 5, la imagen se identificó como normal.
Si el número de centroides era superior a 5, la imagen se diagnosticaba con retinopatía diabética.
El resultado se imprime en la ventana de comandos usando fprintf.
Paso 29: si hay más de 5 manchas …
Repita las instrucciones anteriores para imágenes diagnosticadas como una declaración else. Esta parte se ejecutará si el número de blobs es superior a 5.
Termine la declaración if.
Paso 30: Repita el proceso de filtrado para imágenes normales con valores de dígitos de imagen como 2 y 3
Repita el proceso para el resto de las declaraciones if originales cuando numel (el número de dígitos en el número de la imagen) es igual a 2 y 3. Esto completa el ciclo for para las imágenes normales.
Finaliza el ciclo for.
Paso 31: Repita todo el proceso para las imágenes diagnosticadas
Repita todo el proceso utilizando las imágenes diagnosticadas enumeradas por la matriz "números_para_extraer_diagnosticados".
Asegúrese de revisar cada figura (i) y cámbiela por la figura (i + 10) para que las cifras diagnosticadas aparezcan como imágenes 11 a 20.
Paso 32: Análisis estadístico
1. 'Actual_Diagnosis_Matrix' se utiliza para comparar los resultados con el diagnóstico oficial que se encuentra en el archivo txt. Los primeros 10 ceros indican que las primeras 10 imágenes deberían ser normales. Las últimas 10 indican que las últimas 10 imágenes deben clasificarse como retinopatía diabética.
2. El doble signo igual utilizado para crear 'number_correct' crea una matriz lógica comparando el valor de los elementos correspondientes de 'Actual_Diagnosis_Matrix' con 'Diagnosis_Matrix' creado a partir del bucle for.
Para cada elemento que coincida con el diagnóstico se agregará un 1, lo que significa que el código diagnosticó correctamente esa imagen. Si es incorrecto, agregará un 0 a la matriz.
Luego, tomando la suma de eso, se suman todos los unos. En otras palabras, encuentra la suma de imágenes correctamente diagnosticadas.
3. 'Final_percentage_correct' es el porcentaje calculado de la precisión con la que el código diagnosticó retinopatía diabética. La cantidad de imágenes diagnosticadas correctamente se divide por 20 (la cantidad total de imágenes) y se multiplica por 100 para encontrar el porcentaje de diagnósticos exitosos.
Paso 33: Encontrar el intervalo de confianza
1. Asegúrese de haber descargado ModWald.m para llamarlo como función. Sin la función, tendría que calcular usted mismo el intervalo de confianza utilizando el método de Wald modificado.
2. La función ModWald tiene 2 entradas donde la primera es el número de imágenes correctamente identificadas y la segunda es la cantidad total de imágenes.
3. La función ModWald generará los límites inferior y superior del intervalo de confianza de proporciones para la precisión de los datos muestreados. En otras palabras, le dará un intervalo de porcentajes donde estará el porcentaje real de precisión del código.
4. Utilice fprintf a continuación para generar las estadísticas y el intervalo de confianza en la ventana de comandos.
> fprintf ('%. 0f por ciento de las imágenes de la retina se diagnosticaron correctamente según el diagnóstico oficial. / n / n', Final_percentage_correct)
> fprintf ('El porcentaje real en el que nuestro código diagnosticará correctamente la retinopatía diabética / n caerá en el rango de [%.3f,%.3f], basado en 20 imágenes de muestra / n', lower_bound, upper_bound)
Recomendado:
Control de Led a través de la aplicación Blynk usando Nodemcu a través de Internet: 5 pasos
Control de LED a través de la aplicación Blynk usando Nodemcu a través de Internet: Hola a todos, hoy le mostraremos cómo puede controlar un LED con un teléfono inteligente a través de Internet
Asistencia de estacionamiento Fácil reparación / diagnóstico: 4 pasos
Fácil reparación / diagnóstico del asistente de estacionamiento: Bueno, comencemos, tengo un Chevrolet Avalanche 2010 y tiene 4 sensores de asistente de estacionamiento en su parachoques trasero. Este intratable se puede utilizar en un vehículo a mi leal saber y entender, si tiene el frente o Rea o ambos. Así que fui a mi favorito
Discos duros: diagnóstico, resolución de problemas y mantenimiento: 3 pasos
Discos duros: diagnóstico, resolución de problemas y mantenimiento: ¿Qué es un disco duro? - En pocas palabras, el disco duro es lo que almacena todos sus datos. Alberga el disco duro, donde se encuentran físicamente todos sus archivos y carpetas. La información se almacena magnéticamente en el disco, por lo que permanece en la unidad incluso cuando
Controle los dispositivos a través de Internet a través del navegador. (IoT): 6 pasos
Controle los dispositivos a través de Internet a través del navegador. (IoT): En este Instructable, le mostraré cómo puede controlar dispositivos como LED, relés, motores, etc. a través de Internet a través del navegador web. Y puede acceder a los controles de forma segura en cualquier dispositivo. La plataforma web que utilicé aquí es la visita de RemoteMe.org
Transferencia de archivos a través de su LAN a través de BitTorrent: 6 pasos
Transferencia de archivos a través de su LAN a través de BitTorrent: A veces, es posible que necesite transferir archivos a través de una red a varias computadoras. Si bien puede guardarlo en una unidad flash o en un CD / DVD, tendría que ir a cada computadora y copiar los archivos y puede llevar un tiempo copiar todos los archivos (especialmente con f