Tụ máu não là 1 triệu chứng nguy hiểm tới tính mạng con người. Các mạch máu bị đứt làm não không nhận đủ Oxy, có thể làm tê liệt thần kinh hoặc mất mạng. Chụp CT não có thể phát hiện được tụ máu não nhờ vào màu sắc, độ sáng của vùng máu tụ. Bài này sẽ hướng dẫn về cách phát hiện tụ máu não dựa vào cường độ sáng của ảnh.
Ảnh CT (Computed Tomography) là ảnh cắt lớp não, mỗi lớp cắt cách nhau 1.5 đến 2cm. Chuyên dùng để chẩn đoán bệnh và các triệu chứng khác trong não.
Phân tích vấn đề
Bên dưới là ảnh CT não, vùng sáng được khoanh đỏ chính là vùng máu tụ.
Ta thấy được rằng vùng này có những đặc điểm sau:
– Độ sáng tương đối đồng đều, không quá sáng hoặc quá tối
– Là 1 vùng lân cận nhau (do máu chảy lan)
=> Ta có thể sử dụng phân ngưỡng (threshold) để tìm
Thực hiện
Viết 1 chương trình có 2 thanh seekbar để tìm giá trị của vùng máu tụ
Loại bỏ những vùng quá sáng trong ảnh bằng cách kéo thanh trượt High xuống
Loại bỏ vùng quá tối bằng cách kéo thanh trượt Low lên
Tới đây ta thấy rằng vùng máu tụ có hình dạng khác hoàn toàn những vùng khác. Do đó dùng blob để phát hiện, đọc thêm về blob ở https://thigiacmaytinh.com/su-dung-floodfill-de-tim-ky-tu/
Kích thước của blob tùy thuộc vào size ảnh input, do đó các bạn tự chọn size phù hợp. Sau khi tìm ra thì tô màu đỏ cho ảnh.
Để đảm bảo độ sáng ổn định, các bạn nên dùng hàm cv::equalizeHist()
Download
Đây là chương trình demo thuật toán đã được build sẵn, chương trình load ảnh cùng folder để xử lý. Như vậy các bạn chỉ cần copy ảnh vào cùng folder với file exe là được.
Để chạy được chương trình các bạn cần phải cài đặt:
.NET framework 4.5 offline installer (67MB) (Nếu đang dùng Windows 10 thì không cần cài vì Windows 10 có sẵn)
C++ redistribute 2015
Bộ ảnh chụp CT não, download về giải nén, sau đó copy 1 ảnh vào folder bin vì chương trình tự động load ảnh trong folder bin
Brain_CT.zip (10MB – Google Drive)
Source code
[sociallocker]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
void OnTrackbar(int, void*) { cv::Mat matBin; cv::threshold(mat, matBin, high, 255, CV_THRESH_TOZERO_INV); cv::threshold(matBin, matBin, low , 255, CV_THRESH_TOZERO); cv::threshold(matBin, matBin, 0, 255, CV_THRESH_BINARY); cv::imshow("brain", matBin); } void main(int argc, char** argv) { mat = "img1.jpg"; cv::cvtColor(mat, mat, cv::COLOR_BGR2GRAY); cv::equalizeHist(mat, mat); cv::namedWindow("brain"); cv::createTrackbar("low", "brain", &low, 255, OnTrackbar); cv::createTrackbar("high", "brain", &high, 255, OnTrackbar); cv::imshow("brain", mat); OnTrackbar(0, nullptr); } |
Anh ơi link tải bị lỗi rồi ạ
Mình đã update lại rồi nhé 😀 Thanks bạn đã báo
link lỗi rồi a ơi
link nào lỗi?
k a ạ.do mạng e.mà bài này viết chạy trên 32 bit ak a?
32 bit thì windows 64bit hay Windows 32bit đều chạy được
sao e tải code về chạy k được a nhỉ?nó bắt break ra ý
bạn chụp hình lỗi rồi post vào group xem thử: https://www.facebook.com/groups/thigiacmaytinh/
a phê duyệt e vào group vs ạ
tài khoản của bạn là gì?
Linh Tinh ạ