Làm cách nào để bạn trích xuất dữ liệu từ biểu đồ python?

Tôi khá mới với cả python và openCV. Tôi chỉ cần nó cho một dự án. Người dùng chụp ảnh ECG bằng điện thoại của họ và gửi đến máy chủ. Tôi cần trích xuất dữ liệu biểu đồ và chỉ có thế

Đây là một hình ảnh mẫu

Mẫu ảnh gốc

Trước tiên tôi nên cắt hình ảnh để chỉ có biểu đồ mà tôi nghĩ. Vì tôi không thể tìm ra cách nên tôi đã làm thủ công

3301×1018 395 KB

Đây là một số mã cố gắng cô lập biểu đồ bằng cách làm cho các đường trắng [Nó hoạt động trên hình ảnh đã cắt] Vẫn để lại một số tiếng ồn khó chịu và đa giác không chính xác ở cuối, một số phần không được phát hiện

import cv2
import numpy as np

img = cv2.imread['image.jpg']

kernel = np.ones[[6,6],np.uint8]
dilation = cv2.dilate[img,kernel,iterations = 1]

gray = cv2.cvtColor[dilation, cv2.COLOR_BGR2GRAY]
#
ret,gray = cv2.threshold[gray,160,255,0]
gray2 = gray.copy[]
mask = np.zeros[gray.shape,np.uint8]

contours, hier = cv2.findContours[gray,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE]
for cnt in contours:
    if cv2.contourArea[cnt] > 400:
        approx = cv2.approxPolyDP[cnt,
                                  0.005 * cv2.arcLength[cnt, True], True]
        if[len[approx] >= 5]:
            cv2.drawContours[img, [approx], 0, [0, 0, 255], 5]
res = cv2.bitwise_and[gray2,gray2,mask]
cv2.imwrite['output.png',img]

1694×526 165 KB

Bây giờ tôi cần phải làm cho nó tốt hơn. Tôi đã tìm thấy hầu hết mã từ những nơi khác nhau và đính kèm chúng lại với nhau

np.ones[[6,6],np.uint8]

Ví dụ ở đây nếu tôi sử dụng bất kỳ thứ gì ngoài 6,6 thì tôi cũng gặp rắc rối


also

cv2.threshold[gray,160,255,0]

Tôi đã tìm thấy 160 255 bằng cách tinh chỉnh và tất cả các giá trị được mã hóa cứng khác trong mã của tôi. Điều gì sẽ xảy ra nếu ánh sáng trên một bức ảnh khác khác và những giá trị này sẽ không hoạt động nữa?

Và ngoài điều này, tôi vẫn không nhận được kết quả. Tôi muốn một số đa giác được gắn bởi hai dòng khác nhau từ dưới lên và trên cùng

Tôi chỉ muốn một dòng đi từ đầu đến cuối

Vui lòng hướng dẫn tôi chỉnh và sửa nó để sử dụng chung hơn

đây là thứ không bị biến dạng, bằng mắt thường

1474532b93f44948152e7b798ba876935081df4a-warpPerspective3301×1018 585 KB

FFT, loại bỏ một số điểm nóng tương ứng với lưới

1474532b93f44948152e7b798ba876935081df4a-warpPerspective-FFT-bandstop-frequency-domain1024×1024 165 KB

nghịch đảo FFT

1474532b93f44948152e7b798ba876935081df4a-warpPerspective-FFT-bandstop3301×1018 890 KB

một số ngưỡng không hoàn toàn chỉ để hiển thị những gì ở đó, không phải là thao tác hình ảnh quan trọng

1474532b93f44948152e7b798ba876935081df4a-warpPerspective-FFT-bandstop-quasithreshold3301×1018 314 KB

Tôi đã sử dụng imagej cho nội dung FFT vì nó nhanh và tiện dụng. Tôi đã sử dụng một trình chỉnh sửa ảnh ngẫu nhiên để chuyển đổi phối cảnh và độ tương phản/“ngưỡng”

Xin chào, cảm ơn vì tất cả thông tin mà bạn đã cung cấp.
Vì tôi thực sự mới làm quen với điều này nên việc thử tất cả các giải pháp này sẽ mất nhiều thời gian đối với tôi.
Tôi thậm chí không phải là nhà phát triển python, tôi lập trình ứng dụng nhiều thứ javascript hơn…

Vì vậy, sẽ thực sự hữu ích nếu bạn cung cấp một số mã ví dụ giúp chạy và hiểu theo cách nhanh hơn

13641×1906 1. 17MB



Dưới đây là một số ví dụ khác hiện tại tôi đã cắt chúng theo cách thủ công.
Sử dụng máy quét tài liệu máy ảnh nghe có vẻ là một ý tưởng tuyệt vời, tôi thậm chí đã thử nó hôm nay nhưng không thành công do một số vấn đề, Có lẽ tôi nên hỏi một câu hỏi riêng cho vấn đề đó.

xóa các đường lưới/dấu chấm

Đã thử rất nhiều ví dụ ngay cả từ tài liệu opencv. Cái loại bỏ các dòng khỏi nốt nhạc, thực sự không thể làm cho nó hoạt động được. Xin vui lòng một số mã mẫu

mẹo hay về findcontours

tách âm thanh giống như một ý tưởng tuyệt vời vì đó là 12 ô trên cùng một tờ giấy

Tôi muốn đi từng cột theo pixel để lấy các pixel màu đen và do đó có tọa độ nhưng hiện tại tôi gặp nhiều nhiễu khi sử dụng mã cuối cùng mà tôi đã cung cấp

Vì vậy, lý tưởng nhất là Nếu tôi chỉ nhận được 3 Y cho mỗi x thì tôi có thể nhận được tất cả thông tin về đường cong.
Nhưng bây giờ chắc chắn không thể chỉ lấy 3 vì có hàng nghìn điểm đen nhỏ khắp nơi và một số đoạn không có điểm nào sau khi sử dụng inRange hsv.

Tôi muốn một số mã mẫu.
Điều này làm tôi phát điên.

[Tôi đã thêm một vài hình ảnh vào câu trả lời cuối cùng của mình]

đây không phải là một dự án cuối tuần

có nhiều khía cạnh của xử lý hình ảnh và thị giác máy tính mà bạn cần nghiên cứu

điều quan trọng nhất là ảnh chụp nhanh là dữ liệu XẤU và bạn cần phải đánh người dùng của mình theo đúng nghĩa đen vì họ sẽ không học cách chụp những bức ảnh đẹp nếu không

bạn sẽ nhận thấy rằng những bức ảnh đó khác nhau về độ sắc nét, chúng có chuyển động mờ, mức độ nhiễu cho tôi biết chúng được chụp trong điều kiện ánh sáng không đủ,…

chia vấn đề thành các bước. làm việc để tự động hóa từng bước một và nhảy qua các bước khác bằng kỹ năng photoshop/dữ liệu giả/tổng ​​hợp

Tôi không thể cung cấp cho bạn mã. điều đó không giúp ích gì cho bạn. Tôi có thể cho bạn biết các phương pháp có thể đáng để thử nhưng đó không phải là giải pháp. có RẤT NHIỀU giải pháp hơn là chỉ phác thảo chung về một giải pháp. chi tiết cần được giải quyết, mà tôi chỉ lướt qua đây

Chức năng nào có thể được sử dụng để xuất biểu đồ được tạo trong matplotlib?

Phương pháp 1. Lưu biểu đồ dưới dạng hình ảnh bằng Matplotlib bằng cách sử dụng savefig[] . đường dẫn hoặc tên của tệp đầu ra có phần mở rộng. Nếu phần mở rộng không được cung cấp, cốt truyện được lưu dưới dạng tệp png.

Bạn có thể vẽ đồ thị bằng Python không?

Có thể vẽ đồ thị trong Python bằng cách sử dụng thư viện Matplotlib . Thư viện Matplotlib chủ yếu được sử dụng để vẽ biểu đồ. Bạn cần cài đặt matplotlib trước khi sử dụng nó để vẽ đồ thị. Matplotlib được sử dụng để vẽ một đường đơn giản, biểu đồ thanh, biểu đồ và biểu đồ hình tròn.

Chủ Đề