Procesamiento de imágenes Moyamoya: 8 pasos
Procesamiento de imágenes Moyamoya: 8 pasos
Anonim
Procesamiento de imágenes Moyamoya
Procesamiento de imágenes Moyamoya

Moyamoya, "bocanada de humo", es una enfermedad rara causada por el bloqueo de las arterias en los ganglios basales, que es un área en la base del cerebro. La enfermedad es una enfermedad cerebrovascular progresiva que afecta principalmente a los niños. Los síntomas de moyamoya incluyen un accidente cerebrovascular inicial, mini accidentes cerebrovasculares constantes, debilidad muscular, parálisis o convulsiones como resultado del estrechamiento progresivo de las arterias. Sin tratamiento, moyamoya causará problemas con el habla, deterioro sensorial y daños en la conciencia. En nuestro proyecto, utilizaremos MATLAB para preprocesar una imagen de MRI o MRA utilizando varios filtros para reducir el ruido dentro de la imagen y localizar el área afectada. Además, utilizaremos una mejora de funciones para localizar las áreas afectadas con mayor precisión. Además, luego realizaremos una prueba t de muestras independientes para determinar si existe una diferencia significativa entre la cantidad de vasos sanguíneos en un cerebro normal en comparación con un cerebro afectado por moyamoya.

Paso 1: Encuentre resonancias magnéticas y resonancias magnéticas de un cerebro normal y un cerebro afectado por Moyamoya

Encuentre resonancias magnéticas y resonancias magnéticas de un cerebro normal y un cerebro afectado por Moyamoya
Encuentre resonancias magnéticas y resonancias magnéticas de un cerebro normal y un cerebro afectado por Moyamoya
Encuentre resonancias magnéticas y resonancias magnéticas de un cerebro normal y un cerebro afectado por Moyamoya
Encuentre resonancias magnéticas y resonancias magnéticas de un cerebro normal y un cerebro afectado por Moyamoya
Encuentre resonancias magnéticas y resonancias magnéticas de un cerebro normal y un cerebro afectado por Moyamoya
Encuentre resonancias magnéticas y resonancias magnéticas de un cerebro normal y un cerebro afectado por Moyamoya
Encuentre resonancias magnéticas y resonancias magnéticas de un cerebro normal y un cerebro afectado por Moyamoya
Encuentre resonancias magnéticas y resonancias magnéticas de un cerebro normal y un cerebro afectado por Moyamoya

Estas imágenes son los escaneos que usamos para el proyecto que encontramos en línea. Las dos imágenes con los vasos sanguíneos ubicados en el medio son imágenes por resonancia magnética, mientras que las otras dos imágenes son imágenes por resonancia magnética.

Los siguientes enlaces son donde se encuentran estas imágenes:

static.cambridge.org/resource/id/urn:cambr…

static.cambridge.org/resource/id/urn:cambr…

Paso 2: cargue imágenes en MATLAB y asigne imágenes a una variable para mostrar imágenes

Cargue imágenes en MATLAB y asigne imágenes a una variable para mostrar imágenes
Cargue imágenes en MATLAB y asigne imágenes a una variable para mostrar imágenes

Para comenzar el proceso, comience limpiando la ventana de comandos, cierre todas las figuras y gráficos posibles que ya estén abiertos y borre las variables ya asignadas en su espacio de trabajo.

Después, cree un bucle for de 1 a 2 usando el comando i = [1: 2]

Después, cargue las imágenes MRA usando el comando imread (sprintf ('filename%.filetype', i)) para leer las imágenes de los archivos especificados por el nombre del archivo seguido del número usado para el bucle usando sprintf para cargar por lotes y asignar a una variable.

Luego, para mostrar la imagen en una figura, use el comando imshow (I).

Para asignar un mapa de colores gris, use el comando mapa de colores (gris).

Para eliminar completamente el color y convertir la matriz 3D de las imágenes en 2D, use el comando rgb2gray (I) y asígnelo a una variable separada.

Luego cargue las imágenes de resonancia magnética usando el comando previamente establecido o imread (sprintf ('filename%.filetype', i)) y asígnelo a una nueva variable

Repita el comando rgb2gray con la nueva variable utilizada para las imágenes de resonancia magnética.

Si es necesario, puede cambiar el tamaño de una imagen usando el comando imresize (A, scale) y asignarla a una variable separada.

Paso 3: Mejore las estructuras alargadas en la imagen de intensidad con el filtrado multiescala

Mejore las estructuras alargadas en la imagen de intensidad con el filtrado multiescala
Mejore las estructuras alargadas en la imagen de intensidad con el filtrado multiescala

Usando una nueva variable, use el comando fibermetric (A) para mejorar las estructuras tubulares en las imágenes

Con la variable anterior, use el comando histeq (B) para mejorar las ecualizaciones del histograma transformando la intensidad de las imágenes y asignándola a una nueva variable.

Muestre el histograma usando el comando imhist (B)

Cree una nueva variable para crear un umbral para el filtro. En este caso, asigne la variable anterior> 0,875, filtrando la intensidad de píxeles por debajo del valor de 0,875

Después, cree una nueva figura y use el comando imshow (A) para mostrar la nueva imagen filtrada.

Paso 4: ejecutar un filtro de mediana 2D

Ejecutar un filtro de mediana 2D
Ejecutar un filtro de mediana 2D

Usando el comando medfilt2 (A, [m n]), ejecute un filtro de mediana 2D, donde cada píxel de salida contiene el valor mediano en el límite mxn alrededor del píxel respectivo en la imagen de entrada.

Cree una nueva figura y use imshow (A) para mostrar la imagen filtrada mediana.

Paso 5: enmascara la imagen

Enmascarar la imagen
Enmascarar la imagen

Usando la imagen filtrada mediana, use el comando [LabelImage, numberOfBlots] = bwlabel (A) para contar el número de manchas blancas en la imagen.

Luego, use la función region props states = regionprops (labelImage, 'Area') para calcular las áreas de cada mancha o vaso sanguíneo

Asignar todas las áreas en una variable

Luego, usando otra variable, cuente el número de borrones que exceden los 50 píxeles

Después, clasifique las manchas que estén por debajo de 50 píxeles en orden descendente usando el comando [sortedAreas, sortedIndicies] = sort (Areas, 'descender')

Luego, usando otra variable, use el comando ismember (labelImage, sortedIndicies (1: numberToExtract)) para devolver una matriz con elementos de labelImage se encuentran en sortedIndicies desde el número 1 hasta el número de vasos sanguíneos para devolver un 1 lógico (verdadero) o un 0 lógico (falso).

Con la variable del paso anterior, busque los puntos que sean verdaderos (valores> 0) y cree una matriz lógica para hacer una imagen binaria y asígnela a una nueva variable.

Cree una nueva figura y use imshow (A) la nueva imagen binaria.

Luego, invierta la imagen usando el comando imcomplement (A) y asígnela a una variable diferente.

Para crear una imagen enmascarada, use una nueva variable con el comando resizedimage. * Uint8 (invertedimage)

Cree una nueva figura y use imshow (A) para mostrar la imagen enmascarada.

Para finalizar todo el código, asegúrese de usar el comando 'end' para finalizar todo el ciclo for

Paso 6: seleccione los análisis de MRA para pruebas estadísticas

Seleccione los análisis de MRA para pruebas estadísticas
Seleccione los análisis de MRA para pruebas estadísticas
Seleccione los escaneos MRA para pruebas estadísticas
Seleccione los escaneos MRA para pruebas estadísticas
Seleccione las exploraciones MRA para pruebas estadísticas
Seleccione las exploraciones MRA para pruebas estadísticas

Para prepararse para las pruebas estadísticas, seleccione las exploraciones MRA que se utilizarán para la prueba t de muestras independientes. Debido a que nuestras dos muestras serán cerebros afectados de Moyamoya y cerebros normales, seleccione una cantidad decente de exploraciones MRA de cada grupo.

Paso 7: Calcule el área de los vasos sanguíneos en preparación para las pruebas estadísticas

Calcule el área de los vasos sanguíneos en preparación para las pruebas estadísticas
Calcule el área de los vasos sanguíneos en preparación para las pruebas estadísticas

La prueba estadística se centrará en la longitud o la cantidad de vasos sanguíneos que se muestran en las exploraciones de MRA. Por lo tanto, debemos calcular el área de los vasos sanguíneos antes de la comparación.

Empiece por filtrar los ARM de cerebros normales y calcular la cantidad de vasos sanguíneos. Para hacer esto, ejecute un bucle for. Como hay tres imágenes, la condición será i = [1: 3].

Abra la imagen con el comando imread y asígnela a una variable.

A continuación, cree una declaración if / else con el comando if, else. Para la instrucción if, use el comando size (A, 3) == 3, donde A es la variable utilizada para abrir la imagen, para crear una instrucción if para cuando la tercera dimensión de la matriz sea 3. Luego, convierta la imagen a 2D y deshacerse del color usando el comando rgb2gray (A) y asignarlo a una nueva variable. Utilice el comando imresize (A, [m n]) para cambiar el tamaño de la imagen. En este caso, cambiamos el tamaño de las imágenes a una matriz de 1024 x 1024. Para mejorar las estructuras tubulares de la imagen, vuelva a utilizar el comando fibermetric y asígnelo a una nueva variable.

Lo siguiente es para la declaración else. Si la imagen no es una matriz 3D, queremos omitir la conversión. Haga lo mismo que la instrucción if, pero sin el comando rgb2gray (A).

Cree una nueva variable, configurándola igual a la variable del paso de fibra métrica mayor que 0.15. Esto establece el umbral de la imagen para intensidades superiores a 0,15.

Repetiremos las líneas de códigos de los pasos 4 y 5 del instructable desde la línea del filtro mediano hasta la línea imshow (I). Después, use el comando sum (I (:)) para sumar todos los píxeles que forman los vasos sanguíneos y asígnelo a una variable separada. Nombra una nueva variable NormalBloodVessels (i) y configúrala igual a la variable del comando sum (I (:)). Esto agrega los datos a la matriz.

Termine el ciclo y repita, pero para los ARM de los cerebros afectados por Moyamoya. Nombra la variable al final MoyaMoyaBloodVessels (i) para no confundirla con las MRA cerebrales normales.

Paso 8: ejecutar una prueba T de muestras independientes

Ejecutar una prueba T de muestras independientes
Ejecutar una prueba T de muestras independientes

Dado que hay dos muestras independientes y una población pequeña, ejecute una prueba t de muestras independientes.

Cree y nombre una función que ejecute una prueba t de muestras independientes para determinar si la cantidad de vasos sanguíneos en las ARM de cerebros normales es significativamente igual o no a la de las ARM de cerebros afectados por Moyamoya.

Muestre el conjunto de hipótesis para la prueba usando el comando disp ('X'). En la primera línea, muestre "Hipótesis para la prueba t de dos muestras". En la segunda línea, muestre "H0 = La cantidad de vasos sanguíneos de un cerebro normal es igual a la cantidad de vasos sanguíneos de un cerebro con la enfermedad de Moyamoya", para establecer la hipótesis nula. En la tercera línea, muestre "HA = La cantidad de vasos sanguíneos de un cerebro normal no es igual a la cantidad de vasos sanguíneos de un cerebro con la enfermedad de Moyamoya". para enunciar la hipótesis alternativa.

Utilizando un intervalo de confianza del 95% y un tamaño de muestra de 3, calcule la puntuación t utilizando el comando tinv ([0,025 0,975], 2) y asigne la variable t. Utilice el comando var (NormalBloodVessels) y var (MoyaMoyaBloodVessels) y asígnelos a variables para calcular las varianzas de ambos conjuntos de datos.

Compruebe si las variaciones son casi iguales o no. Haga esto creando una declaración if / else con el comando if, else. Para la condición en la declaración if, escriba A / B == [0.25: 4], donde A es la variable que explica la variación de los vasos sanguíneos normales y B es la variable que explica la variación de los vasos sanguíneos de Moyamoya. 0.25 y 4 provienen de una estimación general para determinar si las varianzas son iguales o no. Luego, ejecute la prueba t de dos muestras con [h, p] = ttest2 (A, B, 0.05, 'ambos', 'igual'), siendo A y B las mismas variables mencionadas anteriormente. Para la instrucción else, use [h, p] = ttest2 (A, B, 0.05, 'both', 'unequal') para ejecutar una prueba t de dos muestras en el caso en que las varianzas no sean iguales. Finalice la declaración if / else. Esto calculará p.

Cree una declaración if / else que muestre una conclusión basada en el valor de p. La condición para la instrucción if será p> 0.05. Dado que normalmente no rechazamos la hipótesis nula cuando el valor de p es mayor que 0.05, use el comando disp ('X') para mostrar "Debido a que el valor p es mayor que 0.05, fallamos en rechazar la hipótesis nula" y " Por lo tanto, no rechazamos que la cantidad de vasos sanguíneos de un cerebro normal sea igual a la de un cerebro con la enfermedad de Moyamoya ". En la declaración else, dado que normalmente rechazamos la hipótesis nula cuando el valor de p está por debajo de 0.05, use el comando disp ('X') para mostrar "Debido a que el valor de p es menor que 0.05, rechazamos la hipótesis nula" y " Por lo tanto, no rechazamos que la cantidad de vasos sanguíneos de un cerebro normal no sea igual a la de un cerebro con la enfermedad de Moyamoya ". Finalice la declaración if / else.