En mi proyecto, tengo que digitalizar una imagen de ECG tomada con una cámara normal (JPEG). Por ejemplo, tengo la siguiente imagen capturada de la cámara:
y quiero obtener algo como esto:
y luego los datos digitalizados (puntos x, y), como en este video sobre digitalización de ECG
No tengo idea de cómo hacerlo, así que busqué y consulté varios trabajos de investigación. El enfoque general de los algoritmos es como: -
- cambiar a imagen de nivel de gris
- eliminar líneas de cuadrícula
- agregar puntos faltantes
- convertir imagen 2D a imagen 1D
Estoy atascado con el segundo punto, es decir, eliminar las líneas de la cuadrícula. Busqué algunas referencias más para hacer esto y descubrí que el análisis de histograma podría ser útil.
¿Pueden guiarme sobre cómo hacer esto (estoy usando MATLAB 2010)? Cualquier ayuda sería apreciada.
image-processing
Deepak
fuente
fuente
Respuestas:
Lo siento, uso Mathematica, pero debería ser realmente fácil implementar la idea en Matlab. Le doy el código de todos modos, así que cuando mi descripción no sea lo suficientemente detallada, puede obtener el resto del código.
La idea básica es: miras tu imagen en forma de columna. Procese cada columna de píxeles por separado. Tenga en cuenta que en el gráfico, invertí los valores grises. Entonces, el negro es 1 y el blanco es 0.
Si traza los valores de píxeles de brillo (invertidos), básicamente tiene solo dos situaciones. El primero es, cuando su columna no está en una línea de cuadrícula vertical. El argumento se parece a
La segunda situación es, donde estás directamente en una línea de cuadrícula vertical. Entonces la línea de la cuadrícula influye en el brillo de toda la columna.
Pero lo que ves es que tu EEG oscuro parece ser siempre el máximo. Por lo tanto, el algoritmo muy complejo es: ir a través de cada columna y tomar la posición del píxel más negro.
Tenga en cuenta que recorté un poco el lado derecho de su imagen, ya que allí estaba completamente blanco. El resultado es
Ahora puede unir los puntos o interpolarlos de la manera que desee y obtendrá su EEG
fuente
Tiene una imagen en color donde las líneas de la cuadrícula son rojas y la traza es negra. ¡así que simplemente ignore cualquier píxel que sea rojo!
Si no puede estar seguro de que la imagen está exactamente alineada, puede usar las líneas de la cuadrícula para calcular un sesgo (simplemente la pendiente de la imagen en píxeles / píxel a medida que avanza hacia la derecha).
Luego, convertir la traza negra en un valor 1d es simple. Comience en la primera columna en el borde izquierdo y encuentre el píxel negro (o centroide de un pequeño grupo conectado de píxeles): la posición vertical es su valor.
Haga eso para cada columna de la imagen.
Cuando le falte un valor, deberá interpolar entre los valores conocidos antes y después.
Para obtener puntos adicionales, puede establecer un límite sobre cuánto puede cambiar la traza de columna a columna para permitirle detectar puntos aleatorios o picos de ruido.
fuente