Hace tiempo que no he posteado nada y es porque he estado trabajando en un pequeño proyecto sobre ECG. La idea es simple: tomar una imagen con las 12 derivaciones, limpiar el ruido del papel y separar cada derivación en su propio recorte.
Este proyecto vive en physionet (una competencia en Kaggle) y lo estoy armando con Python + OpenCV. El flujo actual es:
- Convertir a HSV y crear una máscara binaria para quedarme con los trazos.
- Limpiar la máscara con una ventana de densidad (filtro por píxeles activos).
- Detectar filas con señal y cortar por columnas según proporciones fijas.
- Calcular bounding boxes y guardar cada derivación en archivos separados.
Para que se vea el proceso, aquí dejo algunas imágenes del pipeline.
1) Imagen original

2) Máscara binaria luego de la limpieza

3) Detección de bounding boxes por derivación

Lo que más me está gustando es que, con pocos parámetros, ya logro una separación estable en la mayoría de los casos. Por ejemplo: en estas dos muestras las derivaciones salen limpias casi desde el primer intento:

Esto se debe a que estas imágenes no presentan ningún tipo de ruido. En cambio, en esta imagen la cuadrícula se nota más y tuve que subir un poco el umbral de densidad para que no se mezclen las filas:

Aquí se ve el binario de esa misma muestra, donde la limpieza se daña por la fuerza de la cuadrícula:

Imagen limpia sin cuadrícula

Por el momento es todo lo que llevo. Estoy trabajando en mejorar una forma de eliminar todo ese tipo de ruido en la imagen y solo obtener, en su mayoría, las señales ECG para procesarlas con redes convolucionales.