Come posso recuperare il segnale da un'immagine ECG


14

Nel mio progetto, devo digitalizzare un'immagine ECG scattata con una normale fotocamera (jpeg). Ad esempio, ho la seguente immagine acquisita dalla fotocamera:

Prima

e voglio ottenere qualcosa del genere: -

Dopo

e poi i dati digitalizzati (punti x, y), come in questo video sulla digitalizzazione dell'ECG

Non ho idea di come farlo, quindi ho cercato e consultato diversi documenti di ricerca. L'approccio generale degli algoritmi è come: -

  1. passa all'immagine di livello di grigio
  2. elimina le linee della griglia
  3. aggiungere punti mancanti
  4. converti immagine 2D in immagine 1D

Sono bloccato con il secondo punto, ovvero l'eliminazione delle linee della griglia. Ho cercato altri riferimenti per fare questo e ho scoperto che l'analisi dell'istogramma potrebbe essere utile.

Potete per favore guidarmi su come fare questo (sto usando MATLAB 2010)? Qualsiasi aiuto sarebbe apprezzato.


Ho chiesto praticamente la stessa cosa qui: stackoverflow.com/q/1657941/125507
endolith

@ Deepak, sembra che tu abbia implementato la parte matlab del codice menzionato nel post, puoi gentilmente condividere la parte matlab in cui stai convertendo l'immagine digitalizzata in segnale 1D per l'interpolazione
user3278

Risposte:


16

Mi dispiace, io uso Mathematica, ma dovrebbe essere davvero facile implementare l'idea in Matlab. Fornisco comunque il codice, quindi quando la mia descrizione non è abbastanza dettagliata, puoi ottenere il resto dal codice.

L'idea di base è: guardi l'immagine nella colonna. Elabora ogni colonna di pixel separatamente. Si noti che nella trama ho invertito i valori di grigio. Quindi il nero è 1 e il bianco è 0.
Se tracciate i valori di luminosità-pixel (invertiti) avete sostanzialmente solo due situazioni. Il primo è quando la colonna non si trova su una linea della griglia verticale. La trama sembra

La seconda situazione è quella in cui ci si trova direttamente su una linea della griglia verticale. Quindi la linea della griglia influenza la luminosità dell'intera colonna

Ma quello che vedi è che il tuo EEG oscuro sembra essere sempre il massimo. Pertanto, l'algoritmo molto complesso è: passare attraverso ogni colonna e assumere la posizione del pixel più nero.

img = ColorConvert[
   ImagePad[
    Import["http://i.stack.imgur.com/500Kg.jpg"], {{0, -20}, {0, 0}}],
    "Grayscale"];

Image[
 Transpose[Function[With[{m = Min[#]},
     Map[Function[{v}, If[v == m, 1, 0]], #]]] /@ 
   Transpose[ImageData[img, "Real"]]
  ]
 ]

Nota che ho ritagliato un po 'la parte destra della tua immagine, dato che lì era completamente bianca. Il risultato è

Ora puoi unire i punti o interpolarli in qualsiasi modo ti piaccia e ottieni il tuo EEG


@Patrick: mi piace l'idea!
Jonas,

Nota che funzionerà solo se le linee della griglia sono dritte e parallele agli assi dell'immagine
endolith

@endolith, l'hai provato, vero ?? Perché qui funziona quando l'immagine non è allineata esattamente. A proposito, quando le linee della griglia non sono orizzontali / verticali, l'intera procedura di rimozione è completamente inutile, poiché per un'immagine ruotata si otterrebbero valori errati di {x, y} per l'EEG.
Halirutan,

@Patrick: Voglio dire che non otterresti i valori x, y corretti se i dati non sono allineati con le coordinate dei pixel.
endolith

@Patrick, il tuo algo ha funzionato :) e ho estratto con successo il segnale ma ho ancora qualche difficoltà ad interpolare il segnale (dato che sono molto nuovo nell'elaborazione delle immagini), mi aiuti gentilmente a come interpolare il segnale? grazie ancora :)
Deepak il

5

Hai un'immagine a colori in cui le linee della griglia sono rosse e la traccia è nera. quindi semplicemente ignora tutti i pixel che sono rossi!

Se non si è sicuri che l'immagine sia allineata esattamente, è possibile utilizzare le linee della griglia per calcolare un'inclinazione (semplicemente la pendenza dell'immagine in pixel / pixel mentre si procede a destra).

Quindi trasformare la traccia nera in un valore 1d è semplice. Inizia nella prima colonna sul bordo sinistro e trova il pixel nero (o centroide di un piccolo gruppo di pixel collegati): la posizione verticale è il tuo valore.
Fallo per ogni colonna nell'immagine.
Dove hai un valore mancante dovrai interpolare tra i valori noti prima e dopo.

Per punti extra potresti impostare un limite su quanto la traccia può cambiare da colonna a colonna per permetterti di individuare punti casuali o picchi di rumore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.