Satura rādītājs:
- 1. darbība. Priekšnosacījumi
- 2. darbība. Priekšnosacījumi (nav)
- 3. darbība. Priekšnosacījumi (nav)
- 4. darbība. Priekšnosacījumi (nav)
- 5. darbība: iztīriet Matlab, lai sagatavotos koda darbībai
- 6. darbība. Izvēlieties 10 parastus acu attēlus un 10 attēlus ar diabētiskās retinopātijas simptomiem
- 7. darbība. Izvēlieties 10 parastus acu attēlus un 10 attēlus ar diabētiskās retinopātijas simptomiem (nav)
- 8. darbība: izveidojiet 2 mainīgos (normālos un diagnosticētos) un iestatiet tos vienādus uz 0
- 9. darbība. Izveidojiet cilpu, lai automātiski augšupielādētu parastos attēlus
- 10. darbība. Izveidojiet cilpu, lai automātiski augšupielādētu parastos attēlus (nevar)
- 11. solis: apgrieziet attēla robežas
- 12. darbība: izveidojiet pelēkās skalas attēlu
- 13. darbība: izveidojiet kontrastējošu attēlu
- 14. darbība: uzlabojiet kontrasta attēlu
- 15. darbība: izveidojiet vidējo filtru
- 16. darbība: apvienojiet vidējo filtru ar kontrastējošo attēlu
- 17. solis: izveidojiet jaunu vidējo masku, atņemot pikseļus
- 18. darbība: izveidojiet bināru filtrētu attēlu
- 19. darbība: noņemiet filtrētajos attēlos atrastos mazākos lāses
- 20. darbība: izveidojiet diska strukturēšanas elementu
- 21. darbība: veiciet morfoloģiskās aizvēršanas darbības
- 22. darbība. Atrodiet vismaz 8 savienojamos objektus
- 23. darbība. Atrodiet maksimālo pievienoto pikseļu skaitu
- 24. darbība: iestatiet maksimālās pikseļu vērtības uz 0 un atrodiet pikseļus ar> = 26 pikseļu savienojamību
- 25. darbība: noņemiet asinsvadus attēlā
- 26. solis: Attēlu parādīšana
- 27. darbība: noņemiet traukus un saskaitiet asins lāses
- 28. darbība: diagnosticējiet tīklenes attēlu, pamatojoties uz identificēto asins recekļu skaitu
- 29. solis: ja ir vairāk nekā 5 lāses…
- 30. darbība: atkārtojiet filtrēšanas procesu parastajiem attēliem ar attēla ciparu vērtībām 2 un 3
- 31. darbība. Atkārtojiet visu procesu diagnosticētajiem attēliem
- 32. darbība. Statistiskā analīze
- 33. darbība: pārliecības intervāla atrašana
Video: Automatizēta diabētiskās retinopātijas diagnostika, izmantojot MATLAB: 33 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
(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
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)
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)
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)
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
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
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)
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 š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
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)
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
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
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
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
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 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
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 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
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 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 (ar rādiusu 2), izmantojot funkciju strel. Piešķiriet to se.
21. darbība: veiciet morfoloģiskās aizvēršanas darbības
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
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
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
= 26 pikseļu savienojamība "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 pikseļu savienojamība "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 pikseļu savienojamība "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
= 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…
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 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, 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
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
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:
Led kontrole, izmantojot lietotni Blynk, izmantojot Nodemcu, izmantojot internetu: 5 soļi
Led kontrole, izmantojot lietotni Blynk, izmantojot Nodemcu, izmantojot internetu: Sveiki, visi šodien, mēs jums parādīsim, kā jūs varat kontrolēt LED, izmantojot viedtālruni internetā
Automatizēta EKG: pastiprināšanas un filtrēšanas simulācijas, izmantojot LTspice: 5 soļi
Automatizēta EKG: pastiprināšanas un filtrēšanas simulācijas, izmantojot LTspice: Šis ir pēdējās ierīces attēls, kuru jūs veidosit, un ļoti padziļināta diskusija par katru daļu. Apraksta arī aprēķinus katram posmam. Attēlā parādīta šīs ierīces blokshēmaMetodes un materiāli: šī pr
Automatizēta Dino spēle, izmantojot Arduino: 4 soļi
Automatizēta Dino spēle, izmantojot Arduino: Tāpēc, čau, laipni lūdzam atgriezties pie jaunā raksta šajā rakstā, mēs izveidosim automatizētu Dino spēli, izmantojot Arduino. Šo automatizēto Dino spēli ir ļoti viegli izveidot. Dažos soļos jūs varat izveidot šo dino spēli mājās, kad es skatījos Tik-Tok pirms dažām dienām es eju
Atskaņojiet dziesmas, izmantojot Arduino, izmantojot ADC līdz PWM, izmantojot Flyback transformatoru vai skaļruni: 4 soļi
Atskaņot dziesmas ar Arduino, izmantojot ADC, lai PWM Flyback transformatorā vai skaļrunī: Sveiki, puiši, šī ir mana cita pamācības otrā daļa (tas bija daudz grūti). Būtībā šajā projektā esmu izmantojis ADC un taimeri savā Arduino, lai pārvērst audio signālu par PWM signālu. Tas ir daudz vieglāk nekā mana iepriekšējā instrukcija
Automatizēta vilciena atgriezeniskā cilpa, izmantojot Arduino: 10 soļi (ar attēliem)
Automatizēta vilcienu atgriezeniskā cilpa, izmantojot Arduino: Atgriezenisko cilpu izveide var palīdzēt vilcienu modeļu maiņās mainīt vilcienu virzienu, ko nevar izdarīt ar pagrieziena diskiem. Tādā veidā jūs varat izveidot viena sliežu izkārtojumus ar reversu cilpu katrā galā, lai vilcieni darbotos bez pārtraukuma vai pārtraukuma