Bagaimana cara memulihkan sinyal dari gambar EKG


14

Dalam proyek saya, saya harus mendigitalkan gambar EKG yang diambil dengan kamera normal (jpeg). Misalnya, saya memiliki gambar yang diambil kamera berikut:

Sebelum

dan saya ingin mendapatkan sesuatu seperti ini: -

Setelah

dan kemudian data digital (x, poin y), seperti dalam video ini tentang digitalisasi EKG

Saya tidak tahu bagaimana melakukannya, jadi saya mencari dan berkonsultasi dengan beberapa makalah penelitian. Pendekatan umum dari algoritma adalah seperti: -

  1. ubah ke gambar level abu-abu
  2. hapus garis kisi
  3. tambahkan poin yang hilang
  4. Konversi gambar 2D ke gambar 1D

Saya terjebak dengan poin kedua, yaitu menghapus garis kisi. Saya mencari lebih banyak referensi untuk melakukan ini dan menemukan analisis histogram mungkin membantu.

Bisakah Anda membimbing saya tentang cara melakukan ini (saya menggunakan MATLAB 2010)? Bantuan apa pun akan dihargai.


Saya pada dasarnya menanyakan hal yang sama di sini: stackoverflow.com/q/1657941/125507
endolith

@ Deepak, sepertinya Anda telah mengimplementasikan bagian matlab dari kode yang disebutkan dalam pos, dapatkah Anda membagikan bagian matlab tempat Anda mengonversi gambar yang dipindai ke sinyal 1D untuk interpolasi
user3278

Jawaban:


16

Maaf, saya menggunakan Mathematica, tetapi seharusnya sangat mudah untuk mengimplementasikan ide ke Matlab. Saya tetap memberikan kode, jadi ketika uraian saya tidak cukup detail, Anda bisa mendapatkan sisanya dari kode.

Ide dasarnya adalah: Anda melihat kolom gambar Anda dengan bijaksana. Proses setiap kolom piksel secara terpisah. Perhatikan, bahwa dalam plot, saya membalikkan nilai abu-abu. Jadi hitam adalah 1 dan putih adalah 0.
Jika Anda merencanakan nilai piksel-kecerahan (terbalik), pada dasarnya Anda hanya memiliki dua situasi. Yang pertama adalah, ketika kolom Anda tidak pada garis kotak vertikal. Plotnya terlihat seperti

Situasi kedua adalah, di mana Anda berada langsung pada garis kisi vertikal. Kemudian garis grid mempengaruhi kecerahan seluruh kolom

Tapi yang Anda lihat adalah, bahwa EEG gelap Anda tampaknya selalu maksimal. Oleh karena itu, algoritma yang sangat kompleks adalah: Telusuri setiap kolom dan ambil posisi piksel paling hitam.

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

Perhatikan, bahwa saya memangkas sedikit sisi kanan gambar Anda, karena gambar itu benar-benar putih di sana. Hasilnya adalah

Sekarang Anda dapat bergabung dengan poin atau menginterpolasi mereka dalam setiap cara yang Anda suka dan Anda mendapatkan EEG Anda


@ Patrick: Saya suka idenya!
Jonas

Perhatikan bahwa ini hanya akan bekerja jika garis kisi-kisi lurus dan sejajar dengan sumbu gambar
endolith

@endolith, Anda sudah mencobanya, bukan ?? Karena di sini, ini berfungsi ketika gambar tidak selaras tepat. Btw, ketika garis kisi tidak horizontal / vertikal maka seluruh prosedur untuk menghapusnya sama sekali tidak berguna, karena untuk gambar yang diputar Anda akan mendapatkan nilai {x, y} yang salah untuk EEG.
halirutan

@ Patrick: Maksud saya Anda tidak akan mendapatkan nilai x, y yang benar jika data tidak selaras dengan koordinat piksel.
Endolith

@ Patrick algo Anda bekerja :) dan saya telah berhasil mengekstraksi sinyal tetapi masih mengalami kesulitan dalam menginterpolasi sinyal (karena saya sangat baru dalam pemrosesan gambar), tolong bantu saya dalam cara menginterpolasi sinyal? terima kasih lagi :)
Deepak

5

Anda memiliki gambar warna di mana garis kisi berwarna merah dan jejaknya berwarna hitam. jadi abaikan saja piksel yang berwarna merah!

Jika Anda tidak dapat memastikan gambar benar-benar selaras, Anda dapat menggunakan garis kisi untuk menghitung kemiringan (cukup kemiringan gambar dalam piksel / piksel saat Anda ke kanan).

Kemudian mengubah jejak hitam menjadi nilai 1d sederhana. Mulai di kolom pertama di tepi kiri dan temukan piksel hitam (atau centroid dari sekelompok kecil piksel yang terhubung) - posisi vertikal adalah nilai Anda.
Lakukan itu untuk setiap kolom pada gambar.
Di mana Anda memiliki nilai yang hilang, Anda perlu melakukan interpolasi antara nilai yang diketahui sebelum dan sesudah.

Untuk poin tambahan, Anda dapat menetapkan batas seberapa banyak jejak dapat berubah dari kolom-kolom untuk memungkinkan Anda melihat titik-titik acak atau lonjakan kebisingan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.