Mục lục:
- Bước 1: Điều kiện tiên quyết
- Bước 2: Điều kiện tiên quyết (không phải)
- Bước 3: Điều kiện tiên quyết (không phải)
- Bước 4: Điều kiện tiên quyết (không phải)
- Bước 5: Dọn dẹp Matlab để chuẩn bị chạy mã
- Bước 6: Chọn 10 hình ảnh mắt bình thường và 10 hình ảnh có các triệu chứng bệnh võng mạc tiểu đường
- Bước 7: Chọn 10 hình ảnh mắt bình thường và 10 hình ảnh có các triệu chứng bệnh võng mạc tiểu đường (không)
- Bước 8: Tạo 2 biến (Bình thường và được chẩn đoán) và đặt mỗi biến bằng 0
- Bước 9: Tạo vòng lặp for để tự động tải lên hình ảnh bình thường
- Bước 10: Tạo vòng lặp for để tự động tải lên hình ảnh bình thường (không)
- Bước 11: Cắt các đường viền của hình ảnh
- Bước 12: Tạo hình ảnh thang màu xám
- Bước 13: Tạo hình ảnh tương phản
- Bước 14: Tăng cường hình ảnh tương phản
- Bước 15: Tạo bộ lọc trung bình
- Bước 16: Kết hợp Bộ lọc Trung bình với Hình ảnh Tương phản
- Bước 17: Tạo mặt nạ trung bình mới bằng cách trừ đi các điểm ảnh
- Bước 18: Tạo hình ảnh được lọc nhị phân
- Bước 19: Loại bỏ các đốm màu nhỏ hơn được tìm thấy trong các hình ảnh được lọc
- Bước 20: Tạo phần tử cấu trúc đĩa
- Bước 21: Thực hiện các hoạt động đóng hình thái
- Bước 22: Tìm các đối tượng có khả năng kết nối ít nhất là 8
- Bước 23: Tìm số lượng điểm ảnh được kết nối tối đa
- Bước 24: Đặt Giá trị điểm ảnh tối đa thành 0 và Tìm điểm ảnh bằng khả năng kết nối> = 26 Pixel
- Bước 25: Loại bỏ các bình máu trong ảnh
- Bước 26: Hiển thị hình
- Bước 27: Loại bỏ các bình và đếm các khối máu
- Bước 28: Chẩn đoán hình ảnh võng mạc dựa trên số lượng cục máu đông được xác định
- Bước 29: Nếu có nhiều hơn 5 khối…
- Bước 30: Lặp lại quy trình lọc cho hình ảnh bình thường với giá trị chữ số hình ảnh là 2 và 3
- Bước 31: Lặp lại toàn bộ quy trình cho các hình ảnh được chẩn đoán
- Bước 32: Phân tích thống kê
- Bước 33: Tìm khoảng tin cậy
Video: Chẩn đoán tự động bệnh võng mạc tiểu đường qua MATLAB: 33 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:35
(Xem đề cương mã ở trên)
Bệnh võng mạc tiểu đường là một bệnh về mắt liên quan đến tiểu đường do lượng đường trong máu cao. Lượng đường trong máu cao làm cho các mạch máu trong võng mạc sưng lên, dẫn đến các mạch máu mở rộng và thậm chí là rò rỉ mạch, dẫn đến các điểm tối trên hình ảnh võng mạc. Với mã này, chúng tôi hướng đến việc sử dụng sự xuất hiện của các điểm rò rỉ mạch máu như một dấu hiệu của bệnh võng mạc tiểu đường nền, mặc dù các kỹ thuật chẩn đoán sâu hơn sẽ được yêu cầu trong thế giới thực. Mục tiêu của mã này là tự động hóa quá trình xử lý hình ảnh và chẩn đoán hình ảnh võng mạc để xác định các dấu hiệu của bệnh võng mạc tiểu đường thể hiện qua các điểm tối trên hình ảnh võng mạc.
10 hình ảnh võng mạc bình thường và 10 hình ảnh võng mạc được chẩn đoán được xử lý thông qua một mã đầu tiên đọc và lọc hình ảnh, sau đó định lượng các điểm tối để xác định xem có các triệu chứng bệnh võng mạc tiểu đường hay không, dựa trên một ngưỡng nhất định. Kết quả sau đó được in ra cửa sổ lệnh để người xem giải thích.
Bước 1: Điều kiện tiên quyết
1. Đảm bảo rằng bạn đã tải xuống chương trình MATLAB trên máy tính của mình.
2. Tải xuống tệp txt có trong liên kết. (Nhấn ‘ctrl + s’ để lưu vào cùng thư mục với Mã MATLAB)
Bước 2: Điều kiện tiên quyết (không phải)
4. Mở MATLAB và gõ ‘uiimport’ vào cửa sổ lệnh.
5. Chọn tệp Officialdiagnoses.txt và nhập nó vào MATLAB dưới dạng ma trận ô.
6. Đảm bảo rằng bạn thấy ‘officialdiagnoses’ là một biến trong không gian làm việc.
Bước 3: Điều kiện tiên quyết (không phải)
7. Tải xuống hàm ModWald.m, có thể lấy từ mã trên hoặc tải xuống từ Canvas.
(Mã do Giáo sư King và Giáo sư Choi cung cấp)
Bước 4: Điều kiện tiên quyết (không phải)
8. Tải xuống 400 hình ảnh thô từ phần dữ liệu của Dự án STARE.
Bước 5: Dọn dẹp Matlab để chuẩn bị chạy mã
Thêm vào mã:
1. close all (Đóng tất cả các hình ảnh đã mở trước đó)
2. clearvars - ngoại trừ các chẩn đoán chính thức (Xóa tất cả các biến ngoại trừ tệp txt chẩn đoán chính thức được nhập trước đó)
3. cclc (Xóa cửa sổ lệnh)
Bước 6: Chọn 10 hình ảnh mắt bình thường và 10 hình ảnh có các triệu chứng bệnh võng mạc tiểu đường
1. Lấy tệp văn bản chẩn đoán và trích xuất tên hình ảnh. Những tên này được chứa trong cột đầu tiên của tệp văn bản, vì vậy để trích xuất chúng, hãy nhập 'officialdiagnoses (:, 1)'. Ma trận tên hình ảnh được gán cho một biến, “all_image_numbers”
2. Chuyển đổi biến all_image_numbers từ một mảng ô thành một mảng ma trận bằng cách sử dụng hàm cell2mat
Bước 7: Chọn 10 hình ảnh mắt bình thường và 10 hình ảnh có các triệu chứng bệnh võng mạc tiểu đường (không)
3. Chọn 10 ảnh mắt bình thường để chạy mã. Các hình ảnh được chọn trong trường hợp này là 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.
Đặt những con số này vào ma trận và gán chúng cho một biến sẽ được gọi khi tải hình ảnh.
4. Lặp lại bước 3 đối với hình ảnh võng mạc đã được chẩn đoán mắc bệnh võng mạc tiểu đường. Các hình ảnh được chọn trong trường hợp này là 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.
Bước 8: Tạo 2 biến (Bình thường và được chẩn đoán) và đặt mỗi biến bằng 0
Tạo các biến này trước vòng lặp for để khởi tạo các số của vòng lặp.
Bước 9: Tạo vòng lặp for để tự động tải lên hình ảnh bình thường
1. Tạo vòng lặp for
2. Đặt một biến đếm (trong trường hợp này là i) thành ma trận có các giá trị 1-10. Biến đếm này sẽ được sử dụng để gọi từng hình ảnh riêng lẻ
3. Lấy phần tử i trong ma trận ảnh để trích xuất và chuyển đổi tên ảnh từ chuỗi thành số bằng hàm num2str.
Tìm số chữ số có trong tên hình ảnh bằng cách sử dụng hàm numel. Gán giá trị này cho một biến, số_thông thường. Số này phải là 1 đối với các số có một chữ số, 2 đối với các số có hai chữ số và 3 đối với các số có ba chữ số. Thông tin này sẽ được sử dụng để tự động gọi hình ảnh.
Bước 10: Tạo vòng lặp for để tự động tải lên hình ảnh bình thường (không)
3. Tạo một câu lệnh if chứa cả ba khả năng từ các bước trước. Nếu tên hình ảnh có 1 chữ số, hình ảnh sẽ được gọi là “im000”, nếu nó có 2 chữ số, hình ảnh sẽ được gọi là “im00” và nếu nó có 3, hình ảnh sẽ được gọi là “im0”.
4. Dưới mỗi câu lệnh if, hãy gán một biến để imread “im” dưới câu lệnh if tương ứng với số lượng 0 thích hợp (như mô tả ở trên), theo sau là i.
Bước 11: Cắt các đường viền của hình ảnh
Lấy hình ảnh gốc và áp dụng bộ lọc imcrop để loại bỏ các đường viền màu đen và gán cho một I_crop biến. Hình chữ nhật cắt được chỉ định bằng ma trận [95, 95, 500, 410].
Bước 12: Tạo hình ảnh thang màu xám
Lấy hình ảnh đã cắt và áp dụng bộ lọc rbg2gray để thay đổi hình ảnh thành thang độ xám. Gán hình ảnh này cho biến I2.
Bước 13: Tạo hình ảnh tương phản
Lấy hình ảnh I2 và sử dụng imadjust để thay đổi tỷ lệ các giá trị cường độ.
Lấy các giá trị nằm trong phạm vi [0,2, 0,7] và bán lại chúng thành [0, 1]. Gamma được đặt thành 0,8 để làm cho hình ảnh sáng hơn. Gán hình ảnh mới cho I_adjusted.
Bước 14: Tăng cường hình ảnh tương phản
Chụp ảnh I_adjusted và sử dụng chức năng adapthisteq để tăng độ tương phản.
Cú pháp Adapthisteq yêu cầu tên hình ảnh, I_adjusted, ‘numTiles’, kích thước của numTiles, ‘nBins’ và số lượng thùng. Kích thước của numTiles được đặt thành [8 8], chia hình ảnh thành 8x8 ô và số thùng được đặt thành 28. Gán hình ảnh cho I_constrast.
Bước 15: Tạo bộ lọc trung bình
Tạo một biến có tên 'meanfilt' bằng cách sử dụng hàm fspecial. Nhập 'hàm trung bình' để tạo bộ lọc tính trung bình và chèn [90 90] cho kích thước cửa sổ trượt.
Bước 16: Kết hợp Bộ lọc Trung bình với Hình ảnh Tương phản
Tạo một biến mới có tên mask_mean và sử dụng hàm imfilter để lấy hình ảnh I_contrast và áp dụng bộ lọc trung bình đã tạo trước đó.
Bước 17: Tạo mặt nạ trung bình mới bằng cách trừ đi các điểm ảnh
Tạo một biến có tên mask_mean2 và sử dụng hàm imsubtract để trừ giá trị của mỗi pixel trong I_contrast khỏi pixel tương ứng trong mask_mean.
Bước 18: Tạo hình ảnh được lọc nhị phân
Chuyển hình ảnh từ thang độ xám sang màu đen và trắng bằng cách sử dụng tính năng thấm đẫm. Nhập mask_mean2, "thích ứng", "ForegroundPolarity", "tối", "Độ nhạy", 0,6. Gán hình ảnh mới này cho mask_binarize.
Bước 19: Loại bỏ các đốm màu nhỏ hơn được tìm thấy trong các hình ảnh được lọc
Loại bỏ các đối tượng có kết nối nhỏ hơn 100 pixel bằng cách sử dụng hàm bwareaopen trên mask_binarize và đặt giá trị ngưỡng thành 100. Gán biến là bw.
Bước 20: Tạo phần tử cấu trúc đĩa
Tạo một phần tử cấu trúc đĩa (với bán kính 2) bằng cách sử dụng hàm strel. Gán nó cho se.
Bước 21: Thực hiện các hoạt động đóng hình thái
Lấy bw và áp dụng hàm imclose cho phần tử cấu trúc để thực hiện thao tác đóng hình thái trên đối tượng.
Bước 22: Tìm các đối tượng có khả năng kết nối ít nhất là 8
Lấy bw và sử dụng bwconncomp để tìm các đối tượng có kết nối ít nhất là 8 trong hình ảnh. Gán đầu ra số cho cc_1.
Bước 23: Tìm số lượng điểm ảnh được kết nối tối đa
Sử dụng hàm cellfun để thực hiện hàm “numel” trên mọi ô trong CC. Thao tác này tìm số phần tử trong ô PixelIdxList. Gán Giá trị cho “numPixels”.
Tìm giá trị lớn nhất trong numPIxels. Gán giá trị tối đa lớn nhất cho “lớn nhất” và chỉ số của giá trị lớn nhất cho “idx”.
Bước 24: Đặt Giá trị điểm ảnh tối đa thành 0 và Tìm điểm ảnh bằng khả năng kết nối> = 26 Pixel
= 26 Kết nối Pixel "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 Kết nối Pixel "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 Khả năng kết nối Pixel "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">
= 26 Khả năng kết nối Pixel "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">
Đặt các pixel có giá trị lớn nhất trong hình ảnh “bw” thành 0, làm cho các pixel có màu đen.
Tìm các đối tượng có kết nối ít nhất 26 pixel trong hình ảnh bằng bwconncomp. Gán cho biến cc_1.
Bước 25: Loại bỏ các bình máu trong ảnh
Loại bỏ các mạch máu vẫn còn trong hình ảnh bằng cách sử dụng chức năng bwpropfilt với phạm vi [0, 0,9].
[0,9, 1] bị loại trừ vì các giá trị gần 1 cho biết một dòng. Gán cho “RemoveVessels”.
Bước 26: Hiển thị hình
Hiển thị từng hình ảnh đã lọc trong một ô con. Imshow. với đầu vào 'border' và 'chặt chẽ', hiển thị từng hình ảnh trong cấu trúc ô con. Thêm tiêu đề cho mỗi hình ảnh để phân biệt bộ lọc nào đã được sử dụng.
Bước 27: Loại bỏ các bình và đếm các khối máu
1. Dùng “RemoveVessels” và áp dụng tính năng ‘Centroid’ trong các phần tử vùng để xác định tâm của các đối tượng trong hình ảnh. Những vật thể này phải tương ứng với cục máu đông có trong hình ảnh.
2. Đếm số lượng cục máu đông được xác định bằng cách lấy chiều dài của ma trận trung tâm.
Bước 28: Chẩn đoán hình ảnh võng mạc dựa trên số lượng cục máu đông được xác định
Sử dụng câu lệnh if để chẩn đoán hình ảnh dựa trên số lượng cục máu đông được xác định.
Nếu số lượng trung tâm được xác định nhỏ hơn hoặc bằng 5, hình ảnh được xác định là bình thường.
Nếu số lượng trung tâm lớn hơn 5, hình ảnh được chẩn đoán là bệnh võng mạc tiểu đường.
Kết quả được in ra cửa sổ lệnh bằng fprintf.
Bước 29: Nếu có nhiều hơn 5 khối…
Lặp lại các hướng dẫn ở trên cho các hình ảnh được chẩn đoán dưới dạng một tuyên bố khác. Phần này sẽ chạy nếu số lượng đốm màu lớn hơn 5.
Kết thúc câu lệnh if.
Bước 30: Lặp lại quy trình lọc cho hình ảnh bình thường với giá trị chữ số hình ảnh là 2 và 3
Lặp lại quy trình cho phần còn lại của câu lệnh if ban đầu khi numel (số chữ số trong số hình ảnh) bằng 2 và 3. Điều này hoàn thành vòng lặp for cho các hình ảnh bình thường.
Kết thúc vòng lặp for.
Bước 31: Lặp lại toàn bộ quy trình cho các hình ảnh được chẩn đoán
Lặp lại toàn bộ quá trình bằng cách sử dụng các hình ảnh được chẩn đoán được liệt kê bởi ma trận “số_tố_tính_hấp_chính”.
Đảm bảo xem qua mọi hình (i) và thay đổi nó thành hình (i + 10) để các số liệu được chẩn đoán sẽ hiển thị dưới dạng hình 11 đến 20.
Bước 32: Phân tích thống kê
1. 'Actual_Diagnosis_Matrix' được sử dụng để so sánh kết quả với chẩn đoán chính thức được tìm thấy trong tệp txt. 10 số không đầu tiên chỉ ra rằng 10 hình ảnh đầu tiên phải bình thường. 10 hình ảnh cuối cùng chỉ ra rằng 10 hình ảnh cuối cùng nên được phân loại là bệnh võng mạc tiểu đường.
2. Dấu bằng kép được sử dụng để tạo 'number_correct' tạo ra một mảng logic bằng cách so sánh giá trị của các phần tử tương ứng của 'Actual_Diagnosis_Matrix' với 'Diagnosis_Matrix' được tạo từ vòng lặp for.
Đối với mỗi phần tử phù hợp với chẩn đoán, 1 sẽ được thêm vào, có nghĩa là mã đã chẩn đoán chính xác hình ảnh đó. Nếu sai nó sẽ thêm số 0 vào ma trận.
Sau đó, lấy tổng của số đó cộng lại tất cả những cái. Nói cách khác, nó tìm tổng số các hình ảnh được chẩn đoán chính xác.
3. 'Final_percentage_correct' là tỷ lệ phần trăm được tính toán về độ chính xác của mã chẩn đoán bệnh võng mạc tiểu đường. Số lượng hình ảnh được chẩn đoán chính xác được chia cho 20 (tổng số hình ảnh) và nhân với 100 để tìm ra tỷ lệ chẩn đoán thành công.
Bước 33: Tìm khoảng tin cậy
1. Đảm bảo rằng bạn đã tải xuống ModWald.m để gọi nó dưới dạng một hàm. Nếu không có hàm, bạn sẽ phải tự tính khoảng tin cậy bằng phương pháp Wald đã sửa đổi.
2. Chức năng ModWald có 2 đầu vào trong đó đầu vào là số lượng hình ảnh được xác định chính xác và đầu vào thứ hai là tổng số lượng hình ảnh.
3. Hàm ModWald sẽ xuất ra các giới hạn dưới và trên của khoảng tin cậy của tỷ lệ đối với độ chính xác của dữ liệu được lấy mẫu. Nói cách khác, bạn sẽ đưa ra một khoảng tỷ lệ phần trăm trong đó phần trăm thực sự về độ chính xác của mã sẽ nằm.
4. Sử dụng fprintf dưới đây để xuất số liệu thống kê và khoảng tin cậy vào cửa sổ lệnh.
> fprintf ('%. 0f phần trăm hình ảnh võng mạc đã được chẩn đoán chính xác theo chẩn đoán chính thức. / n / n', Final_percentage_correct)
> fprintf ('Tỷ lệ phần trăm thực mà mã của chúng tôi sẽ chẩn đoán chính xác bệnh võng mạc tiểu đường / n sẽ nằm trong khoảng [%.3f,%.3f], dựa trên 20 hình ảnh được lấy mẫu / n', Lower_bound, upper_bound)
Đề xuất:
Lực tác động lên gót chân và chân của vận động viên khi chạy: 6 bước
Lực tác động lên gót chân và chân của vận động viên khi chạy: Đối với dự án của mình, tôi muốn kiểm tra lượng lực mà gót chân và chân của vận động viên phải tiếp xúc và liệu đôi giày chạy bộ mới có thực sự giảm lực hay không. Gia tốc kế là một thiết bị phát hiện gia tốc theo các trục X, Y và Z. Gia tốc là thước đo
Vòng điều chỉnh có động cơ cho kính hiển vi Mục tiêu: 8 bước (có hình ảnh)
Cổ áo hiệu chỉnh có động cơ cho Mục tiêu Kính hiển vi: Trong hướng dẫn này, bạn sẽ tìm thấy một dự án liên quan đến Arduino và in 3D. Tôi tạo ra nó để điều khiển vòng đệm hiệu chỉnh của vật kính hiển vi
Phát hiện chuyển động và tiêu diệt mục tiêu! Dự án DIY Autonomous: 5 bước
Phát hiện chuyển động và tiêu diệt mục tiêu! Dự án tự làm tự động: Phát hiện chuyển động và tiêu diệt mục tiêu! Trong video này, tôi hướng dẫn bạn cách xây dựng dự án theo dõi chuyển động tự làm với Raspberry Pi 3. Dự án tự động nên nó di chuyển và bắn súng khi phát hiện chuyển động. Tôi đã sử dụng mô-đun laser cho dự án này, nhưng bạn
Làm thế nào để tạo ra một chiếc điện thoại bằng quả chuối (đường dây đất liền) và bộ cơ bản bằng quả chuối: 20 bước (có hình ảnh)
Làm thế nào để tạo ra một chiếc điện thoại bằng quả chuối (đường dây đất liền) và bộ cơ bản bằng quả chuối: Đây là nó. Bạn chỉ còn vài tuần trước lễ Giáng sinh và bạn cần tìm một món quà thực sự độc đáo và thể hiện bạn là người làm ra bao nhiêu. Có hàng ngàn sự lựa chọn, nhưng một thứ bạn thực sự muốn làm là một quả chuối tele
Bỏ qua các hệ thống lọc trên máy tính mà không có sự không an toàn của TOR (Bộ định tuyến củ hành) hoặc đường hầm Internet qua SSH: 5 bước
Bỏ qua Hệ thống lọc trên máy tính mà không có sự không an toàn của TOR (Bộ định tuyến củ hành) hoặc Đường hầm Internet qua SSH: Sau khi đọc một bài đăng về bộ định tuyến củ hành (tor) cho phép bạn vượt qua kiểm duyệt mà không bị theo dõi, tôi đã rất ngạc nhiên. Sau đó, tôi đọc rằng nó không an toàn lắm vì một số nút có thể nhập dữ liệu sai và trả lại các trang sai. Tôi đã nghĩ đến myse