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