ECG画像から信号を復元する方法


14

私のプロジェクトでは、通常のカメラ(jpeg)で撮影したECG画像をデジタル化する必要があります。たとえば、次のカメラキャプチャ画像があります。

前

そして、私はこのようなものを取得したい:-

後

そして、ECGのデジタル化に関するこのビデオのように、デジタル化されたデータ(x、yポイント)

どうすればいいかわからないので、いくつかの研究論文を検索して相談しました。アルゴリズムの一般的なアプローチは次のとおりです。

  1. グレーレベル画像に変更
  2. グリッド線を削除する
  3. 欠落点を追加する
  4. 2D画像を1D画像に変換する

2番目のポイント、つまり、グリッド線の削除に固執しています。これを行うためにいくつかの参考文献を調べたところ、ヒストグラム分析が役立つ可能性があります。

これを行う方法を教えてください(MATLAB 2010を使用しています)?任意の助けをいただければ幸いです。


私は基本的に同じことをここに尋ねました:stackoverflow.com/q/1657941/125507
endolith

ディーパック@、あなたがコードのMATLABの一部がポストで述べた実装しているように、あなたは親切にあなたが補間のための1D信号にスキャンした画像を変換しているMATLAB一部を共有することができると思われる
user3278

回答:


16

申し訳ありませんが、私はMathematicaを使用していますが、このアイデアをMatlabに簡単に実装できるはずです。とにかくコードを提供するので、説明が十分に詳しくない場合は、コードから残りを取得できます。

基本的な考え方は、画像を列ごとに見ることです。ピクセルのすべての列を個別に処理します。プロットでは、グレー値を反転していることに注意してください。したがって、黒は1、白は0
です。(反転した)輝度ピクセル値をプロットすると、基本的に2つの状況しかありません。1つ目は、列が垂直グリッド線上にない場合です。プロットは次のようになります

2番目の状況は、垂直グリッド線上に直接いる場合です。次に、グリッド線は列全体の明るさに影響します

しかし、あなたが見るのは、あなたの暗いEEGが常に最大であるように見えるということです。したがって、非常に複雑なアルゴリズムは次のとおりです。すべての列を調べて、最も黒いピクセルの位置を取得します。

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

ここでは、画像が完全に白だったので、画像の右側を少しトリミングしました。結果は

これで、ポイントに参加したり、好きな方法で補間したりして、脳波を取得できます


@パトリック:私はアイデアが好きです!
ジョナス

これは、グリッド線が直線で画像軸に平行である場合にのみ機能することに注意してください
エンドリス

@endolith、試してみましたよね?? ここでは、画像が正確に位置合わせされていないときに機能するためです。ところで、グリッド線が水平/垂直でない場合、それらを削除する手順全体は完全に役に立たない。なぜなら、回転した画像の場合、EEGの間違った{x、y}値を取得するからです。
ハリルタン

@Patrick:データがピクセルの座標と揃っていない場合、正しいx、y値を取得できないことを意味します。
エンドリス

あなたのアルゴリズムが働いた@Patrick :)私は信号を正常に抽出しましたが、まだ信号を補間するのに多少の困難があります(私は画像処理に非常に慣れていないので)、信号を補間する方法で親切に助けてくれますか?再びありがとう:)
ディーパック

5

グリッド線が赤でトレースが黒のカラー画像があります。そのため、赤のピクセルは無視してください!

画像が正確に配置されているかどうかわからない場合は、グリッド線を使用してスキューを計算できます(右に進むと、単純に画像の傾斜がピクセル/ピクセルで表されます)。

その後、黒いトレースを1d値に変えるのは簡単です。左端の最初の列から始めて、黒いピクセル(またはピクセルの小さな連結グループの重心)を見つけます-垂直位置があなたの値です。
それを画像の各列に対して行います。
欠損値がある場合、既知の値の前後で補間する必要があります。

余分なポイントについては、ランダムなドットまたはノイズスパイクを見つけることができるように、列と列の間でトレースが変化する量に制限を設定できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.