Satura rādītājs:

Automatizēta diabētiskās retinopātijas diagnostika, izmantojot MATLAB: 33 soļi
Automatizēta diabētiskās retinopātijas diagnostika, izmantojot MATLAB: 33 soļi

Video: Automatizēta diabētiskās retinopātijas diagnostika, izmantojot MATLAB: 33 soļi

Video: Automatizēta diabētiskās retinopātijas diagnostika, izmantojot MATLAB: 33 soļi
Video: Болезненная диабетическая нейропатия 2024, Novembris
Anonim
Automatizēta diabētiskās retinopātijas diagnostika, izmantojot MATLAB
Automatizēta diabētiskās retinopātijas diagnostika, izmantojot MATLAB
Automatizēta diabētiskās retinopātijas diagnostika, izmantojot MATLAB
Automatizēta diabētiskās retinopātijas diagnostika, izmantojot MATLAB

(Skatiet koda izklāstu iepriekš)

Diabētiskā retinopātija ir ar diabētu saistīta acu slimība, ko izraisa augsts cukura līmenis asinīs. Augsts cukura līmenis asinīs izraisa tīklenes asinsvadu pietūkumu, kas izraisa asinsvadu paplašināšanos un pat asinsvadu noplūdi, kas izraisa tumšus plankumus tīklenes attēlos. Izmantojot šo kodu, mūsu mērķis ir izmantot asinsvadu noplūdes plankumu izskatu kā diabēta retinopātijas fona rādītāju, lai gan reālajā pasaulē būtu vajadzīgas papildu diagnostikas metodes. Šī koda mērķis ir automatizēt attēlu apstrādi un tīklenes attēlu diagnostiku, lai identificētu diabētiskās retinopātijas pazīmes, kas parādītas caur tumšiem plankumiem tīklenes attēlos.

10 normāli tīklenes attēli un 10 diagnosticēti tīklenes attēli tika apstrādāti, izmantojot kodu, kas vispirms nolasa un filtrē attēlus un pēc tam kvantitatīvi nosaka tumšos plankumus, lai noteiktu, vai ir diabētiskās retinopātijas simptomi, pamatojoties uz noteiktu slieksni. Rezultāti tiek izdrukāti komandu logā skatītāja interpretācijai.

1. darbība. Priekšnosacījumi

Priekšnosacījumi
Priekšnosacījumi

1. Pārliecinieties, vai datorā ir lejupielādēta programma MATLAB.

2. Lejupielādējiet txt failu, kas atrodams saitē. (Nospiediet “ctrl+s”, lai saglabātu tajā pašā direktorijā kā MATLAB kods)

2. darbība. Priekšnosacījumi (nav)

Priekšnosacījumi (nav)
Priekšnosacījumi (nav)
Priekšnosacījumi (nav)
Priekšnosacījumi (nav)

4. Atveriet MATLAB un komandu logā ierakstiet “uiimport”.

5. Atlasiet failu officialdiagnoses.txt un importējiet to MATLAB kā šūnu matricu.

6. Pārliecinieties, ka darbvietā redzat “oficiālās diagnozes” kā mainīgo.

3. darbība. Priekšnosacījumi (nav)

Priekšnosacījumi (nav)
Priekšnosacījumi (nav)

7. Lejupielādējiet funkciju ModWald.m, kuru var iegūt no iepriekš minētā koda vai lejupielādēt no Canvas.

(Kodu nodrošina profesors Kings un profesors Choi)

4. darbība. Priekšnosacījumi (nav)

Priekšnosacījumi (nav)
Priekšnosacījumi (nav)

8. Lejupielādējiet 400 neapstrādātus attēlus no STARE projekta datu sadaļas.

5. darbība: iztīriet Matlab, lai sagatavotos koda darbībai

Notīriet Matlab, lai sagatavotos darbības kodam
Notīriet Matlab, lai sagatavotos darbības kodam

Pievienot kodam:

1. aizvērt visu (aizver visus iepriekš atvērtos attēlus)

2. clearvars - izņemot oficiālās diagnozes (Notīra visus mainīgos, izņemot iepriekš importēto oficiālo diagnozes txt failu)

3. cclc (notīra komandu logu)

6. darbība. Izvēlieties 10 parastus acu attēlus un 10 attēlus ar diabētiskās retinopātijas simptomiem

Izvēlieties 10 parastus acu attēlus un 10 attēlus ar diabētiskās retinopātijas simptomiem
Izvēlieties 10 parastus acu attēlus un 10 attēlus ar diabētiskās retinopātijas simptomiem
Izvēlieties 10 parastus acu attēlus un 10 attēlus ar diabētiskās retinopātijas simptomiem
Izvēlieties 10 parastus acu attēlus un 10 attēlus ar diabētiskās retinopātijas simptomiem

1. Paņemiet diagnozes teksta failu un izvelciet attēlu nosaukumus. Šie vārdi ir iekļauti teksta faila pirmajā slejā, lai tos iegūtu, ierakstiet “officialdiagnoses (:, 1)”. Attēlu nosaukumu matrica tika piešķirta mainīgajam “all_image_numbers”

2. Pārveidojiet mainīgo all_image_numbers no šūnu masīva par matricas masīvu, izmantojot funkciju cell2mat

7. darbība. Izvēlieties 10 parastus acu attēlus un 10 attēlus ar diabētiskās retinopātijas simptomiem (nav)

Izvēlieties 10 parastus acu attēlus un 10 attēlus ar diabētiskās retinopātijas simptomiem (nevar)
Izvēlieties 10 parastus acu attēlus un 10 attēlus ar diabētiskās retinopātijas simptomiem (nevar)
Izvēlieties 10 parastus acu attēlus un 10 attēlus ar diabētiskās retinopātijas simptomiem (nevar)
Izvēlieties 10 parastus acu attēlus un 10 attēlus ar diabētiskās retinopātijas simptomiem (nevar)

3. Lai palaistu kodu, atlasiet 10 parastus acu attēlus. Šajā gadījumā atlasītie attēli bija 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.

Ievietojiet šos skaitļus matricā un piešķiriet tiem mainīgo, kas tiks izsaukts, ielādējot attēlus.

4. Atkārtojiet 3. darbību tīklenes attēliem, kuriem diagnosticēta diabētiskā retinopātija. Šajā gadījumā atlasītie attēli bija 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.

8. darbība: izveidojiet 2 mainīgos (normālos un diagnosticētos) un iestatiet tos vienādus uz 0

Izveidojiet 2 mainīgos (normālos un diagnosticētos) un iestatiet tos vienādus uz 0
Izveidojiet 2 mainīgos (normālos un diagnosticētos) un iestatiet tos vienādus uz 0

Izveidojiet šos mainīgos pirms cilpas for, lai inicializētu cilpas numurus.

9. darbība. Izveidojiet cilpu, lai automātiski augšupielādētu parastos attēlus

Izveidojiet cilpu, lai automātiski augšupielādētu parastos attēlus
Izveidojiet cilpu, lai automātiski augšupielādētu parastos attēlus

1. Izveidojiet for cilpu

2. Iestatiet skaitīšanas mainīgo (šajā gadījumā i) uz 1–10 vērtību matricu. Šis skaitīšanas mainīgais tiks izmantots, lai izsauktu katru attēlu atsevišķi

3. Paņemiet attēlu matricas i elementu, lai, izmantojot funkciju num2str, iegūtu un konvertētu attēla nosaukumu no virknes uz skaitli.

Atrodiet attēla nosaukumā esošo ciparu skaitu, izmantojot funkciju numel. Piešķiriet šo vērtību mainīgajam, cipari_normāls. Šim skaitlim vajadzētu būt 1 viencipara skaitļiem, 2 divciparu skaitļiem un 3 trīsciparu skaitļiem. Šī informācija tiks izmantota, lai automātiski izsauktu attēlus.

10. darbība. Izveidojiet cilpu, lai automātiski augšupielādētu parastos attēlus (nevar)

Izveidojiet cilpu, lai automātiski augšupielādētu normālus attēlus (nevar)
Izveidojiet cilpu, lai automātiski augšupielādētu normālus attēlus (nevar)

3. Izveidojiet paziņojumu if, kurā ir visas trīs iepriekšējo darbību iespējas. Ja attēla nosaukumam ir 1 cipars, attēls tiks saukts par “im000”, ja tam ir 2 cipari, attēls tiks saukts par “im00”, un, ja tam ir 3, attēls tiks saukts par “im0”.

4. Zem katra if paziņojuma piešķiriet mainīgajam vērtību imread “im” zem atbilstošā, if paziņojuma ar atbilstošu nulles skaitu (kā aprakstīts iepriekš), kam seko i.

11. solis: apgrieziet attēla robežas

Apgrieziet attēla robežas
Apgrieziet attēla robežas

Uzņemiet sākotnējo attēlu un izmantojiet imcrop filtru, lai novērstu melnās robežas un piešķirtu mainīgajam I_crop. Apgriešanas taisnstūris ir norādīts, izmantojot matricu [95, 95, 500, 410].

12. darbība: izveidojiet pelēkās skalas attēlu

Izveidojiet pelēkās skalas attēlu
Izveidojiet pelēkās skalas attēlu

Uzņemiet apgriezto attēlu un izmantojiet rbg2gray filtru, lai mainītu attēlu uz pelēktoņu. Piešķiriet šo attēlu mainīgajam I2.

13. darbība: izveidojiet kontrastējošu attēlu

Izveidojiet kontrastētu attēlu
Izveidojiet kontrastētu attēlu

Uzņemiet attēlu I2 un izmantojiet opciju Imadjust, lai mainītu intensitātes vērtības.

Ņemiet vērtības, kas ietilpst diapazonā [0,2, 0,7], un mainiet to līdz [0, 1]. Lai padarītu attēlu gaišāku, gamma ir iestatīta uz 0,8. Piešķiriet jauno attēlu I_adjusted.

14. darbība: uzlabojiet kontrasta attēlu

Uzlabojiet kontrasta attēlu
Uzlabojiet kontrasta attēlu

Uzņemiet I_adjusted attēlu un izmantojiet adapthisteq funkciju, lai uzlabotu kontrastu.

Adapthisteq sintaksei nepieciešams attēla nosaukums, I_adjusted, ‘numTiles’, numTiles izmērs, ‘nBins’ un urnu skaits. Numuru skaits ir iestatīts uz [8 8], sadalot attēlu 8x8 flīzēs, un tvertņu skaits ir iestatīts uz 28. Piešķiriet attēlam I_constrast.

15. darbība: izveidojiet vidējo filtru

Izveidojiet vidējo filtru
Izveidojiet vidējo filtru

Izveidojiet mainīgo ar nosaukumu "meanfilt", izmantojot funkciju fspecial. Ievadiet “vidējo funkciju”, lai izveidotu vidējo filtru, un ievietojiet [90 90] bīdāmā loga izmēram.

16. darbība: apvienojiet vidējo filtru ar kontrastējošo attēlu

Apvienojiet vidējās vērtības filtru ar kontrastējošu attēlu
Apvienojiet vidējās vērtības filtru ar kontrastējošu attēlu

Izveidojiet jaunu mainīgo ar nosaukumu mask_mean un izmantojiet funkciju imfilter, lai uzņemtu I_contrast attēlu un lietotu iepriekš izveidoto vidējo filtru.

17. solis: izveidojiet jaunu vidējo masku, atņemot pikseļus

Izveidojiet jaunu vidējo masku, atņemot pikseļus
Izveidojiet jaunu vidējo masku, atņemot pikseļus

Izveidojiet mainīgo ar nosaukumu mask_mean2 un izmantojiet funkciju imsubtract, lai atņemtu katra I_contrast pikseļa vērtību no atbilstošā pikseļa mask_mean.

18. darbība: izveidojiet bināru filtrētu attēlu

Izveidojiet bināru filtrētu attēlu
Izveidojiet bināru filtrētu attēlu

Pārveidojiet pelēktoņu attēlus melnbaltos, izmantojot imbinarize. Ievades maska_mean2, “adaptīvs”, “Priekšplāna polaritāte”, “tumšs”, “Jutīgums”, 0.6. Piešķiriet šo jauno attēlu mask_binarize.

19. darbība: noņemiet filtrētajos attēlos atrastos mazākos lāses

Noņemiet filtrētajos attēlos atrastos mazākos lāses
Noņemiet filtrētajos attēlos atrastos mazākos lāses

Noņemiet objektus, kuru savienojamība ir mazāka par 100 pikseļiem, izmantojot maskas_binarize funkciju bwareaopen un iestatiet sliekšņa vērtību uz 100. Piešķiriet mainīgo kā bw.

20. darbība: izveidojiet diska strukturēšanas elementu

Izveidojiet diska strukturēšanas elementu
Izveidojiet diska strukturēšanas elementu

Izveidojiet diska strukturēšanas elementu (ar rādiusu 2), izmantojot funkciju strel. Piešķiriet to se.

21. darbība: veiciet morfoloģiskās aizvēršanas darbības

Veiciet morfoloģiskās aizvēršanas operācijas
Veiciet morfoloģiskās aizvēršanas operācijas

Paņemiet bw un pielieciet strukturālajam elementam ieslēgšanas funkciju, lai veiktu objektam morfoloģisku tuvu darbību.

22. darbība. Atrodiet vismaz 8 savienojamos objektus

Atrodiet vismaz 8 savienojamos objektus
Atrodiet vismaz 8 savienojamos objektus

Izmantojiet bw un izmantojiet bwconncomp, lai attēlā atrastu objektus, kuru savienojamība ir vismaz 8. Piešķiriet skaitļa izvadi cc_1.

23. darbība. Atrodiet maksimālo pievienoto pikseļu skaitu

Atrodiet maksimālo pievienoto pikseļu skaitu
Atrodiet maksimālo pievienoto pikseļu skaitu
Atrodiet maksimālo pievienoto pikseļu skaitu
Atrodiet maksimālo pievienoto pikseļu skaitu

Izmantojiet cellfun funkciju, lai veiktu funkciju “numel” katrā CC šūnā. Tādējādi tiek atrasts elementu skaits šūnā PixelIdxList. Piešķiriet vērtību “numPixels”.

Atrodiet maksimālās vērtības numPIxels. Piešķiriet vislielāko maksimumu vērtībai “lielākais” un maksimālās vērtības indeksu “idx”.

24. darbība: iestatiet maksimālās pikseļu vērtības uz 0 un atrodiet pikseļus ar> = 26 pikseļu savienojamību

Noņemiet asinsvadus attēlā
Noņemiet asinsvadus attēlā

= 26 pikseļu savienojamība "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp

Attēlu displejs
Attēlu displejs

= 26 pikseļu savienojamība "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp

Noņemiet traukus un saskaitiet asins lāses
Noņemiet traukus un saskaitiet asins lāses

= 26 pikseļu savienojamība "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">

Diagnosticējiet tīklenes attēlu, pamatojoties uz identificēto asins recekļu skaitu
Diagnosticējiet tīklenes attēlu, pamatojoties uz identificēto asins recekļu skaitu

= 26 pikseļu savienojamība "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">

Iestatiet pikseļus ar lielākajām vērtībām attēlā “bw” uz 0, padarot pikseļus melnus.

Atrodiet objektus ar vismaz 26 pikseļu savienojamību attēlā, izmantojot bwconncomp. Piešķirt mainīgajam cc_1.

25. darbība: noņemiet asinsvadus attēlā

Noņemiet attēlā joprojām esošos asinsvadus, izmantojot funkciju bwpropfilt ar diapazonu [0, 0,9].

[0,9, 1] ir izslēgts, jo vērtības, kas ir tuvu 1, norāda līniju. Piešķirt “RemoveVessels”.

26. solis: Attēlu parādīšana

Parādiet katru filtrēto attēlu apakšplānā. Imshow. ar “apmales” un “stingras” ieejas, parāda katru attēlu apakšplāna struktūrā. Katram attēlam pievienojiet nosaukumu, lai atšķirtu izmantoto filtru.

27. darbība: noņemiet traukus un saskaitiet asins lāses

1. Paņemiet “RemoveVessels” un lietojiet “Centroid” funkciju reģionos, lai identificētu attēlā redzamo objektu centrus. Šiem objektiem jāatbilst attēlā redzamajiem asins recekļiem.

2. Saskaitiet identificēto asins recekļu skaitu, ņemot centrālo matricas garumu.

28. darbība: diagnosticējiet tīklenes attēlu, pamatojoties uz identificēto asins recekļu skaitu

Izmantojiet paziņojumus, lai diagnosticētu attēlu, pamatojoties uz identificēto asins recekļu skaitu.

Ja identificēto centraīdu skaits bija mazāks vai vienāds ar 5, attēls tika identificēts kā normāls.

Ja centraīdu skaits bija lielāks par 5, attēlā tika diagnosticēta diabētiskā retinopātija.

Rezultāts tiek izdrukāts komandu logā, izmantojot fprintf.

29. solis: ja ir vairāk nekā 5 lāses…

Ja ir vairāk nekā 5 lāses…
Ja ir vairāk nekā 5 lāses…

Atkārtojiet iepriekš sniegtos norādījumus par diagnosticētiem attēliem kā citu paziņojumu. Šī daļa tiks palaista, ja plankumu skaits ir lielāks par 5.

Pabeidziet paziņojumu if.

30. darbība: atkārtojiet filtrēšanas procesu parastajiem attēliem ar attēla ciparu vērtībām 2 un 3

Atkārtojiet filtrēšanas procesu parastajiem attēliem, kuru attēla ciparu vērtības ir 2 un 3
Atkārtojiet filtrēšanas procesu parastajiem attēliem, kuru attēla ciparu vērtības ir 2 un 3
Atkārtojiet filtrēšanas procesu parastajiem attēliem, kuru attēla ciparu vērtības ir 2 un 3
Atkārtojiet filtrēšanas procesu parastajiem attēliem, kuru attēla ciparu vērtības ir 2 un 3

Atkārtojiet procesu pārējā oriģināla daļā, ja apgalvojumi, kad numel (ciparu skaits attēla numurā) ir vienādi ar 2 un 3. Tas pabeidz parasto attēlu for ciklu.

Pabeidziet cilpu for.

31. darbība. Atkārtojiet visu procesu diagnosticētajiem attēliem

Atkārtojiet visu procesu diagnosticētajiem attēliem
Atkārtojiet visu procesu diagnosticētajiem attēliem

Atkārtojiet visu procesu, izmantojot diagnosticētos attēlus, kas uzskaitīti matricā “numuri_izvēlētam_diagnozēti”.

Pārlūkojiet katru skaitli (i) un nomainiet to uz skaitli (i+10), lai diagnosticētie skaitļi parādītos kā 11. līdz 20. attēls.

32. darbība. Statistiskā analīze

Statistiskā analīze
Statistiskā analīze

1. “Actual_Diagnosis_Matrix” izmanto, lai salīdzinātu rezultātus ar oficiālo diagnozi, kas atrodama txt failā. Pirmās 10 nulles norāda, ka pirmajiem 10 attēliem jābūt normāliem. Pēdējie 10 attēli norāda, ka pēdējie 10 attēli ir jāklasificē kā diabētiskā retinopātija.

2. Dubultā vienādības zīme, ko izmanto, lai izveidotu “skaitļa_pareizi”, izveido loģisku masīvu, salīdzinot “Actual_Diagnosis_Matrix” atbilstošo elementu vērtību ar “Diagnosis_Matrix”, kas izveidots no for.

Katram elementam, kas atbilst diagnozei, tiks pievienots 1, kas nozīmē, ka kods pareizi diagnosticēja šo attēlu. Ja tas ir nepareizs, matricai tiks pievienots 0.

Tad, ņemot summu, tiek saskaitīti visi. Citiem vārdiem sakot, tā atrod pareizi diagnosticētu attēlu summu.

3. “Final_percentage_correct” ir aprēķinātā procentuālā daļa no tā, cik precīzi kods diagnosticēja diabētisko retinopātiju. Pareizi diagnosticēto attēlu skaits tiek dalīts ar 20 (kopējais attēlu skaits) un reizināts ar 100, lai atrastu veiksmīgu diagnozi procentos.

33. darbība: pārliecības intervāla atrašana

Uzticības intervāla atrašana
Uzticības intervāla atrašana

1. Pārliecinieties, vai esat lejupielādējis ModWald.m, lai to izsauktu kā funkciju. Ja nebūtu šīs funkcijas, jums pašam būtu jāaprēķina ticamības intervāls, izmantojot modificēto Wald metodi.

2. Funkcijai ModWald ir 2 ieejas, kur pirmais ir pareizi identificēto attēlu skaits, bet otrais - kopējais attēlu skaits.

3. Funkcija ModWald izdos proporciju ticamības intervāla apakšējo un augšējo robežu izlases datu precizitātei. Citiem vārdiem sakot, jūs norādīsit procentuālo intervālu, kurā atradīsies patiesā koda precizitātes procentuālā daļa.

4. Izmantojiet fprintf zemāk, lai komandu logā izvadītu statistiku un ticamības intervālu.

> fprintf ('%. 0f procenti tīklenes attēlu tika pareizi diagnosticēti saskaņā ar oficiālo diagnozi. / n / n', Final_percentage_correct)

> fprintf ('Patiesā procentuālā daļa, ar kādu mūsu kods pareizi diagnosticēs diabētisko retinopātiju, / n būs diapazonā no [%.3f, %.3f], pamatojoties uz 20 atlasītajiem attēliem / n', apakšējais_apakšējais, augšējais_paredzētais)

Ieteicams: