Kazalo:
- 1. korak: Predpogoji
- 2. korak: Predpogoji (ne)
- 3. korak: Predpogoji (ne)
- 4. korak: Predpogoji (ne)
- 5. korak: Očistite Matlab, da se pripravite na izvajanje kode
- 6. korak: Izberite 10 slik normalnega očesa in 10 slik s simptomi diabetične retinopatije
- 7. korak: Izberite 10 slik normalnega očesa in 10 slik s simptomi diabetične retinopatije (ne)
- 8. korak: Ustvarite 2 spremenljivki (normalni in diagnosticirani) in ju nastavite enako na 0
- 9. korak: Ustvarite zanko za samodejno nalaganje običajnih slik
- 10. korak: ustvarite zanko za samodejno nalaganje običajnih slik (ne)
- 11. korak: Obrežite robove slike
- 12. korak: Ustvarite sliko v sivi barvi
- Korak: Ustvarite kontradiktorno sliko
- 14. korak: Izboljšajte kontrastno sliko
- Korak 15: Ustvarite povprečni filter
- Korak 16: Združite povprečni filter s kontrastno sliko
- Korak 17: Naredite novo povprečno masko z odštevanjem slikovnih pik
- 18. korak: Ustvarite binarno filtrirano sliko
- Korak 19: Odstranite manjše madeže, najdene na filtriranih slikah
- 20. korak: Ustvarite element za strukturiranje diska
- 21. korak: Izvedite morfološke zaprte operacije
- Korak: Poiščite predmete s povezljivostjo najmanj 8
- 23. korak: Poiščite največje število povezanih slikovnih pik
- Korak 24: Največje vrednosti slikovnih pik nastavite na 0 in poiščite slikovne pike s povezljivostjo> = 26 slikovnih pik
- Korak: Odstranite krvne žile na sliki
- Korak 26: Prikaz slike
- Korak 27: Odstranite žile in preštejte madeže krvi
- Korak 28: Diagnosticirajte sliko mrežnice na podlagi števila ugotovljenih krvnih strdkov
- Korak 29: Če je več kot 5 blobov …
- 30. korak: Ponovite postopek filtriranja za običajne slike z vrednostmi številk slike 2 in 3
- Korak 31: Ponovite celoten postopek za diagnosticirane slike
- 32. korak: Statistična analiza
- 33. korak: Poiščite interval zaupanja
Video: Samodejna diagnoza diabetične retinopatije preko MATLAB -a: 33 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
(Glej oris kode zgoraj)
Diabetična retinopatija je očesna bolezen, povezana s sladkorno boleznijo, ki jo povzroča visoka raven sladkorja v krvi. Visoke ravni sladkorja v krvi povzročajo otekanje krvnih žil v mrežnicah, kar vodi do povečanih krvnih žil in celo puščanja žil, kar vodi do temnih madežev na slikah mrežnice. S to kodo želimo uporabiti pojav puščanja krvnih žil kot indikator ozadja diabetične retinopatije, čeprav bi bile v resničnem svetu potrebne dodatne diagnostične tehnike. Cilj te kode je avtomatizirati obdelavo slik in diagnosticiranje slik mrežnice, da bi odkrili znake diabetične retinopatije, prikazane skozi temne lise na slikah mrežnice.
10 normalnih slik mrežnice in 10 diagnosticiranih slik mrežnice je bilo obdelanih s kodo, ki najprej prebere in filtrira slike, nato pa količinsko opredeli temne lise, da ugotovi, ali so simptomi diabetične retinopatije prisotni, glede na dani prag. Rezultati se nato natisnejo v ukazno okno za interpretacijo gledalca.
1. korak: Predpogoji
1. Prepričajte se, da imate v računalniku naložen program MATLAB.
2. Prenesite datoteko txt, ki jo najdete na povezavi. (Pritisnite »ctrl+s«, da shranite v isti imenik kot koda MATLAB)
2. korak: Predpogoji (ne)
4. Odprite MATLAB in v ukazno okno vnesite uiimport.
5. Izberite datoteko officialdiagnoses.txt in jo uvozite v MATLAB kot matriko celice.
6. Poskrbite, da bo v uradnem prostoru prikazana "uradna diagnoza" kot spremenljivka.
3. korak: Predpogoji (ne)
7. Prenesite funkcijo ModWald.m, ki jo lahko dobite iz zgornje kode ali jo naložite s Canvas.
(Kodo sta zagotovila profesor King in profesor Choi)
4. korak: Predpogoji (ne)
8. Prenesite 400 surovih slik iz razdelka s podatki projekta STARE.
5. korak: Očistite Matlab, da se pripravite na izvajanje kode
Dodaj v kodo:
1. zaprite vse (zapre vse prej odprte slike)
2. jasne jasnice - razen uradnih diagnoz (počisti vse spremenljivke, razen uradno uvožene datoteke txt z diagnozami)
3. cclc (Počisti ukazno okno)
6. korak: Izberite 10 slik normalnega očesa in 10 slik s simptomi diabetične retinopatije
1. Vzemite datoteko z diagnozo in izvlecite imena slik. Ta imena so v prvem stolpcu besedilne datoteke, zato jih izvlecite tako, da vnesete „officialdiagnoses (:, 1)“. Matrika imen slik je bila dodeljena spremenljivki »all_image_numbers«
2. S funkcijo cell2mat pretvorite spremenljivko all_image_numbers iz matrike celic v matrično matriko
7. korak: Izberite 10 slik normalnega očesa in 10 slik s simptomi diabetične retinopatije (ne)
3. Izberite 10 običajnih slik oči, da zaženete kodo. V tem primeru so bile izbrane slike 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.
Te številke postavite v matriko in jih dodelite spremenljivki, ki bo poklicana pri nalaganju slik.
4. Ponovite 3. korak za slike mrežnice, pri katerih je bila diagnosticirana diabetična retinopatija. V tem primeru so bile izbrane slike 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.
8. korak: Ustvarite 2 spremenljivki (normalni in diagnosticirani) in ju nastavite enako na 0
Ustvarite te spremenljivke pred zanko for, da inicializirate številke zanke.
9. korak: Ustvarite zanko za samodejno nalaganje običajnih slik
1. Ustvarite zanko for
2. Številčno spremenljivko (v tem primeru i) nastavite na matriko vrednosti 1-10. Ta številska spremenljivka bo uporabljena za klicanje vsake slike posebej
3. Vzemite element i v matriki slik, da izvlečete in pretvorite ime slike iz niza v številko s funkcijo num2str.
S številčno funkcijo poiščite število številk v imenu slike. To vrednost dodelite spremenljivki, digits_normal. Ta številka mora biti 1 za enomestne številke, 2 za dvomestne številke in 3 za trimestne številke. Ti podatki bodo uporabljeni za samodejno klicanje slik.
10. korak: ustvarite zanko za samodejno nalaganje običajnih slik (ne)
3. Ustvarite stavek if, ki vsebuje vse tri možnosti iz prejšnjih korakov. Če je ime slike enomestno, se bo slika imenovala »im000«, če ima 2 števki, se bo slika imenovala »im00«, če pa ima 3, se bo slika imenovala »im0«.
4. Pod vsakim stavkom if dodelite spremenljivko, da imread "im" pod ustreznim, if stavkom z ustreznim številom ničel (kot je opisano zgoraj), čemur sledi i.
11. korak: Obrežite robove slike
Posnemite prvotno sliko in uporabite imcrop filter, da odstranite črne obrobe in jo dodelite spremenljivki I_crop. Pravokotnik za obrezovanje je določen z matriko [95, 95, 500, 410].
12. korak: Ustvarite sliko v sivi barvi
Vzemite obrezano sliko in uporabite filter rbg2gray, da spremenite sliko v sivine. To sliko dodelite spremenljivki I2.
Korak: Ustvarite kontradiktorno sliko
Posnemite sliko I2 in s prilagoditvijo prilagodite vrednosti intenzivnosti.
Vzemite vrednosti, ki spadajo v območje [0,2, 0,7] in jih spremenite v vrednost [0, 1]. Gama je nastavljena na 0,8, da bo slika svetlejša. Novo sliko dodelite I_adjusted.
14. korak: Izboljšajte kontrastno sliko
Posnemite sliko I_adjusted in uporabite funkcijo adapthisteq za povečanje kontrasta.
Sintaksa Adapthisteq zahteva ime slike, I_adjusted, 'numTiles', velikost numTiles, 'nBins' in število posod. Velikost numTiles je nastavljena na [8 8], pri čemer je slika razdeljena na ploščice 8x8, število posod pa na 28. Dodelite sliko I_constrast.
Korak 15: Ustvarite povprečni filter
Ustvarite spremenljivko z imenom 'meanfilt' s funkcijo fspecial. Vnesite „povprečno funkcijo“, da ustvarite filter za povprečenje, in vstavite [90 90] za velikost drsnega okna.
Korak 16: Združite povprečni filter s kontrastno sliko
Ustvarite novo spremenljivko z imenom mask_mean in s funkcijo imfilter vzemite sliko I_contrast in uporabite filter, ki ste ga ustvarili prej.
Korak 17: Naredite novo povprečno masko z odštevanjem slikovnih pik
Ustvarite spremenljivko z imenom mask_mean2 in s funkcijo imsubtract odštejte vrednost vsake slikovne pike v I_contrast od ustrezne slikovne pike v mask_mean.
18. korak: Ustvarite binarno filtrirano sliko
Slike s sivimi odtenki spremenite v črno -bele z uporabo imbinarize. Vnos mask_mean2, 'adaptive', 'ForegroundPolarity', 'dark', 'Sensitivity', 0,6. To novo sliko dodelite mask_binarize.
Korak 19: Odstranite manjše madeže, najdene na filtriranih slikah
Odstranite predmete s povezljivostjo manj kot 100 slikovnih pik s funkcijo bwareaopen na mask_binarize in vrednost praga nastavite na 100. Spremenljivko dodelite kot bw.
20. korak: Ustvarite element za strukturiranje diska
Ustvarite element za strukturiranje diska (s polmerom 2) s funkcijo strel. Dodelite ga se.
21. korak: Izvedite morfološke zaprte operacije
Vzemite bw in uporabite funkcijo imclose na strukturnem elementu, da izvedete morfološko operacijo zapiranja predmeta.
Korak: Poiščite predmete s povezljivostjo najmanj 8
Vzemite bw in z bwconncomp poiščite predmete s povezljivostjo najmanj 8 na sliki. Izhodu številke dodelite cc_1.
23. korak: Poiščite največje število povezanih slikovnih pik
Uporabite funkcijo cellfun za izvajanje funkcije »numel« na vsaki celici v CC. To ugotovi število elementov v celici PixelIdxList. Dodelite vrednost »numPixels«.
Najdi največje vrednosti v numPIxels. Največji maksimum dodelite »največjemu«, indeks največje vrednosti pa »idx«.
Korak 24: Največje vrednosti slikovnih pik nastavite na 0 in poiščite slikovne pike s povezljivostjo> = 26 slikovnih pik
= 26 Pixel Connectivity "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 Pixel Connectivity "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 Povezava slikovnih pik "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
= 26 Povezava slikovnih pik "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
Piksle z največjimi vrednostmi na sliki "bw" nastavite na 0, tako da bodo piksli črni.
Z bwconncomp poiščite predmete s povezljivostjo najmanj 26 slikovnih pik na sliki. Dodelite spremenljivki cc_1.
Korak: Odstranite krvne žile na sliki
Odstranite krvne žile, ki so še prisotne na sliki, s funkcijo bwpropfilt z razponom [0, 0,9].
[0,9, 1] je izključeno, ker vrednosti blizu 1 označujejo črto. Dodelite »RemoveVessels«.
Korak 26: Prikaz slike
Prikažite vsako filtrirano sliko v pod ploskvi. Imshow. z "obrobami" in "tesnimi" vhodi prikazuje vsako sliko v strukturi podploja. Vsaki sliki dodajte naslov, da ugotovite, kateri filter je bil uporabljen.
Korak 27: Odstranite žile in preštejte madeže krvi
1. Vzemite »RemoveVessels« in uporabite funkcijo »Centroid« v regijah, da prepoznate središče objektov na sliki. Ti predmeti morajo ustrezati krvnim strdkom na sliki.
2. Preštejte število krvnih strdkov, ugotovljenih z merjenjem dolžine centroidne matrice.
Korak 28: Diagnosticirajte sliko mrežnice na podlagi števila ugotovljenih krvnih strdkov
Uporabite if izjave za diagnosticiranje slike na podlagi števila ugotovljenih krvnih strdkov.
Če je bilo število identificiranih centroidov manjše ali enako 5, je bila slika označena kot normalna.
Če je bilo število centroidov večje od 5, je bila slika diagnosticirana z diabetično retinopatijo.
Rezultat se natisne v ukazno okno s pomočjo fprintf.
Korak 29: Če je več kot 5 blobov …
Zgornja navodila za diagnosticirane slike ponovite kot izjavo else. Ta del se bo izvajal, če je število blobov večje od 5.
Končajte stavek if.
30. korak: Ponovite postopek filtriranja za običajne slike z vrednostmi številk slike 2 in 3
Postopek ponovite za preostanek izvirnika if, če je numel (število mest v številki slike) 2 in 3. S tem se zanka for za običajne slike zaključi.
Končajte zanko for.
Korak 31: Ponovite celoten postopek za diagnosticirane slike
Ponovite celoten postopek z diagnosticiranimi slikami, navedenimi v matrici »številke_za_ekstrakt_diagnosticirane«.
Preglejte vsako številko (i) in jo spremenite v številko (i+10), da se diagnosticirane številke prikažejo kot slike 11 do 20.
32. korak: Statistična analiza
1. 'Actual_Diagnosis_Matrix' se uporablja za primerjavo rezultatov z uradno diagnozo v datoteki txt. Prvih 10 ničel označuje, da mora biti prvih 10 slik normalnih. Zadnjih 10 kaže, da je treba zadnjih 10 slik uvrstiti med diabetično retinopatijo.
2. Dvojni znak enakosti, ki se uporablja za ustvarjanje 'number_correct', ustvari logično matriko s primerjavo vrednosti ustreznih elementov 'Actual_Diagnosis_Matrix' z 'Diagnosis_Matrix', ustvarjenimi iz zanke for.
Za vsak element, ki se ujema z diagnozo, bo dodan 1, kar pomeni, da je koda pravilno diagnosticirala to sliko. Če ni pravilno, bo matriki dodal 0.
Nato seštevek vseh sešteje. Z drugimi besedami, najde vsoto pravilno diagnosticiranih slik.
3. 'Final_percentage_correct' je izračunani odstotek, kako natančno je koda diagnosticirala diabetično retinopatijo. Število pravilno diagnosticiranih slik se deli z 20 (skupno število slik) in pomnoži s 100, da se ugotovi odstotek uspešnih diagnoz.
33. korak: Poiščite interval zaupanja
1. Prenesite ModWald.m, da ga pokličete kot funkcijo. Brez te funkcije bi morali sami izračunati interval zaupanja z uporabo spremenjene Waldove metode.
2. Funkcija ModWald ima 2 vhoda, pri čemer je prvi število pravilno identificiranih slik, drugi pa skupna količina slik.
3. Funkcija ModWald bo prikazala spodnjo in zgornjo mejo intervala zaupanja razmerij za natančnost vzorčenih podatkov. Z drugimi besedami, podali boste interval odstotkov, kjer bo resnični odstotek natančnosti kode.
4. Uporabite spodnji fprintf za prikaz statistike in intervala zaupanja v ukazno okno.
> fprintf ('%. 0f odstotkov slik mrežnice je bilo pravilno diagnosticiranih v skladu z uradno diagnozo. / n / n', Final_percentage_correct)
> fprintf ('Pravi odstotek, pri katerem bo naša koda pravilno diagnosticirala diabetično retinopatijo, bo / n padel v obseg [%.3f, %.3f], na podlagi 20 vzorčenih slik / n', spodnji_vez, zgornji_mej)
Priporočena:
Samodejna drobilnica krompirja: 5 korakov (s slikami)
Samodejna drobilnica krompirja: Nekoč sem poskušal skuhati in pretlačiti nekaj krompirja. Nisem imel ustreznega pribora za delo, zato sem namesto tega uporabil cedilo … ni se dobro končalo. Tako sem si mislil: "Kako najlažje zdrobim krompir brez ustreznega drobilnika
Samodejna pečica za pretakanje SMD iz poceni opekača: 8 korakov (s slikami)
Samodejna pečica za pretakanje SMD iz poceni opekača za kruh: izdelava PCB -jev za ljubitelje je postala veliko bolj dostopna. Vezje, ki vsebuje samo sestavne dele skozi luknje, je enostavno spajkati, vendar je velikost plošče na koncu omejena z velikostjo komponente. Kot taka uporaba komponent za površinsko montažo omogoča
Samodejna osvetlitev postelje: 5 korakov (s slikami)
Samodejna osvetlitev postelje: Ali tudi ponoči spite? Ali tudi v temi ne vidite nič? Ali imate ponoči tudi v sobi? Če je tako, je ta naprava za vas! Mislim, da nas večina radi ostanemo malo zvečer dlje. Razlogi so lahko različni - Netflix, YouTube,
Samodejna maska: 10 korakov
Samodejna maska: če zmagam na natečaju, bom verjetno naredil drugo različico, ki je vse v enem, namesto da bi imel različne dele, sem uporabil ločene dele, ker si še vedno ne morem privoščiti boljših. Avto maska Ben Hecks 2: ht
Samodejna kmetija sladkornega trsa Minecraft: 10 korakov
Samodejna kmetija sladkornega trsa Minecraft: Tukaj so navodila po korakih za ustvarjanje lastne elegantne avtomatske kmetije sladkornega trsa