EKG görüntüsünden sinyali nasıl kurtarırım?


14

Projemde, normal bir kamerayla (jpeg) çekilen bir EKG görüntüsünü dijitalleştirmem gerekiyor. Örneğin, aşağıdaki kamera görüntüsünü yakaladım:

Önce

ve böyle bir şey almak istiyorum: -

Sonra

ve EKG'nin sayısallaştırılmasıyla ilgili bu videodaki gibi sayısallaştırılmış veriler (x, y noktaları)

Bunu nasıl yapacağım hakkında hiçbir fikrim yok, bu yüzden birkaç araştırma makalesini araştırdım ve onlara danıştım. Algoritmaların genel yaklaşımı şöyledir: -

  1. gri seviye resme değiştir
  2. kılavuz çizgilerini sil
  3. eksik noktalar ekle
  4. 2D görüntüyü 1D görüntüsüne dönüştür

İkinci noktaya takılı kaldım, yani kılavuz çizgilerini siliyorum. Bunu yapmak için birkaç referans daha aradım ve histogram analizinin yararlı olabileceğini buldum.

Bunun nasıl yapılacağı konusunda bana rehberlik edebilir misiniz (MATLAB 2010 kullanıyorum)? Herhangi bir yardım mutluluk duyacağız.


Ben burada temelde aynı şeyi sordum: stackoverflow.com/q/1657941/125507
endolith

@ Deepak, postada belirtilen kodun matlab bölümünü uyguladığınız anlaşılıyor, taranan görüntüyü enterpolasyon için 1D sinyaline dönüştürdüğünüz matlab bölümünü paylaşabilirsiniz
user3278

Yanıtlar:


16

Maalesef, Mathematica kullanıyorum, ancak fikri Matlab'a uygulamak gerçekten kolay olmalı. Ben zaten kodu vermek, bu yüzden benim açıklama yeterince ayrıntılı olmadığında, geri kalanını kod alabilirsiniz.

Temel fikir şudur: Resminize sütun bazında bakarsınız. Her piksel sütununu ayrı ayrı işleyin. Grafikte gri değerlerini ters çevirdiğime dikkat edin. Yani siyah 1 ve beyaz 0'dır
. (Ters çevrilmiş) parlaklık-piksel değerlerini çizerseniz, temelde yalnızca iki durumunuz olur. Birincisi, sütununuz dikey bir ızgara çizgisinde değilse. Arsa benziyor

İkinci durum, doğrudan dikey bir ızgara çizgisinde olduğunuzdur. Ardından ızgara çizgisi tüm sütunun parlaklığını etkiler

Ama gördüğünüz şey, karanlık EEG'nizin her zaman maksimum olduğu görülüyor. Bu nedenle, çok karmaşık algoritma: Her sütuna gidin ve en siyah pikselin konumunu alın.

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

Unutmayın, görüntünüzün sağ tarafının bir kısmını kırptım, çünkü orada tamamen beyazdı. Sonuç

Artık puanlara katılabilir veya istediğiniz şekilde enterpolasyon yapabilirsiniz ve EEG'nizi alabilirsiniz


@Patrick: Fikri seviyorum!
Jonas

Bunun yalnızca kılavuz çizgileri görüntü eksenlerine düz ve paralel olması durumunda işe yarayacağını unutmayın
endolith 21

@ endolith, denedin, değil mi ?? Çünkü burada, görüntü tam olarak hizalanmadığında çalışır. Btw, kılavuz çizgileri yatay / dikey olmadığında, bunları kaldırmanın tüm prosedürü tamamen işe yaramaz, çünkü döndürülmüş bir görüntü için EEG için yanlış {x, y} değerleri alırsınız.
halirutan

@Patrick: Veriler piksellerin koordinatlarıyla hizalanmazsa, doğru x, y değerlerini alamayacağınızı kastediyorum.
endolith

@Parrick senin algo çalıştı :) ve ben başarıyla sinyal ayıkladı ama yine de (görüntü işleme çok yeni olduğum gibi) sinyal enterpolasyon bazı zorluk yaşıyorsanız, lütfen bana sinyal enterpolasyon nasıl yardımcı olur? Tekrar teşekkürler :)
Deepak

5

Kılavuz çizgilerinin kırmızı ve izin siyah olduğu renkli bir görüntünüz var. bu yüzden kırmızı olan pikselleri yok sayın!

Görüntünün tam olarak hizalandığından emin değilseniz, eğriltmeyi hesaplamak için ızgara çizgilerini kullanabilirsiniz (sağa doğru gittikçe görüntünün piksel / piksel cinsinden eğimi).

Daha sonra siyah izi 1d değerine dönüştürmek basittir. Sol kenardaki ilk sütundan başlayın ve siyah pikseli (veya bağlı küçük bir piksel grubunun centroidini) bulun - dikey konum sizin değerinizdir.
Bunu görüntüdeki her sütun için yapın.
Eksik bir değeriniz olduğunda, bilinen değerler arasında önce ve sonra enterpolasyon yapmanız gerekir.

Ekstra noktalar için, rasgele noktaları veya parazit artışlarını tespit etmenizi sağlamak için izlemenin sütun sütunundan ne kadar değişebileceği konusunda bir sınır belirleyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.