मैं ईसीजी छवि से संकेत कैसे पुनर्प्राप्त करता हूं


14

मेरी परियोजना में, मुझे एक सामान्य कैमरे (जेपीईजी) के साथ ली गई ईसीजी छवि को डिजिटल बनाना है। उदाहरण के लिए, मेरे पास निम्न कैमरा कैप्चर की गई छवि है:

इससे पहले

और मैं कुछ इस तरह प्राप्त करना चाहता हूं: -

उपरांत

और फिर डिजीटल डेटा (x, y अंक), जैसे ईसीजी के डिजिटलीकरण पर इस वीडियो में

मुझे नहीं पता कि यह कैसे करना है, इसलिए मैंने कई शोध पत्रों को खोजा और परामर्श किया। एल्गोरिदम का सामान्य दृष्टिकोण इस प्रकार है: -

  1. ग्रे स्तर की छवि में परिवर्तन
  2. ग्रिडलाइन्स हटाएं
  3. लापता अंक जोड़ें
  4. 2 डी छवि को 1 डी छवि में बदलें

मैं ग्रिडलाइंस को हटाते हुए दूसरे बिंदु के साथ फंस गया हूं। मैंने ऐसा करने के लिए कुछ और संदर्भों को देखा और पाया कि हिस्टोग्राम विश्लेषण सहायक हो सकता है।

क्या आप मुझे यह करने के लिए मार्गदर्शन कर सकते हैं (मैं MATLAB 2010 का उपयोग कर रहा हूं)? किसी भी सहायता की सराहना की जाएगी।


मैंने मूल रूप से यहाँ वही बात
पूछी

@ दीपक, ऐसा लगता है जैसे आपने पोस्ट में उल्लिखित कोड के मैटलैब भाग को लागू किया है, क्या आप कृपया
मैटलैब

जवाबों:


16

क्षमा करें, मैं Mathematica का उपयोग करता हूं, लेकिन Matlab में विचार को लागू करना वास्तव में आसान होना चाहिए। मैं कोड को वैसे भी देता हूं, इसलिए जब मेरा विवरण पर्याप्त विस्तृत नहीं है, तो आप कोड से बाकी प्राप्त कर सकते हैं।

मूल विचार यह है: आप अपनी छवि कॉलम-वार को देखते हैं। पिक्सल के हर कॉलम को अलग से प्रोसेस करें। ध्यान दें, कि प्लॉट में, मैंने ग्रे-वैल्यूज़ को उल्टा कर दिया। तो काला 1 है और सफेद 0. है।
यदि आप (उल्टे) चमक-पिक्सेल-मूल्यों की साजिश करते हैं, तो आपके पास मूल रूप से केवल दो स्थितियां हैं। पहला वह है, जब आपका कॉलम वर्टिकल ग्रिड लाइन पर नहीं है। कथानक जैसा दिखता है

दूसरी स्थिति यह है, जहां आप सीधे एक ऊर्ध्वाधर ग्रिड लाइन पर हैं। फिर ग्रिड लाइन पूरे कॉलम की चमक को प्रभावित करती है

लेकिन जो आप देखते हैं, वह यह है कि आपका डार्क ईईजी हमेशा अधिकतम होता है। इसलिए, बहुत जटिल एल्गोरिथ्म है: हर कॉलम के माध्यम से जाओ और सबसे काले पिक्सेल की स्थिति ले लो।

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

@endolith, आपने इसे आज़माया है, है ना ?? क्योंकि यहां, यह तब काम करता है जब छवि सटीक संरेखित नहीं होती है। Btw, जब ग्रिडलाइंस क्षैतिज / ऊर्ध्वाधर नहीं होते हैं, तो उन्हें हटाने की पूरी प्रक्रिया पूरी तरह से बेकार है, क्योंकि एक घुमाए गए छवि के लिए आपको ईईजी के लिए गलत {x, y} मान मिलेगा।
११:११ बजे हलिरुतन

@Patrick: मेरा मतलब है कि यदि पिक्सल के निर्देशांक के साथ डेटा संरेखित नहीं है, तो आपको सही x, y मान नहीं मिलेगा।
४:१२ पर एंडोलिथ

@Patrick आपके एल्गो ने काम किया :) और मैंने सफलतापूर्वक सिग्नल निकाला है लेकिन फिर भी सिग्नल को प्रक्षेपित करने में कुछ कठिनाई हो रही है (जैसा कि मैं इमेज प्रोसेसिंग में बहुत नया हूँ), कृपया मुझे सिग्नल को इंटरपोल करने में कैसे मदद करें? धन्यवाद फिर से :)
दीपक

5

आपके पास एक रंग की छवि है जहां ग्रिडलाइन्स लाल हैं और ट्रेस काला है। तो बस किसी भी पिक्सेल को अनदेखा करें जो लाल हो!

यदि आप यह सुनिश्चित नहीं कर सकते कि छवि बिल्कुल संरेखित है, तो आप तिरछा गणना करने के लिए ग्रिड लाइनों का उपयोग कर सकते हैं (बस पिक्सेल में छवि की ढलान / पिक्सेल जैसा कि आप सही हैं)।

फिर काले ट्रेस को 1 डी मान में बदलना सरल है। बाएं किनारे पर पहले कॉलम में शुरू करें और काले पिक्सेल (या पिक्सेल के एक छोटे से जुड़े समूह के सेंट्रोइड) को ढूंढें - ऊर्ध्वाधर स्थिति आपके मूल्य है।
छवि में प्रत्येक कॉलम के लिए ऐसा करें।
जहां आपके पास एक लापता मूल्य है, आपको पहले और बाद में ज्ञात मूल्यों के बीच अंतर करने की आवश्यकता होगी।

अतिरिक्त बिंदुओं के लिए आप एक सीमा निर्धारित कर सकते हैं कि कॉलम-कॉलम से ट्रेस कितना बदल सकता है ताकि आप यादृच्छिक डॉट्स या शोर स्पाइक्स को स्पॉट कर सकें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.