[Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

33
.NET en la Medicina Desarrollamos nuestra primera solución aplicada al diagnóstico bioquímico por imagen. Armando Andrés Meabe MSP – MAP Estudiante UNL Santa Fe capital.

description

[Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Transcript of [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Page 1: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

.NET en la MedicinaDesarrollamos nuestra primera solución aplicada al diagnóstico bioquímico por imagen.

Armando Andrés MeabeMSP – MAPEstudiante UNLSanta Fe capital.

Page 2: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)
Page 3: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Inicio como proyecto de estudiantes de informática, en tiempos libres año 2007: Software capaz de reconocer cartas de póker (y jugar solo).

Perfeccionamiento de los métodos del ‘autoPoker’, modelado matemático del algoritmo y ‘evolución’ hacia un sistema de reconocimiento facial (CodeCamp 2008).

Ante la determinación de enfocarse a la medicina; se implementaron conceptos equivalentes a los usados en el reconocimiento facial pero aplicados a escala microscópica.

Orígenes de nuestros proyectos

2007 (autoPoker) 2008 (FaceRec) 2009 (Medicina)Primeros desarrollos en proceso Proceso de imágenes según modelado Reimplementación de técnicas dedigital de imágenes matemático ‘PCA’ ‘faceRec’ aplicadas a tejido humano.

Page 4: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Lógica rudimentaria (2007) Las imágenes eran

bitmaps, siempre iguales por lo que la complejidad del problema era baja. Se procedió a comparar pixel por pixel.

El rendimiento era muy pobre en tiempo real, generalmente colgando la aplicación por el ‘solapamiento’ de pasos y por el exceso de recursividades – ‘stack overflow’.

Se procedió a mejorar el algoritmo.

Page 5: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Mejor algoritmo -> Mejores aplicaciones

Nace ‘faceRec.NET’ (Jidis 08, Ccamp 08)

Evolucionamos la lógica ‘por nuestra cuenta’, descartamos regiones muy grandes o muy pequeñas y ‘deducimos’ cuales son los rostros de una imagen.

Llegamos a un ‘techo’ en cuanto a la efectividad y encontramos la necesidad de aplicar algoritmos mas complejos.

Page 6: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

¿Que hacemos con la imagen?Entra el primer algoritmo matemático complejo: PCA (Principal Components Analysis)

Se considera la imagen como un vector. Un vector cualquiera en un espacio vectorial de n dimensiones X1,X2…Xn se puede representar en términos de cuanto tiene de cada vector-dimensión X1, X2 … Xn.

“¿Que “cantidad” tiene el nuevo rostro, de cada rostro existente?”

Ej, vector C1 = (2, 3, 5) -> C1 = (2x1, 3x2, 5x3)

Page 7: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Ejemplo para dos rostros humanos que difieren en F’ Dispersión de

puntos, cada punto representa una foto de un rostro humano. Las agrupaciones (nubes) de puntos sugieren que son fotos de la misma persona. Cuanto mas cerca están dos puntos, mas similares son dos rostros, hasta que se puede sugerir que son la misma persona.

Apliquemos esta teoría a los glóbulos rojos y blancos.

0 2 4 6 8 10 12 14 16 180

20

40

60

80

100

120

yLinear (y)

Axis Title

Axis Title

F’

Page 8: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Hecho el algoritmo de manera genérica, apuntamos a nuevos problemas.Ante la vocación de desarrollar

soluciones orientadas a la medicina, se decide empezar por un problema en el cual tenemos experiencia: El conteo de elementos en sangre mediante análisis de imágenes.

Page 9: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Principal ventaja; La diferencia de costos con otros métodos de automatización de conteo de elementos en el tejido humano. (~30.000AR$)Estos equipos tienen dimensiones muy grandes y solo

cumplen una única función.

Con el sistema propuesto, por software, no se necesita implementar ningún tipo de hardware siempre que se cuente con una PC/Notebook adecuada y un microscopio con conector para salida de tv/proyector/video o una buena cámara digital (menor precisión).Costo total; entre 0$ (hardware existente) y no mas de

5.000$ ante la necesidad de implementar hardware específico.

Aplicaciones de nuestro proyectoEscenario ideal; Entidad médica de capacidad adquisitiva reducida (Hospitales regionales o pequeños, consultorios privados…)

Page 10: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Definición y utilidadDefinición: El hemograma completo es la prueba de

laboratorio en la se van a cuantificar y evaluar diferentes grupos celulares, las glóbulos rojos (eritrocitos), los glóbulos blancos (leucocitos), las placas, el contenido de hemoglobina, y otros parámetros relacionados con su cantidad, forma y contenido.

Utilidad Clínica: Ayuda a diagnosticar problemas específicos de la sangre como la anemia y otros trastornos como determinados cánceres como las leucemias; permite a monitorizar la pérdida de sangre y la respuesta de un paciente a la terapia contra el cáncer, como la quimioterapia y la radioterapia; permite sospechar cuadros agudos infecciosos y/o inflamatorios, y así, su utilidad clínica resulta invaluable.

Page 11: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Hardware en el mercadoWiener lab. Counter 19 y Wiener lab.

Counter 19 CP

www.wiener-lab.com.ar – Sitio web del fabricante

Principio de medición: impedancia eléctrica más colorimetría.

Ventajas Muy fácil de

usar. Muy preciso

en resultados.

Desventajas Insumos

constantes, provistos por el fabricante.

Precio astronómico.

Es gigante.

Page 12: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

En la ‘vieja escuela’ se cuenta con un método en teoría muy efectivo, que sin embargo puesto en práctica resulta en una alta pérdida de precisión y de tiempo.El bioquímico debería hacer uso de la ‘cámara

de Neubauer’ y un microscopio eficaz, y realizar el conteo de glóbulos totalmente ‘a ojo’. Como ventaja, se resalta el hecho de que un

profesional entrenado puede detectar casos especiales de inmediato. Este método se considera obsoleto.

La alternativa económicaDesventajas del método ‘a la vieja usanza’.

Page 13: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

La cámara de Neubauer (esquema) El profesional tiene

que hacer un “barrido” a ojo, de cada uno de los cuadrados mostrados en el esquema, contando al mismo tiempo cada tipo de glóbulos.

Luego debe mover la muestra y reiterar los pasos 4 veces mas, 5 en total.

El margen de error por contar elementos diferentes y aleatoriamente dispersos es muy elevado.

Ventaja: Un profesional detecta casos especiales de inmediato, pero este método se considera obsoleto.

Page 14: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Que es lo que buscamos?

Page 15: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)
Page 16: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Formaciones subdesarrolladas. (Anemia, neonatos, etc.)

Page 17: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)
Page 18: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Casos de glóbulos blancos.

Si bien hay varias formaciones de glóbulos blancos, nos interesa diferenciar entre monocitos y ‘el resto’.

Page 19: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Estandarización y preproceso de una imagen.

Imagen original

Imagen redimensionada y ajustada en brillo y contraste.

Se definen los estándares que se consideren mas aptos para facilitar la lógica del algoritmo y lograr robustez en el resultado. Se considera la plataforma en la que se usará el sistema, el hardware de captura, etc. Se eliminan los bordes de imágenes apaisadas.

Se calcula la media con la siguiente fórmula

Se corrigen los niveles de brillo y contraste de acuerdo a la media [R,G,B] obtenida.

Page 20: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Definición de colores y tonos. Las imágenes adquiridas no serán como el software las espera. Hay que alterarlas previamente. Estandarización de colores y utilización de algoritmo floodfill.

int max = 0; int min = 0; int r = 0; int b = 0; int g = 0; for (int x = 0; x < imgOriginal.Width; x++) { for (int y = 0; y < imgOriginal.Height; y++) { r = imgOriginal.GetPixel(x, y).R; g = imgOriginal.GetPixel(x, y).G; b = imgOriginal.GetPixel(x, y).B;

if (r > max) max = r; if (g > max) max = g; if (b > max) max = b; if (r < min) min = r; if (g < min) min = g; if (b < min) min = b;

if !((r > 95 && g > 40 && b > 20) && (Math.Abs(r - g) > 15) && ((r > g) && (r > b)) && ((max - min) > 15) && (r != 0 && g != 0 && b != 0)) { imgOriginal.SetPixel(x, y, Color.Black); } } } imgNormalizada = new Bitmap(imgOriginal);

Page 21: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Un pequeño paréntesis…¿Que es el método floodfill?Comparable con la típica herramienta “varita

mágica”, nos permite pasar de la imagen A a la imagen B y así discriminar los glóbulos del medio en el que se encuentran.

A B

Page 22: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Los GR Los GB Los glóbulos rojos

son particularmente fáciles de encontrar analíticamente:Son todos igualesForma circularColor constanteTamaño constante

¡No podría ser mejor!

Los glóbulos blancos vienen a ser los problemáticos:Núcleos de forma

aleatoriaTamaño variableLos núcleos se

superponen ‘pareciendo’ ser uno solo.

Podría ser peor?Sí, la única ventaja es

que el color se mantiene.

Page 23: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

¿Qué hacemos? Volvemos a las matemáticas (PCA)

Aprovechando la única puerta abierta que nos dejan los glóbulos blancos, los identificamos por su color.

El verdadero problema es diferenciar entre cada tipo de glóbulo blanco analíticamente, no existe ejemplo a seguir porque un profesional los reconoce a ojo y el artefacto mencionado los separa por su impedancia eléctrica.

Page 24: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Volvamos al espacio

La lógica nos dice que los GB monocitos (1) tienen una dispersión mínima por tener un solo núcleo. Esto sugiere que su representación en el espacio n-dimensional estará relativamente condensada. Es decir, definirán una nube definida.

Por el contrario, los GB poliformes (2) se dispararán en múltiples direcciónes (tantas como dimensiones haya).

1: 2:

Page 25: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Simplificando en 2DEvaluando

analíticamente resulta obvio que las representaciones mas alejadas de su ‘núcleo’ son los GB poliformes y las cercanas son monocitos con un único núcleo.

Núcleo analítico: Y=0

1 4 7 10 13 16 19 22 25 28 31 34 370

200

400

600

800

1000

1200

PoliformesMonocitos

Page 26: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

¿Es este método perfecto?NO, como la mayoría de los métodos estadísticos, hace

evidente una tendencia con X% grado de precisión, pero tiene un punto débil, y es el área en el cual los monocitos ‘se parecen’ suficiente a los GB poliformes, y sus representaciones se mezclan en el espacio imaginario.

De todos modos los resultados son alentadores.

Zona de error (falso conteo)

Page 27: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

¿Conclusiones?Es natural que no seamos los indicados para sacar

conclusiones médicas, lo mismo pasa en el caso del artefacto mostrado anteriormente para el conteo de glóbulos.

Nos limitamos a exponer las cantidades encontradas de cada tipo de elemento y dependiendo de cada caso y del paciente, el profesional médico sabrá que concluir.

En otras palabras, nuestra solución es acotada, empieza y termina cumpliendo su función: Contar.

Es decir, es una herramienta, y no un médico virtual. Como herramienta, sus funciones solo están limitadas por lo pertinente al hemograma completo y por la capacidad del profesional de interpretar los resultados.

Page 28: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Haciendo honor a la verdad, en este último proyecto no hemos inventado nada. Se trata de un uso ‘visionario’ para algoritmos ya desarrollados (por nosotros), y utilizados. Durante el desarrollo del reconocimiento facial, nos aseguramos de que el

algoritmo sea genérico. De ahí el hecho de que sirve para identificar rostros humanos, casas, automóviles… y hasta glóbulos rojos!

VentajasEscalabilidad y objetivos genéricos; Incluso en el momento de desarrollo

(facerec), no sabíamos que otros usos le daríamos al algoritmo. La idea es que sirva tanto para nosotros como para el potencial cliente.

Para el 2010 proyectamos implementar exactamente lo mismo (Si, ¡De nuevo!) para el diagnóstico temprano de aneurismas en la retina del ojo.

De este modo, el tiempo no se utiliza desarrollando proyectos diferentes sino perfeccionando lo hecho.

¿Innovación?Puede que sea un proyecto innovador, pero, ¿En que sentido?

Page 29: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Otros usos para los algoritmos desarrolladosLos alcances del algoritmo genérico.

Page 30: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Otros usos para los algoritmos desarrolladosLos alcances del algoritmo genérico.

Page 31: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

Agenda: CodeCamp 20102da. incursión en la medicina, detección de aneurismas en la retina.Identificación de individuos por escaneo de retina.

Identificación de aneurismas en la retina del ojo humano.Otro proceso que hoy en día se realiza ‘a

ojo’ y está librado a la imprecisión del error humano.

Identificación de individuos por escaneo de retina, otra aplicación obvia para nuestro algoritmo.

Page 32: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)

¿Preguntas?

Page 33: [Code Camp 2009] Aplicaciones de .NET en la medicina (Armando A. Meabe)