Turinys:

Automatinė diabetinės retinopatijos diagnozė per MATLAB: 33 žingsniai
Automatinė diabetinės retinopatijos diagnozė per MATLAB: 33 žingsniai

Video: Automatinė diabetinės retinopatijos diagnozė per MATLAB: 33 žingsniai

Video: Automatinė diabetinės retinopatijos diagnozė per MATLAB: 33 žingsniai
Video: Diabetinė retinopatija – kas ją sukelia, kokie gydymo būdai? 2024, Lapkritis
Anonim
Automatinė diabetinės retinopatijos diagnostika per MATLAB
Automatinė diabetinės retinopatijos diagnostika per MATLAB
Automatinė diabetinės retinopatijos diagnostika per MATLAB
Automatinė diabetinės retinopatijos diagnostika per MATLAB

(Žr. Aukščiau pateiktą kodo schemą)

Diabetinė retinopatija yra su diabetu susijusi akių liga, kurią sukelia didelis cukraus kiekis kraujyje. Dėl aukšto cukraus kiekio tinklainės kraujagyslės išsipučia, dėl to padidėja kraujagyslės ir netgi išsivysto kraujagyslės, todėl tinklainės vaizduose atsiranda tamsių dėmių. Naudodamiesi šiuo kodu, mes siekiame naudoti kraujagyslių nutekėjimo dėmių atsiradimą kaip diabetinės retinopatijos fono rodiklį, nors realiame pasaulyje reikės papildomų diagnostikos metodų. Šio kodo tikslas yra automatizuoti vaizdų apdorojimą ir tinklainės vaizdų diagnostiką, siekiant nustatyti diabetinės retinopatijos požymius, rodomus per tamsius tinklainės vaizdų taškus.

10 normalių tinklainės vaizdų ir 10 diagnozuotų tinklainės vaizdų buvo apdoroti naudojant kodą, kuris pirmiausia nuskaito ir filtruoja vaizdus, o tada kiekybiškai įvertina tamsius taškus, kad nustatytų, ar yra diabetinės retinopatijos simptomų, atsižvelgiant į nurodytą slenkstį. Tada rezultatai spausdinami į komandų langą, kad būtų galima interpretuoti žiūrovą.

1 žingsnis: Būtinos sąlygos

Būtinos sąlygos
Būtinos sąlygos

1. Įsitikinkite, kad kompiuteryje atsisiųsta MATLAB programa.

2. Atsisiųskite txt failą, esantį nuorodoje. (Paspauskite „ctrl+s“, kad išsaugotumėte tą patį katalogą kaip ir MATLAB kodas)

2 veiksmas: būtinos sąlygos (ne)

Būtinos sąlygos (ne)
Būtinos sąlygos (ne)
Būtinos sąlygos (ne)
Būtinos sąlygos (ne)

4. Atidarykite MATLAB ir komandų lange įveskite „uiimport“.

5. Pasirinkite failą officialdiagnoses.txt ir importuokite jį į MATLAB kaip ląstelių matricą.

6. Įsitikinkite, kad „oficialios diagnozės“matomos kaip kintamasis darbo vietoje.

3 veiksmas: būtinos sąlygos (ne)

Būtinos sąlygos (ne)
Būtinos sąlygos (ne)

7. Atsisiųskite funkciją „ModWald.m“, kurią galite gauti iš aukščiau pateikto kodo arba atsisiųsti iš „Canvas“.

(Kodą pateikė profesorius Kingas ir profesorius Choi)

4 žingsnis: būtinos sąlygos (ne)

Būtinos sąlygos (ne)
Būtinos sąlygos (ne)

8. Atsisiųskite 400 neapdorotų vaizdų iš STARE projekto duomenų skyriaus.

5 veiksmas: išvalykite „Matlab“ir pasiruoškite paleisti kodą

Išvalykite „Matlab“, kad pasiruoštumėte vykdyti kodą
Išvalykite „Matlab“, kad pasiruoštumėte vykdyti kodą

Pridėti prie kodo:

1. uždaryti viską (uždaro visus anksčiau atidarytus vaizdus)

2. clearvars - išskyrus oficialias diagnozes (išvalo visus kintamuosius, išskyrus oficialiai diagnozuotų txt failą, anksčiau importuotą)

3. cclc (išvalo komandų langą)

6 veiksmas: pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais

Pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais
Pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais
Pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais
Pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais

1. Paimkite diagnozės teksto failą ir ištraukite vaizdų pavadinimus. Šie pavadinimai yra pirmame teksto failo stulpelyje, kad juos išgautumėte, įveskite „officialdiagnoses (:, 1)“. Vaizdo pavadinimų matrica buvo priskirta kintamajam „all_image_numbers“

2. Konvertuokite kintamąjį all_image_numbers iš langelių masyvo į matricos masyvą, naudodami funkciją cell2mat

7 veiksmas: pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais (ne)

Pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais (ne)
Pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais (ne)
Pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais (ne)
Pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais (ne)

3. Norėdami paleisti kodą, pasirinkite 10 įprastų akių vaizdų. Šiuo atveju pasirinkti vaizdai buvo 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.

Įdėkite šiuos skaičius į matricą ir priskirkite juos kintamajam, kuris bus iškviestas įkeliant vaizdus.

4. Pakartokite 3 veiksmą tinklainės vaizdams, kuriems diagnozuota diabetinė retinopatija. Šiuo atveju pasirinkti vaizdai buvo 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.

8 veiksmas: sukurkite 2 kintamuosius (normalius ir diagnozuotus) ir nustatykite juos lygius į 0

Sukurkite 2 kintamuosius (normalius ir diagnozuotus) ir nustatykite, kad kiekvienas būtų lygus 0
Sukurkite 2 kintamuosius (normalius ir diagnozuotus) ir nustatykite, kad kiekvienas būtų lygus 0

Sukurkite šiuos kintamuosius prieš ciklą for, kad inicijuotumėte ciklo numerius.

9 veiksmas: sukurkite ciklą, skirtą automatiškai įkelti įprastus vaizdus

Sukurkite ciklą, skirtą automatiškai įkelti įprastus vaizdus
Sukurkite ciklą, skirtą automatiškai įkelti įprastus vaizdus

1. Sukurkite kilpą

2. Nustatykite skaičiavimo kintamąjį (šiuo atveju i) 1-10 reikšmių matricą. Šis skaičiavimo kintamasis bus naudojamas skambinti kiekvienam vaizdui atskirai

3. Paimkite vaizdų matricos elementą i, kad išgautumėte ir konvertuotumėte vaizdo pavadinimą iš eilutės į skaičių, naudodami funkciją num2str.

Naudodami funkciją numel, raskite vaizdo pavadinime esančių skaitmenų skaičių. Priskirkite šią vertę kintamajam, skaitmenų_normalus. Šis skaičius turėtų būti 1 vieno skaitmens numeriams, 2 - dviženkliai skaičiai ir 3 - triženkliai skaičiai. Ši informacija bus naudojama automatiškai iškviesti vaizdus.

10 veiksmas: sukurkite ciklą, skirtą automatiškai įkelti įprastus vaizdus (ne)

Sukurkite ciklą, skirtą automatiškai įkelti įprastus vaizdus (ne)
Sukurkite ciklą, skirtą automatiškai įkelti įprastus vaizdus (ne)

3. Sukurkite teiginį if, kuriame būtų visos trys ankstesnių veiksmų galimybės. Jei vaizdo pavadinime yra 1 skaitmuo, vaizdas bus vadinamas „im000“, jei jis sudarytas iš 2 skaitmenų, vaizdas bus vadinamas „im00“, o jei jis turi 3, vaizdas bus vadinamas „im0“.

4. Po kiekvienu if teiginiu priskirkite kintamąjį imread „im“po atitinkamu, jei teiginiu su atitinkamu nulių skaičiumi (kaip aprašyta aukščiau), po kurio eina i.

11 veiksmas: apkarpykite vaizdo kraštus

Apkirpkite vaizdo kraštus
Apkirpkite vaizdo kraštus

Paimkite originalų vaizdą ir pritaikykite „imcrop“filtrą, kad pašalintumėte juodus kraštus ir priskirtumėte kintamąjį „I_crop“. Apkarpymo stačiakampis nurodomas naudojant matricą [95, 95, 500, 410].

12 žingsnis: sukurkite pilkos skalės vaizdą

Sukurkite pilkos skalės vaizdą
Sukurkite pilkos skalės vaizdą

Paimkite apkarpytą vaizdą ir pritaikykite rbg2gray filtrą, kad vaizdas būtų pilkos spalvos. Priskirkite šį vaizdą kintamajam I2.

13 žingsnis: sukurkite kontrastingą vaizdą

Sukurkite kontrastingą vaizdą
Sukurkite kontrastingą vaizdą

Paimkite vaizdą I2 ir naudokite „Imadjust“, kad pakeistumėte intensyvumo vertes.

Paimkite vertes, kurios patenka į diapazoną [0,2, 0,7], ir pakeiskite jas iki [0, 1]. Gama nustatyta į 0,8, kad vaizdas būtų ryškesnis. Priskirkite naują vaizdą I_adjusted.

14 žingsnis: patobulinkite kontrasto vaizdą

Pagerinkite kontrasto vaizdą
Pagerinkite kontrasto vaizdą

Paimkite I_adjusted vaizdą ir naudokite adapthisteq funkciją, kad padidintumėte kontrastą.

„Adapthisteq“sintaksei reikalingas vaizdo pavadinimas, I_adjusted, „numTiles“, numTiles dydis, „nBins“ir dėžių skaičius. „NumTiles“dydis nustatytas į [8 8], padalijant vaizdą į 8x8 plyteles, o dėžių skaičius - 28. Priskirkite vaizdą „I_constrast“.

15 veiksmas: sukurkite vidutinį filtrą

Sukurkite vidutinį filtrą
Sukurkite vidutinį filtrą

Sukurkite kintamąjį pavadinimu „meanfilt“naudodami funkciją „fspecial“. Įveskite „vidutinę funkciją“, kad sukurtumėte vidurkio filtrą ir įterptumėte stumdomo lango dydžio [90 90].

16 veiksmas: derinkite vidurkio filtrą su kontrastingu vaizdu

Sujunkite vidurkio filtrą su kontrastingu vaizdu
Sujunkite vidurkio filtrą su kontrastingu vaizdu

Sukurkite naują kintamąjį, pavadintą mask_mean, ir naudokite funkciją „imfilter“, kad nufotografuotumėte „I_contrast“vaizdą ir pritaikytumėte anksčiau sukurtą vidutinį filtrą.

17 žingsnis: padarykite naują vidutinę kaukę, atimdami taškus

Padarykite naują vidutinę kaukę, atimdami taškus
Padarykite naują vidutinę kaukę, atimdami taškus

Sukurkite kintamąjį, pavadintą mask_mean2, ir naudokite funkciją imsubtract, kad atimtumėte kiekvieno „I_contrast“pikselio vertę iš atitinkamo pikselio „mask_mean“.

18 veiksmas: sukurkite dvejetainį filtruotą vaizdą

Sukurkite dvejetainį filtruotą vaizdą
Sukurkite dvejetainį filtruotą vaizdą

Paverskite pilkos spalvos vaizdus nespalvotais naudodami imbinarize. Įvesties kaukė_mean2, „prisitaikanti“, „ForegroundPolarity“, „dark“, „Sensitivity“, 0.6. Priskirkite šį naują vaizdą mask_binarize.

19 veiksmas: pašalinkite filtruotuose vaizduose esančias mažesnes dėmeles

Pašalinkite filtruotuose vaizduose esančias mažesnes dėmeles
Pašalinkite filtruotuose vaizduose esančias mažesnes dėmeles

Pašalinkite objektus, kurių ryšys yra mažesnis nei 100 pikselių, naudodami „mask_binarize“funkciją „bwareaopen“ir nustatykite slenkstinę reikšmę 100. Priskirkite kintamąjį kaip bw.

20 veiksmas: sukurkite disko struktūrinį elementą

Sukurkite disko struktūrinį elementą
Sukurkite disko struktūrinį elementą

Sukurkite disko struktūrinį elementą (kurio spindulys yra 2), naudodami „Strel“funkciją. Priskirkite jį se.

21 veiksmas: atlikite morfologines uždarymo operacijas

Atlikite morfologines uždarymo operacijas
Atlikite morfologines uždarymo operacijas

Paimkite bw ir pritaikykite uždėjimo funkciją konstrukciniam elementui, kad atliktumėte objekto morfologinę uždarymo operaciją.

22 veiksmas: suraskite mažiausiai 8 sujungtus objektus

Raskite mažiausiai sujungtų objektų 8
Raskite mažiausiai sujungtų objektų 8

Paimkite „bw“ir naudokite „bwconncomp“, kad surastumėte paveikslėlyje objektus, kurių ryšys ne mažesnis kaip 8. Priskirkite skaičiaus išvestį cc_1.

23 veiksmas: raskite maksimalų prijungtų taškų skaičių

Raskite didžiausią prijungtų taškų skaičių
Raskite didžiausią prijungtų taškų skaičių
Raskite maksimalų prijungtų taškų skaičių
Raskite maksimalų prijungtų taškų skaičių

Naudokite „cellfun“funkciją, kad atliktumėte funkciją „numel“kiekviename CC langelyje. Taip randamas elementų skaičius ląstelėje „PixelIdxList“. Priskirkite reikšmę „numPixels“.

Raskite maksimalias reikšmes numPIxels. Didžiausią maksimumą priskirkite „didžiausiai“, o didžiausios vertės indeksą - „idx“.

24 veiksmas: nustatykite maksimalias pikselių reikšmes į 0 ir raskite taškų, kurių ryšys> = 26

Pašalinkite kraujo indus iš vaizdo
Pašalinkite kraujo indus iš vaizdo

= 26 „Pixel Connectivity“"src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp

Figūrinis ekranas
Figūrinis ekranas

= 26 „Pixel Connectivity“"src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp

Pašalinkite indus ir suskaičiuokite kraujo krešulius
Pašalinkite indus ir suskaičiuokite kraujo krešulius

= 26 pikselių ryšys "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">

Diagnozuokite tinklainės vaizdą pagal nustatytų kraujo krešulių skaičių
Diagnozuokite tinklainės vaizdą pagal nustatytų kraujo krešulių skaičių

= 26 pikselių ryšys "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">

Nustatykite pikselius su didžiausiomis reikšmėmis paveikslėlyje „bw“į 0, kad taškai būtų juodi.

Naudodami „bwconncomp“raskite paveikslėlyje objektus, kurių ryšys ne mažesnis kaip 26 pikseliai. Priskirti kintamajam cc_1.

25 žingsnis: pašalinkite kraujo indus iš vaizdo

Naudodami „bwpropfilt“funkciją, pašalinkite kraujagyslėse esančias kraujagysles, kurių diapazonas yra [0, 0,9].

[0,9, 1] neįtraukiamas, nes artimos 1 vertės rodo eilutę. Priskirti „RemoveVessels“.

26 žingsnis: paveikslėlio rodymas

Rodyti kiekvieną filtruotą vaizdą daliniame sklype. Imshow. su „kraštinėmis“ir „griežtomis“įvestimis, parodo kiekvieną vaizdą papildomo sklypo struktūroje. Prie kiekvieno vaizdo pridėkite pavadinimą, kad atskirtumėte naudojamą filtrą.

27 veiksmas: pašalinkite indus ir suskaičiuokite kraujo dėmeles

1. Paimkite „RemoveVessels“ir pritaikykite „Centroid“funkciją „regionprops“, kad nustatytumėte paveikslėlyje esančių objektų centrus. Šie objektai turėtų atitikti paveiksle esančius kraujo krešulius.

2. Apskaičiuokite nustatytų kraujo krešulių skaičių, paimdami centroidinės matricos ilgį.

28 veiksmas: diagnozuokite tinklainės vaizdą pagal nustatytų kraujo krešulių skaičių

Naudokite, jei teiginiai diagnozuoja vaizdą pagal nustatytų kraujo krešulių skaičių.

Jei nustatytas centroidų skaičius buvo mažesnis arba lygus 5, vaizdas buvo nustatytas kaip normalus.

Jei centroidų skaičius buvo didesnis nei 5, vaizde buvo diagnozuota diabetinė retinopatija.

Rezultatas atspausdinamas komandų lange naudojant fprintf.

29 žingsnis: jei yra daugiau nei 5 dėmės …

Jei yra daugiau nei 5 dėmės…
Jei yra daugiau nei 5 dėmės…

Pakartokite aukščiau pateiktas instrukcijas diagnozuotiems vaizdams kaip kitą teiginį. Ši dalis bus vykdoma, jei dėmių skaičius yra didesnis nei 5.

Baikite teiginį if.

30 veiksmas: pakartokite įprastų vaizdų, kurių vaizdo skaitmenys yra 2 ir 3, filtravimo procesą

Pakartokite filtravimo procesą normaliems vaizdams, kurių vaizdo skaitmenys yra 2 ir 3
Pakartokite filtravimo procesą normaliems vaizdams, kurių vaizdo skaitmenys yra 2 ir 3
Pakartokite filtravimo procesą normaliems vaizdams, kurių vaizdo skaitmenys yra 2 ir 3
Pakartokite filtravimo procesą normaliems vaizdams, kurių vaizdo skaitmenys yra 2 ir 3

Pakartokite procesą likusiai originalo daliai, jei teiginiai, kai numel (skaitmenų skaičius vaizdo numeryje) yra lygūs 2 ir 3. Tai užbaigia įprastų vaizdų ciklą.

Užbaikite ciklą for.

31 veiksmas: pakartokite visą diagnozuotų vaizdų procesą

Pakartokite visą diagnozuotų vaizdų procesą
Pakartokite visą diagnozuotų vaizdų procesą

Pakartokite visą procesą naudodami diagnozuotus vaizdus, išvardytus matricoje „skaičiai_ekstrakto_diagnozuoti“.

Būtinai peržiūrėkite kiekvieną figūrą (i) ir pakeiskite ją į (i+10), kad diagnozuoti skaičiai būtų rodomi kaip 11–20 vaizdai.

32 žingsnis: Statistinė analizė

Statistinė analizė
Statistinė analizė

1. „Actual_Diagnosis_Matrix“naudojama rezultatams palyginti su oficialia diagnoze, rasta txt faile. Pirmieji 10 nulių rodo, kad pirmieji 10 vaizdų turi būti normalūs. Paskutiniai 10 rodo, kad paskutiniai 10 vaizdų turėtų būti klasifikuojami kaip diabetinė retinopatija.

2. Dvigubas lygybės ženklas, naudojamas kuriant „number_correct“, sukuria loginį masyvą, lyginant atitinkamų „Actual_Diagnosis_Matrix“elementų vertę su „Diagnosis_Matrix“, sukurtais iš ciklo.

Prie kiekvieno diagnozę atitinkančio elemento bus pridėtas 1, o tai reiškia, kad kodas teisingai diagnozavo tą vaizdą. Jei jis neteisingas, prie matricos pridės 0.

Tada, paėmus sumą, visi sumuojami. Kitaip tariant, ji nustato teisingai diagnozuotų vaizdų sumą.

3. „Final_percentage_correct“- tai galutinė procentinė dalis, pagal kurią kodas tiksliai diagnozavo diabetinę retinopatiją. Teisingai diagnozuotų vaizdų skaičius padalijamas iš 20 (bendras nuotraukų skaičius) ir padauginamas iš 100, kad būtų nustatyta sėkmingų diagnozių procentinė dalis.

33 žingsnis: pasitikėjimo intervalo radimas

Pasitikėjimo intervalo radimas
Pasitikėjimo intervalo radimas

1. Įsitikinkite, kad atsisiuntėte „ModWald.m“, kad galėtumėte jį pavadinti kaip funkciją. Jei nebūtų šios funkcijos, pasitikėjimo intervalą turėtumėte apskaičiuoti patys, naudodami modifikuotą Waldo metodą.

2. Funkcija „ModWald“turi 2 įėjimus, kur pirmasis yra teisingai identifikuotų vaizdų skaičius, o antrasis - bendras vaizdų kiekis.

3. ModWald funkcija išves apatines ir viršutines proporcijų patikimumo intervalo ribas, kad būtų atrinkti duomenys. Kitaip tariant, jūs pateiksite procentų intervalą, kuriame bus tikrasis kodo tikslumo procentas.

4. Naudokite fprintf žemiau, kad komandų lange išvestumėte statistiką ir pasitikėjimo intervalą.

> fprintf ('%. 0f proc. tinklainės vaizdų buvo teisingai diagnozuoti pagal oficialią diagnozę. / n / n', Final_percentage_crerect)

> fprintf ('Tikroji procentinė dalis, pagal kurią mūsų kodas teisingai diagnozuos diabetinę retinopatiją, / n patenka į [%.3f, %.3f] diapazoną, remiantis 20 atrinktų vaizdų / n', apatinis_viršis, viršutinė riba)

Rekomenduojamas: