Laboratorio de Teledetección y procesado de imágenes

Visualización de imágenes DICOM

Introducción

Para realizar el visualizador de imágenes DICOM se ha utilizado el lenguaje Python por su diseño modular y su orientación a objetos. Aun así, el código es fácilmente modificable para que se adapte a lenguajes como MATLAB u Octave (General Python FAQ - Python 3.14.0., s.f.)

Específicamente, se han utilizado las librerías siguientes:

Podemos resumir la funcionalidad de la aplicación de la siguiente forma:

Vistas las características de la aplicación, procedemos a explicar el código del programa:

Explicación del código de la aplicación

Al trabajar en un lenguaje interpretado como Python, es preciso que las declaraciones de clases, métodos y funciones se hagan antes de su llamada desde el programa principal. Así comienza el archivo con la creación de una clase llamada Dicom. Esta clase se encargará de cargar, procesar y modificar los archivos que se visualizan. Entre los métodos de la clase se encuentran los siguientes:

Estos filtros han podido hacerse gracias a la clase ImageFilter que incorpora la librería Pillow. Dentro de esta clase se encuentran distintos métodos para filtrar imágenes.

Limitaciones de la aplicación

Daremos cuenta a continuación de las limitaciones de la aplicación:

Vistas algunas de las limitaciones del aplicativo, procedemos a enlazar algunas capturas de pantalla de la aplicación. Todas ellas se han realizado en un equipo corriendo Debian 13 con arquitectura de 64 bits:

Figura 1: Pantalla principal del programa. Sin imágenes cargadas. Se distinguen dos regiones para la imagen original y procesada, así como los diferentes widgets de escritorio.

Para trabajar con las imágenes abrimos una imagen haciendo clic sobre el botón Abrir imagen:

Figura 2: Cuadro de dialogo generado con la clase filedialog para abrir un archivo.

La imagen abierta queda de la siguiente forma:

Figura 3: Imagen cargada en la interfaz. La imagen cargada queda citada en el apartado generado a tal efecto. Vemos cómo queda en la parte original y la ventana modifica su geometría para introducir la imagen.

A partir de aquí, se pueden introducir filtros, obteniendo los siguientes resultados:

Figura 4: Filtros realizados. Arriba izquierda: gaussiano con radio 1. Arriba derecha: gaussiano con radio 16. Abajo izquierda: lineal con radio 6, abajo derecha: mediana con tamaño 17.

Vemos en esta figura como los filtros lineal y gaussiano reducen el ruido de la imagen. Sin embargo, se pierde definición de borde. En otro orden de cuestiones, el filtro de mediana reduce ruido evitando la falta de definición en los bordes, que se ven correctamente.

Podemos también ver cómo se utilizan las funcionalidades Hacer original y Quitar filtros:

Figura 5: Funcionalidades para aplicar filtros recursivos. Derecha: la imagen había sido procesada como en esta figura. Al hacerla original, permitimos aplicar filtros sobre la imagen procesada. Izquierda: aplicación de un filtro lineal de radio 15 a la imagen descrita.

Por último se muestra el error generado cuando intentamos trabajar con el filtro de mediana en tamaños pares:

Figura 6: Error de filtro de mediana. Cuando los conjuntos tienen un tamaño par, la mediana no queda definida con sentido en esta aplicación. Con tamaños impares, el tamaño del conjunto permite definir con sentido para el caso que nos ocupa el parámetro de la mediana.

Conclusiones del laboratorio

Este laboratorio ha permitido el acercamiento a la realidad del procesado de imágenes mediante el desarrollo e implementación de una interfaz gráfica de usuario para procesar imágenes médicas en el archivo estándar DICOM. Se ha dado cuenta de los pasos, cuestiones relevantes y dependencias del programa, con el objeto de permitir la reproducción de la aplicación en ocasiones futuras. Se adjunta, asimismo, el código de la aplicación para su visualización.

Las imágenes se han obtenido de Dicom Library - Anonymize, Share, View Dicom Files Online (s.f.).

Referencias

General Python FAQ - Python 3.14.0. (s.f). Python Documentation. https://docs.python.org/3/faq/general.html

Tkinter - Python interface to Tcl/Tk. (s.f). Python Documentation. https://docs.python.org/3/library/tkinter.html

Pillow. (s.f.). Pillow (PIL Fork). https://pillow.readthedocs.io/en/stable/index.html

Dicom library - Anonymize, share, view dicom files online. (s.f.) https://www.dicomlibrary.com/?manage=02ef8f31ea86a45cfce6eb297c274598