Wie stelle ich das Signal aus einem EKG-Bild wieder her?


14

In meinem Projekt muss ich ein EKG-Bild digitalisieren, das mit einer normalen Kamera (JPEG) aufgenommen wurde. Ich habe beispielsweise das folgende mit der Kamera aufgenommene Bild:

Vor

und ich möchte so etwas bekommen: -

Nach

und dann die digitalisierten Daten (x, y Punkte), wie in diesem Video zur Digitalisierung des EKG

Ich habe keine Ahnung, wie ich das machen soll, also habe ich mehrere Forschungsarbeiten durchsucht und konsultiert. Der allgemeine Ansatz der Algorithmen ist wie folgt:

  1. Zum Graustufenbild wechseln
  2. Gitterlinien löschen
  3. fehlende Punkte hinzufügen
  4. 2D-Bild in 1D-Bild konvertieren

Ich bleibe beim zweiten Punkt, dem Löschen der Gitternetzlinien. Ich habe einige Referenzen nachgeschlagen, um dies zu tun, und fand, dass die Histogrammanalyse hilfreich sein könnte.

Können Sie mir bitte erklären, wie das geht (ich verwende MATLAB 2010)? Jede Hilfe wäre dankbar.


Ich habe hier im Grunde das Gleiche gefragt: stackoverflow.com/q/1657941/125507
Endolith

@ Deepak, anscheinend haben Sie den Matlab-Teil des im Beitrag erwähnten Codes implementiert. Geben Sie den Matlab-Teil frei, in dem Sie das gescannte Bild für die Interpolation in ein 1D-Signal konvertieren.
user3278

Antworten:


16

Entschuldigung, ich benutze Mathematica, aber es sollte wirklich einfach sein, die Idee in Matlab umzusetzen. Ich gebe den Code trotzdem weiter. Wenn meine Beschreibung nicht detailliert genug ist, können Sie den Rest aus dem Code entnehmen.

Grundidee ist: Sie betrachten Ihr Bild spaltenweise. Verarbeiten Sie jede Pixelspalte separat. Beachten Sie, dass ich im Plot die Grauwerte invertiert habe. Schwarz ist also 1 und Weiß ist 0.
Wenn Sie die (invertierten) Helligkeitspixelwerte zeichnen, haben Sie im Grunde genommen nur zwei Situationen. Die erste ist, wenn sich Ihre Spalte nicht auf einer vertikalen Gitterlinie befindet. Das sieht nach der Handlung aus

Die zweite Situation ist, wenn Sie sich direkt auf einer vertikalen Gitterlinie befinden. Dann beeinflusst die Gitterlinie die Helligkeit der gesamten Spalte

Aber Sie sehen, dass Ihr dunkles EEG immer das Maximum zu sein scheint. Der sehr komplexe Algorithmus lautet daher: Gehen Sie jede Spalte durch und ermitteln Sie die Position des am meisten schwarzen Pixels.

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"]]
  ]
 ]

Beachten Sie, dass ich ein wenig von der rechten Seite Ihres Bildes beschnitten habe, da es dort komplett weiß war. Das Ergebnis ist

Jetzt können Sie die Punkte beliebig zusammenfügen oder interpolieren und erhalten Ihr EEG


@ Patrick: Ich mag die Idee!
Jonas

Beachten Sie, dass dies nur funktioniert, wenn die Gitterlinien gerade und parallel zu den Bildachsen sind
Endolith

@endolith, du hast es versucht, oder? Denn hier funktioniert es, wenn das Bild nicht exakt ausgerichtet ist. Übrigens, wenn die Gitternetzlinien nicht horizontal / vertikal sind, ist die gesamte Prozedur zum Entfernen völlig nutzlos, da Sie für ein gedrehtes Bild falsche {x, y} -Werte für das EEG erhalten würden.
Halirutan

@Patrick: Ich meine, Sie würden nicht die richtigen x, y-Werte erhalten, wenn die Daten nicht an den Koordinaten der Pixel ausgerichtet wären.
Endolith

@Patrick Ihr Algo hat funktioniert :) und ich habe das Signal erfolgreich extrahiert, aber immer noch einige Schwierigkeiten bei der Interpolation des Signals (da ich sehr neu in der Bildverarbeitung bin), bitte helfen Sie mir bei der Interpolation des Signals? Nochmals
vielen

5

Sie haben ein Farbbild, in dem die Gitterlinien rot und die Spur schwarz sind. Ignorieren Sie also einfach alle roten Pixel!

Wenn Sie nicht sicher sind, ob das Bild genau ausgerichtet ist, können Sie die Gitternetzlinien verwenden, um einen Versatz zu berechnen (einfach die Neigung des Bildes in Pixel / Pixel, wenn Sie nach rechts gehen).

Dann ist es ganz einfach, die schwarze Kurve in einen 1d-Wert umzuwandeln. Beginnen Sie in der ersten Spalte am linken Rand und suchen Sie das schwarze Pixel (oder den Schwerpunkt einer kleinen zusammenhängenden Gruppe von Pixeln) - die vertikale Position ist Ihr Wert.
Tun Sie dies für jede Spalte im Bild.
Wenn Sie einen fehlenden Wert haben, müssen Sie vorher und nachher zwischen den bekannten Werten interpolieren.

Für zusätzliche Punkte können Sie ein Limit festlegen, um wie viel sich die Kurve von Spalte zu Spalte ändern kann, damit Sie zufällige Punkte oder Rauschspitzen erkennen können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.