ฉันจะกู้คืนสัญญาณจากภาพ ECG ได้อย่างไร


14

ในโครงการของฉันฉันต้องแปลงภาพคลื่นไฟฟ้าหัวใจเป็นดิจิทัลที่ถ่ายด้วยกล้องปกติ (jpeg) ตัวอย่างเช่นฉันมีภาพที่ถ่ายจากกล้องต่อไปนี้:

ก่อน

และฉันต้องการได้รับสิ่งนี้: -

หลังจาก

จากนั้นข้อมูลดิจิทัล (x, y คะแนน) เช่นเดียวกับในวิดีโอนี้เกี่ยวกับการแปลงเป็นคลื่นดิจิตอล ECG

ฉันไม่รู้ว่าจะทำอย่างไรฉันจึงค้นหาและปรึกษางานวิจัยหลายฉบับ วิธีการทั่วไปของอัลกอริทึมเป็นเช่น: -

  1. เปลี่ยนเป็นภาพระดับสีเทา
  2. ลบเส้นตาราง
  3. เพิ่มจุดที่ขาดหายไป
  4. แปลงภาพ 2D เป็นภาพ 1D

ฉันติดอยู่กับจุดที่สองคือการลบเส้นตาราง ฉันค้นหาข้อมูลอ้างอิงเพิ่มเติมเพื่อดำเนินการนี้และพบว่าการวิเคราะห์ฮิสโตแกรมอาจเป็นประโยชน์

คุณช่วยแนะนำฉันเกี่ยวกับวิธีการทำสิ่งนี้ได้ไหม (ฉันใช้ MATLAB 2010) ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม


ฉันถามพื้นเดียวกันกับที่นี่: stackoverflow.com/q/1657941/125507
endolith

@ Deepak ดูเหมือนว่าคุณได้ใช้ส่วน matlab ของรหัสที่กล่าวถึงในโพสต์คุณสามารถแบ่งปันส่วน matlab ที่คุณแปลงภาพสแกนเป็นสัญญาณ 1D สำหรับการแก้ไข
user3278

คำตอบ:


16

ขออภัยฉันใช้ Mathematica แต่ควรนำความคิดไปใช้ใน Matlab ได้ง่าย ฉันให้รหัสต่อไปดังนั้นเมื่อคำอธิบายของฉันมีรายละเอียดไม่เพียงพอคุณสามารถรับรหัสที่เหลือได้

แนวคิดพื้นฐานคือคุณดูที่คอลัมน์ภาพของคุณ ประมวลผลพิกเซลแต่ละคอลัมน์แยกกัน โปรดทราบว่าในพล็อตฉันกลับค่าสีเทา ดังนั้นสีดำคือ 1 และสีขาวคือ 0
หากคุณวางแผนความสว่างพิกเซล (กลับด้าน) คุณจะมีเพียงสองสถานการณ์เท่านั้น สิ่งแรกคือเมื่อคอลัมน์ของคุณไม่ได้อยู่บนเส้นกริดแนวตั้ง พล็อตดูเหมือนว่า

สถานการณ์ที่สองคือที่ที่คุณอยู่บนเส้นกริดแนวตั้งโดยตรง จากนั้นเส้นกริดจะมีผลต่อความสว่างของคอลัมน์ทั้งหมด

แต่สิ่งที่คุณเห็นคือ 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"]]
  ]
 ]

โปรดทราบว่าฉันครอบตัดภาพด้านขวาของคุณเล็กน้อยเนื่องจากมีสีขาวสนิท ผลที่ได้คือ

ตอนนี้คุณสามารถเข้าร่วมจุดหรือสอดแทรกพวกเขาในแบบที่คุณชอบและคุณได้รับ EEG ของคุณ


@ แพทริค: ฉันชอบความคิด!
Jonas

โปรดทราบว่าสิ่งนี้จะใช้งานได้หากเส้นกริดเป็นเส้นตรงและขนานกับแกนภาพ
endolith

@endolith คุณได้ลองใช่มั้ย ?? เพราะที่นี่จะทำงานเมื่อภาพไม่ได้จัดแนวที่แน่นอน Btw, เมื่อเส้นกริดไม่ได้เป็นแนวนอน / แนวตั้งกระบวนการทั้งหมดในการลบออกนั้นไร้ประโยชน์อย่างสมบูรณ์เนื่องจากสำหรับภาพที่หมุนแล้วคุณจะได้รับค่าผิดปกติ {x, y} สำหรับ EEG
halirutan

@ แพทริก: ฉันหมายความว่าคุณจะไม่ได้รับค่า x, y ที่ถูกต้องหากข้อมูลไม่สอดคล้องกับพิกัดของพิกเซล
endolith

@ แพลทริกอัลโกทำงานของคุณ :) และฉันประสบความสำเร็จในการสกัดสัญญาณ แต่ก็ยังมีปัญหาในการแก้ไขสัญญาณ (เพราะฉันยังใหม่กับการประมวลผลภาพ) โปรดช่วยฉันในการสอดแทรกสัญญาณ? ขอขอบคุณอีกครั้ง :)
Deepak

5

คุณมีภาพสีที่เส้นกริดเป็นสีแดงและการติดตามเป็นสีดำ ดังนั้นเพียงแค่ละเว้นพิกเซลใด ๆ ที่เป็นสีแดง!

หากคุณไม่แน่ใจว่าภาพนั้นอยู่ในแนวเดียวกันคุณสามารถใช้เส้นกริดเพื่อคำนวณการเอียง (เพียงความชันของภาพเป็นพิกเซล / พิกเซลตามที่คุณไป)

จากนั้นการเปลี่ยนรอยดำเป็นค่า 1d นั้นง่าย เริ่มในคอลัมน์แรกที่ขอบซ้ายและค้นหาพิกเซลสีดำ (หรือเซนทรอยด์ของกลุ่มพิกเซลที่เชื่อมต่อกันขนาดเล็ก) - ตำแหน่งแนวตั้งคือค่าของคุณ
ทำเช่นนั้นสำหรับแต่ละคอลัมน์ในภาพ
ในกรณีที่คุณมีค่าหายไปคุณจะต้องแก้ไขระหว่างค่าที่ทราบก่อนและหลัง

สำหรับคะแนนพิเศษคุณสามารถกำหนดขีด จำกัด ว่าร่องรอยสามารถเปลี่ยนจากคอลัมน์คอลัมน์เพื่อให้คุณเห็นจุดสุ่มหรือจุดรบกวน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.