Mundarija:

MATLAB orqali diabetik retinopatiyaning avtomatlashtirilgan diagnostikasi: 33 qadam
MATLAB orqali diabetik retinopatiyaning avtomatlashtirilgan diagnostikasi: 33 qadam

Video: MATLAB orqali diabetik retinopatiyaning avtomatlashtirilgan diagnostikasi: 33 qadam

Video: MATLAB orqali diabetik retinopatiyaning avtomatlashtirilgan diagnostikasi: 33 qadam
Video: Virtual Wellness Class: Gentle Exercises While Laying Down 2024, Noyabr
Anonim
MATLAB orqali diabetik retinopatiyaning avtomatlashtirilgan diagnostikasi
MATLAB orqali diabetik retinopatiyaning avtomatlashtirilgan diagnostikasi
MATLAB orqali diabetik retinopatiyaning avtomatlashtirilgan diagnostikasi
MATLAB orqali diabetik retinopatiyaning avtomatlashtirilgan diagnostikasi

(Yuqoridagi kod sxemasiga qarang)

Diabetik retinopatiya-bu qondagi qand miqdorining ko'payishi natijasida kelib chiqadigan diabet bilan bog'liq ko'z kasalligi. Qondagi qand miqdorining yuqori bo'lishi ko'zning to'r pardasidagi qon tomirlarining shishishiga olib keladi, bu esa tomirlarning kengayishiga va hatto tomirlarning oqishiga olib keladi, bu esa to'r pardasi tasvirlarida qorong'u joylarga olib keladi. Ushbu kod yordamida biz qon tomirlarida oqish joylarining paydo bo'lishini fon diabetik retinopatiyasining ko'rsatkichi sifatida ishlatishni maqsad qilib qo'yganmiz, lekin real dunyoda qo'shimcha diagnostika usullari talab qilinadi. Ushbu kodning maqsadi - retinal tasvirlardagi qora dog'lar orqali ko'rsatiladigan diabetik retinopatiya belgilarini aniqlash uchun tasvirni qayta ishlash va retinal tasvirlar diagnostikasini avtomatlashtirish.

Ko'zning to'r pardasining 10 ta normal tasviri va 10 ta aniqlangan retina tasviri kod orqali ishlov berilgan, u avval tasvirlarni o'qiydi va filtrlaydi, so'ngra qora dog'lar miqdorini aniqlaydi, bu chegaraga qarab diabetik retinopatiya alomatlari bor yoki yo'qligini aniqlash uchun. Keyin natijalar tomoshabinlar talqini uchun buyruqlar oynasida chop etiladi.

1 -qadam: old shartlar

Old shartlar
Old shartlar

1. Kompyuteringizda MATLAB dasturi yuklanganligiga ishonch hosil qiling.

2. Havolada topilgan txt faylini yuklab oling. (MATLAB kodi bilan bir xil katalogga saqlash uchun "ctrl+s" tugmalarini bosing)

2 -qadam: old shartlar (davomi yo'q)

Old shartlar (davomi)
Old shartlar (davomi)
Old shartlar (davomi)
Old shartlar (davomi)

4. MATLAB -ni oching va buyruqlar oynasiga "uiimport" kiriting.

5. officialdiagnoses.txt faylini tanlang va uni MATLABga hujayra matritsasi sifatida import qiling.

6. "Rasmiy diagnostika" ni ish maydonida o'zgaruvchi sifatida ko'rishingizga ishonch hosil qiling.

3 -qadam: old shartlar (davomi yo'q)

Old shartlar (davomi)
Old shartlar (davomi)

7. ModWald.m funksiyasini yuklang, uni yuqoridagi koddan olish mumkin yoki uni Canvas -dan yuklab olish mumkin.

(Kodni professor King va professor Choi taqdim etgan)

4 -qadam: old shartlar (davomi yo'q)

Old shartlar (davomi)
Old shartlar (davomi)

8. The STARE Project ma'lumotlar bo'limidan 400 ta xom tasvirni yuklab oling.

5 -qadam: Kodni ishga tushirishga tayyorgarlik ko'rish uchun Matlab -ni tozalang

Kodni ishga tushirishga tayyorgarlik ko'rish uchun Matlab -ni tozalang
Kodni ishga tushirishga tayyorgarlik ko'rish uchun Matlab -ni tozalang

Kodga qo'shing:

1. hammasini yoping (avval ochilgan rasmlarni yopadi)

2. clearvars - rasmiy tashxislardan tashqari (ilgari import qilingan rasmiy tashxis txt fayli bundan mustasno, barcha o'zgaruvchilarni tozalaydi)

3. cclc (Buyruqlar oynasini tozalaydi)

6 -qadam: 10 ta oddiy ko'z tasvirini va diabetik retinopatiya belgilari bo'lgan 10 ta tasvirni tanlang

Diabetik retinopatiya belgilari bo'lgan 10 ta oddiy ko'z tasvirini va 10 ta tasvirni tanlang
Diabetik retinopatiya belgilari bo'lgan 10 ta oddiy ko'z tasvirini va 10 ta tasvirni tanlang
Diabetik retinopatiya belgilari bo'lgan 10 ta oddiy ko'z tasvirini va 10 ta tasvirni tanlang
Diabetik retinopatiya belgilari bo'lgan 10 ta oddiy ko'z tasvirini va 10 ta tasvirni tanlang

1. Tashxis matnli faylini oling va rasm nomlarini chiqarib oling. Bu nomlar matnli faylning birinchi ustunida joylashgan bo'lib, ularni chiqarib olish uchun 'officialdiagnoses (:, 1)' yozing. Rasm nomlari matritsasi "all_image_numbers" o'zgaruvchisiga berilgan.

2. cell2mat funktsiyasidan foydalanib, all_image_numbers o'zgaruvchisini hujayra massividan matritsa qatoriga aylantiring.

7 -qadam: Diabetik retinopatiya belgilari bo'lgan 10 ta oddiy ko'z tasvirini va 10 ta tasvirni tanlang (davomi yo'q)

Diabetik retinopatiya belgilari bo'lgan 10 ta oddiy ko'z tasvirini va 10 ta tasvirni tanlang (davomi yo'q)
Diabetik retinopatiya belgilari bo'lgan 10 ta oddiy ko'z tasvirini va 10 ta tasvirni tanlang (davomi yo'q)
Diabetik retinopatiya belgilari bo'lgan 10 ta oddiy ko'z tasvirini va 10 ta tasvirni tanlang (davomi yo'q)
Diabetik retinopatiya belgilari bo'lgan 10 ta oddiy ko'z tasvirini va 10 ta tasvirni tanlang (davomi yo'q)

3. Kodni ishlatish uchun 10 ta oddiy ko'z tasvirini tanlang. Bu holda tanlangan tasvirlar 278, 199, 241, 235, 35, 77, 82, 164, 239, 170 edi.

Bu raqamlarni matritsaga joylashtiring va ularni tasvirlarni yuklashda chaqiriladigan o'zgaruvchiga tayinlang.

4. Diabetik retinopatiya tashxisi qo'yilgan retinal tasvirlar uchun 3 -bosqichni takrorlang. Bu holda tanlangan tasvirlar 139, 137, 136, 135, 133, 140, 141, 116, 157, 188 edi.

8 -qadam: 2 o'zgaruvchini yarating (Oddiy va tashxis qilingan) va ularning har birini 0 ga qo'ying

2 o'zgaruvchini yarating (Oddiy va tashxis qilingan) va ularning har birini 0 ga qo'ying
2 o'zgaruvchini yarating (Oddiy va tashxis qilingan) va ularning har birini 0 ga qo'ying

Loop raqamlarini ishga tushirish uchun for o'zgaruvchisidan oldin bu o'zgaruvchilarni yarating.

9 -qadam: Oddiy tasvirlarni avtomatik yuklash uchun Loop yaratish

Oddiy rasmlarni avtomatik yuklash uchun Loop yaratish
Oddiy rasmlarni avtomatik yuklash uchun Loop yaratish

1. for loop yaratish

2. Hisoblash o'zgaruvchisini (i, bu holda) 1-10 qiymatlar matritsasiga o'rnating. Ushbu hisoblash o'zgaruvchisi har bir tasvirni alohida chaqirish uchun ishlatiladi

3. Num2str funksiyasi yordamida tasvir nomini qatordan raqamga aylantirish va aylantirish uchun tasvir matritsasidagi i elementini oling.

Raqam funktsiyasidan foydalanib, rasm nomidagi raqamlar sonini toping. Bu qiymatni raqamlar_normal o'zgaruvchisiga belgilang. Bu raqam bitta raqamli raqamlar uchun 1, ikki xonali raqamlar uchun 2 va uch xonali raqamlar uchun 3 bo'lishi kerak. Bu ma'lumotlar rasmlarga avtomatik qo'ng'iroq qilish uchun ishlatiladi.

10 -qadam: Oddiy rasmlarni avtomatik yuklash uchun Loop yaratish

Oddiy rasmlarni avtomatik yuklash uchun Loop yaratish (davom etmaydi)
Oddiy rasmlarni avtomatik yuklash uchun Loop yaratish (davom etmaydi)

3. Oldingi bosqichlarning barcha uchta imkoniyatini o'z ichiga olgan if iborasini yarating. Agar tasvir nomi 1 ta raqamdan iborat bo'lsa, tasvir "im000", agar 2 ta raqam bo'lsa, tasvir "im00", 3 bo'lsa, tasvir "im0" deb nomlanadi.

4. Har bir if ifodasi ostida, mos keladigan, agar nolli sonli (yuqorida ta'riflanganidek), keyin "i" yozuvi ostida "im" ni o'qish uchun o'zgaruvchini belgilang.

11 -qadam: Rasm chegaralarini kesib oling

Rasm chegaralarini kesib oling
Rasm chegaralarini kesib oling

Qora chegaralarni yo'q qilish va I_crop o'zgaruvchiga tayinlash uchun asl tasvirni oling va imcrop filtrini qo'llang. Kesish to'rtburchagi matritsa yordamida aniqlanadi [95, 95, 500, 410].

12-qadam: Kulrang o'lchamdagi tasvirni yarating

Kulrang o'lchamdagi tasvirni yarating
Kulrang o'lchamdagi tasvirni yarating

Kesilgan tasvirni oling va tasvirni kul rangga o'zgartirish uchun rbg2gray filtrini qo'llang. Bu tasvirni I2 o'zgaruvchiga belgilang.

13 -qadam: Kontrastli tasvirni yarating

Kontrastli rasm yarating
Kontrastli rasm yarating

I2 tasvirini oling va intensivlik qiymatlarini qayta o'lchash uchun imadjust -dan foydalaning.

[0,2, 0,7] oralig'iga kiradigan qiymatlarni oling va ularni [0, 1] ga qayta o'lchamang. Tasvirni yorqinroq qilish uchun gamma 0,8 ga o'rnatiladi. Yangi tasvirni I_adjusted ga belgilang.

14 -qadam: Kontrastli tasvirni kuchaytirish

Kontrastli tasvirni kuchaytirish
Kontrastli tasvirni kuchaytirish

I_ sozlangan tasvirni oling va kontrastni kuchaytirish uchun adapthisteq funktsiyasidan foydalaning.

Adapthisteq sintaksisida tasvir nomi, I_adjusted, "numTiles", numTiles hajmi, "nBins" va axlat qutilari soni talab qilinadi. NumTiles hajmi [8 8] ga o'rnatiladi, tasvirni 8x8 plitalarga bo'linadi va axlat qutilari soni 28 ga o'rnatiladi. I_constrast tasvirini belgilang.

15 -qadam: O'rtacha filtr yarating

O'rtacha filtr yaratish
O'rtacha filtr yaratish

Fspecial funktsiyasidan foydalanib, "Meanfilt" nomli o'zgaruvchini yarating. O'rtacha filtrni yaratish uchun "o'rtacha funktsiyani" kiriting va toymas oynaning o'lchamiga [90 90] kiriting.

16 -qadam: O'rtacha filtrni kontrastli tasvir bilan birlashtirish

O'rtacha filtrni kontrastli tasvir bilan birlashtiring
O'rtacha filtrni kontrastli tasvir bilan birlashtiring

Mas_mean nomli yangi o'zgaruvchini yarating va I_contrast tasvirini olish va avval yaratilgan o'rtacha filtrni qo'llash uchun imfilter funktsiyasidan foydalaning.

17 -qadam: Piksellarni olib tashlash orqali yangi o'rtacha niqob qiling

Piksellarni olib tashlash orqali yangi o'rtacha niqob yarating
Piksellarni olib tashlash orqali yangi o'rtacha niqob yarating

Mask_mean2 nomli o'zgaruvchini yarating va imsubtract funktsiyasidan foydalanib, I_contrast -dagi har bir pikselning qiymatini mask_mean -dagi mos keladigan pikseldan olib tashlang.

18 -qadam: Ikkilik filtrli tasvirni yarating

Ikkilik filtrli rasm yarating
Ikkilik filtrli rasm yarating

Kul rang o'lchovli tasvirlarni qora va oq rangga aylantiring. Kiritish mask_mean2, "moslashuvchan", "oldingi fon qutbliligi", "qorong'i", "sezuvchanlik", 0.6. Ushbu yangi rasmni mask_binarize ga tayinlang.

19 -qadam: Filtrlangan rasmlarda topilgan kichikroq bo'laklarni olib tashlang

Filtrlangan rasmlarda topilgan kichikroq bo'laklarni olib tashlang
Filtrlangan rasmlarda topilgan kichikroq bo'laklarni olib tashlang

Mask_binarize -dagi bwareaopen funktsiyasidan foydalanib, ulanishi 100 pikseldan kam bo'lgan ob'ektlarni olib tashlang va chegara qiymatini 100 ga qo'ying. O'zgaruvchini bw sifatida belgilang.

20 -qadam: Diskni tuzuvchi elementini yarating

Disk tuzilish elementini yarating
Disk tuzilish elementini yarating

Strel funktsiyasidan foydalanib, diskni tuzish elementini yarating (radiusi 2). Buni tayinlang.

21 -qadam: Morfologik yaqin operatsiyalarni bajaring

Morfologik yaqin operatsiyalarni bajarish
Morfologik yaqin operatsiyalarni bajarish

Ob'ektga morfologik yaqin operatsiyani bajarish uchun bw ni oling va imclose funktsiyasini strukturaviy elementga qo'llang.

22 -qadam: Kamida 8 ga ulanadigan ob'ektlarni toping

Kamida 8 ga ulanadigan ob'ektlarni toping
Kamida 8 ga ulanadigan ob'ektlarni toping

Bw -ni oling va bwconncomp -dan foydalanib, rasmda kamida 8 ta ulanishi mumkin bo'lgan ob'ektlarni toping. Raqam chiqishini cc_1 ga belgilang.

23 -qadam: Maksimal ulangan piksellar sonini toping

Ulangan piksellarning maksimal sonini toping
Ulangan piksellarning maksimal sonini toping
Ulangan piksellarning maksimal sonini toping
Ulangan piksellarning maksimal sonini toping

Har bir katakchadagi "raqam" funktsiyasini bajarish uchun cellfun funktsiyasidan foydalaning. Bu PixelIdxList katakchasidagi elementlar sonini topadi. "NumPixels" ga qiymat bering.

NumPIxelsda maksimal qiymatlarni toping. Eng katta maksimalni "eng katta" ga va maksimal qiymat indeksini "idx" ga belgilang.

24 -qadam: Maksimal piksel qiymatlarini 0 ga o'rnating va> = 26 pikselli ulanish bilan piksellarni toping

Rasmdagi qon tomirlarini olib tashlang
Rasmdagi qon tomirlarini olib tashlang

= 26 pikselli ulanish "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp

Raqamli displey
Raqamli displey

= 26 pikselli ulanish "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp

Kemalarni olib tashlang va qonning qonini hisoblang
Kemalarni olib tashlang va qonning qonini hisoblang

= 26 pikselli ulanish "src =" {{file.large_url | qo'shish: 'auto = webp & frame = 1 & height = 300' %} ">

Belgilangan qon pıhtılarının soniga qarab, to'r pardasi tasvirini aniqlang
Belgilangan qon pıhtılarının soniga qarab, to'r pardasi tasvirini aniqlang

= 26 pikselli ulanish "src =" {{file.large_url | qo'shish: 'auto = webp & frame = 1 & height = 300' %} ">

"Bw" tasviridagi eng katta qiymatga ega bo'lgan piksellarni 0 ga o'rnating va piksellarni qora qilib qo'ying.

Bwconncomp yordamida rasmda kamida 26 piksel ulanishi mumkin bo'lgan ob'ektlarni toping. Cc_1 o'zgaruvchiga tayinlang.

25 -qadam: Rasmdagi qon tomirlarini olib tashlang

[0, 0.9] diapazonli bwpropfilt funktsiyasidan foydalanib, rasmda mavjud bo'lgan qon tomirlarini olib tashlang.

[0.9, 1] chiqarib tashlangan, chunki 1 ga yaqin qiymatlar chiziqni bildiradi. "Yuk tashish kemalariga" topshiriq bering.

26 -qadam: Rasmni ko'rsatish

Har bir filtrlangan tasvirni pastki qismda ko'rsatish. Imshow. "chegara" va "qattiq" kirishlar bilan, har bir tasvirni subplot tuzilmasida ko'rsatadi. Qaysi filtr ishlatilganligini aniqlash uchun har bir rasmga sarlavha qo'shing.

27 -qadam: Kemalarni olib tashlang va qonning Bloblarini hisoblang

1. "RemoveVessels" ni oling va "Centroid" funktsiyasini mintaqadagi ob -havoda qo'llang, rasmdagi ob'ektlarning markaziy markazlarini aniqlang. Bu narsalar tasvirdagi qon pıhtılarına to'g'ri kelishi kerak.

2. Tsentroid matritsaning uzunligini olish orqali aniqlangan qon quyqalar sonini hisoblang.

28 -qadam: aniqlangan qon pıhtılarının soniga qarab, to'r pardasi tasvirini tashxis qiling

Belgilangan qon pıhtılarının soniga qarab tasvirni aniqlash uchun if iboralaridan foydalaning.

Agar aniqlangan tsentroidlar soni 5 dan kam yoki teng bo'lsa, tasvir normal deb topilgan.

Agar tsentroidlar soni 5 tadan ko'p bo'lsa, tasvirga diabetik retinopatiya tashxisi qo'yilgan.

Natijada fprintf yordamida buyruqlar oynasida chop etiladi.

29 -qadam: Agar 5 dan ortiq Blob bo'lsa …

Agar 5 ta Blobdan ko'p bo'lsa …
Agar 5 ta Blobdan ko'p bo'lsa …

Tashxis qo'yilgan tasvirlar uchun yuqoridagi ko'rsatmalarni boshqa bayonot sifatida takrorlang. Bloblar soni 5 dan katta bo'lsa, bu qism ishlaydi.

If iborasini tugating.

30 -qadam: Oddiy tasvirlar uchun tasvirni raqamli qiymatlari 2 va 3 bo'lgan filtrlash jarayonini takrorlang

Oddiy tasvirlar uchun filtrlash jarayonini 2 va 3 raqamli raqamli raqamlar bilan takrorlang
Oddiy tasvirlar uchun filtrlash jarayonini 2 va 3 raqamli raqamli raqamlar bilan takrorlang
Oddiy tasvirlar uchun filtrlash jarayonini 2 va 3 raqamli raqamli raqamlar bilan takrorlang
Oddiy tasvirlar uchun filtrlash jarayonini 2 va 3 raqamli raqamli raqamlar bilan takrorlang

Agar raqamlar soni 2 va 3 ga teng bo'lsa, asl nusxaning qolgan qismi uchun jarayonni takrorlang.

For loopini tugating.

31 -qadam: Diagnostik tasvirlar uchun butun jarayonni takrorlang

Diagnostik tasvirlar uchun butun jarayonni takrorlang
Diagnostik tasvirlar uchun butun jarayonni takrorlang

"Raqamlar_to_ekstrakt_diagnozi" matritsasida ko'rsatilgan tashxis qo'yilgan tasvirlar yordamida butun jarayonni takrorlang.

Har bir raqamni (i) bosib o'tib, uni (i+10) raqamiga o'zgartirganingizga ishonch hosil qiling, shunda tashxis qo'yilgan raqamlar 11 dan 20 gacha tasvir sifatida paydo bo'ladi.

32 -qadam: Statistik tahlil

Statistik tahlil
Statistik tahlil

1. "Actual_Diagnosis_Matrix" natijalarni txt faylidagi rasmiy tashxis bilan solishtirish uchun ishlatiladi. Birinchi 10 ta nol birinchi 10 ta tasvir normal bo'lishi kerakligini ko'rsatadi. Oxirgi 10 ta rasm shuni ko'rsatadiki, oxirgi 10 ta rasm diabetik retinopatiya deb tasniflanishi kerak.

2. "Raqam_to'g'ri" ni yaratish uchun ishlatiladigan teng tenglik belgisi "loop_funktsiyasi" ning tegishli elementlarining qiymatini for loopdan yaratilgan "Diagnosis_Matrix" ga solishtirib, mantiqiy qator hosil qiladi.

Tashxisga mos keladigan har bir element uchun 1 qo'shiladi, bu kod to'g'ri tasvirni aniqlagan. Agar noto'g'ri bo'lsa, matritsaga 0 qo'shiladi.

So'ngra, bu yig'indini olsak, hammasi qo'shiladi. Boshqacha qilib aytganda, u to'g'ri tashxis qo'yilgan tasvirlar yig'indisini topadi.

3. "Final_foiz_to'g'ri" - bu diabetik retinopatiya aniqlangan kodning qanchalik to'g'ri hisoblangan foizi. To'g'ri tashxis qo'yilgan tasvirlar sonini 20 ga (rasmlarning umumiy soniga) bo'linadi va 100 ga ko'paytirib, muvaffaqiyatli tashxis qo'yish foizini topadi.

33 -qadam: Ishonch oralig'ini topish

Ishonch oralig'ini topish
Ishonch oralig'ini topish

1. ModWald.m ni yuklanganligiga ishonch hosil qiling, uni funksiya deb atash mumkin. Vazifasiz, o'zgartirilgan Wald usuli yordamida ishonch oralig'ini o'zingiz hisoblashingiz kerak bo'ladi.

2. ModWald funksiyasi 2 ta kirishga ega, bu erda birinchisi to'g'ri aniqlangan tasvirlar soni, ikkinchisi - tasvirlarning umumiy miqdori.

3. ModWald funktsiyasi tanlangan ma'lumotlarning to'g'riligi uchun nisbatlar ishonch oralig'ining pastki va yuqori chegaralarini chiqaradi. Boshqacha qilib aytganda, siz foizlar oralig'ini berasiz, bu erda kodning to'g'riligining haqiqiy foizi yotadi.

4. Statistika va ishonch oralig'ini buyruq oynasiga chiqarish uchun quyida fprintf tugmasidan foydalaning.

> fprintf ('%. Rasmiy tashxisga ko'ra, to'r pardasi tasvirlarining 0f foiziga to'g'ri tashxis qo'yilgan. / n / n', Final_foiz_to'g'ri)

> fprintf ('Bizning kodimiz diabetik retinopatiyaga to'g'ri tashxis qo'yadigan haqiqiy foiz / n 20 namunali rasmga asoslangan holda [%.3f, %.3f] oralig'iga tushadi / n', pastki_bog'li, yuqori_bog'langan)

Tavsiya: