Làm cách nào để khôi phục tín hiệu từ hình ảnh ECG


14

Trong dự án của tôi, tôi phải số hóa hình ảnh ECG được chụp bằng máy ảnh bình thường (jpeg). Ví dụ: tôi có hình ảnh được chụp bằng camera sau:

Trước

và tôi muốn có được một cái gì đó như thế này: -

Sau

và sau đó là dữ liệu số hóa (điểm x, y), như trong video này về số hóa ECG

Tôi không biết làm thế nào để làm điều đó, vì vậy tôi đã tìm kiếm và tham khảo một số tài liệu nghiên cứu. Cách tiếp cận chung của các thuật toán là:

  1. thay đổi hình ảnh mức xám
  2. xóa đường lưới
  3. thêm điểm thiếu
  4. chuyển đổi hình ảnh 2D thành hình ảnh 1D

Tôi bị mắc kẹt với điểm thứ hai, tức là xóa các đường lưới. Tôi đã tra cứu thêm một số tài liệu tham khảo để làm điều này và thấy phân tích biểu đồ có thể hữu ích.

Bạn có thể vui lòng hướng dẫn tôi cách thực hiện việc này không (tôi đang sử dụng MATLAB 2010)? Bất kỳ trợ giúp sẽ được đánh giá cao.


Về cơ bản, tôi đã hỏi điều tương tự ở đây: stackoverflow.com/q/1657941/125507
endolith

@ Deepak, có vẻ như bạn đã triển khai phần matlab của mã được đề cập trong bài đăng, bạn có thể vui lòng chia sẻ phần matlab nơi bạn đang chuyển đổi hình ảnh được quét thành tín hiệu 1D để nội suy
user3278

Câu trả lời:


16

Xin lỗi, tôi sử dụng Mathicala, nhưng nó thực sự dễ dàng để thực hiện ý tưởng vào Matlab. Dù sao tôi cũng cung cấp mã, vì vậy khi mô tả của tôi không đủ chi tiết, bạn có thể lấy phần còn lại từ mã.

Ý tưởng cơ bản là: bạn nhìn vào cột hình ảnh của bạn. Xử lý mỗi cột pixel riêng biệt. Lưu ý rằng trong cốt truyện, tôi đã đảo ngược các giá trị màu xám. Vì vậy, màu đen là 1 và màu trắng là 0.
Nếu bạn vẽ các giá trị pixel-độ sáng (đảo ngược), về cơ bản bạn chỉ có hai tình huống. Đầu tiên là, khi cột của bạn không nằm trên một đường lưới dọc. Cốt truyện giống như

Tình huống thứ hai là, nơi bạn đang trực tiếp trên một đường lưới dọc. Sau đó, đường lưới ảnh hưởng đến độ sáng của toàn bộ cột

Nhưng những gì bạn thấy là, EEG tối của bạn dường như luôn luôn là tối đa. Do đó, thuật toán rất phức tạp là: Đi qua mọi cột và lấy vị trí của pixel đen nhất.

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

Lưu ý rằng tôi đã cắt một chút hình ảnh bên phải của bạn, vì nó hoàn toàn trắng ở đó. Kết quả là

Bây giờ bạn có thể tham gia các điểm hoặc nội suy chúng theo mọi cách bạn thích và bạn nhận được điện não đồ


@Patrick: Tôi thích ý tưởng!
Jonas

Lưu ý rằng điều này sẽ chỉ hoạt động nếu các đường lưới thẳng và song song với các trục hình ảnh
endolith

@endolith, bạn đã thử chưa, phải không ?? Bởi vì ở đây, nó hoạt động khi hình ảnh không được căn chỉnh chính xác. Btw, khi các đường lưới không nằm ngang / dọc thì toàn bộ quy trình loại bỏ chúng là hoàn toàn vô dụng, vì đối với một hình ảnh được quay, bạn sẽ nhận được các giá trị {x, y} sai cho EEG.
halirusan

@Patrick: Ý tôi là bạn sẽ không nhận được các giá trị x, y chính xác nếu dữ liệu không được căn chỉnh theo tọa độ của các pixel.
endolith

@Patrick algo của bạn đã hoạt động :) và tôi đã trích xuất thành công tín hiệu nhưng vẫn gặp một số khó khăn trong việc nội suy tín hiệu (vì tôi rất mới đối với việc xử lý hình ảnh), vui lòng giúp tôi cách nội suy tín hiệu? cảm ơn lần nữa :)
Deepak

5

Bạn có một hình ảnh màu trong đó các đường lưới màu đỏ và dấu vết là màu đen. Vì vậy, chỉ cần bỏ qua bất kỳ pixel nào là màu đỏ!

Nếu bạn không thể chắc chắn hình ảnh được căn chỉnh chính xác, bạn có thể sử dụng các đường lưới để tính toán độ nghiêng (đơn giản là độ dốc của hình ảnh tính bằng pixel / pixel khi bạn đi đúng).

Sau đó, biến dấu vết đen thành giá trị 1d rất đơn giản. Bắt đầu trong cột đầu tiên ở cạnh trái và tìm pixel đen (hoặc centroid của một nhóm pixel được kết nối nhỏ) - vị trí dọc là giá trị của bạn.
Làm điều đó cho mỗi cột trong hình ảnh.
Trường hợp bạn có một giá trị bị thiếu, bạn sẽ cần phải nội suy giữa các giá trị đã biết trước và sau.

Đối với các điểm bổ sung, bạn có thể đặt giới hạn về số lượng dấu vết có thể thay đổi từ cột-cột để cho phép bạn phát hiện các chấm ngẫu nhiên hoặc gai nhiễu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.