Sadržaj:

Automatska dijagnoza dijabetičke retinopatije putem MATLAB -a: 33 koraka
Automatska dijagnoza dijabetičke retinopatije putem MATLAB -a: 33 koraka

Video: Automatska dijagnoza dijabetičke retinopatije putem MATLAB -a: 33 koraka

Video: Automatska dijagnoza dijabetičke retinopatije putem MATLAB -a: 33 koraka
Video: Top 25 Skin Signs & Symptoms of Diabetes [Type 2 Diabetes Early Signs] 2024, Studeni
Anonim
Automatska dijagnostika dijabetičke retinopatije putem MATLAB -a
Automatska dijagnostika dijabetičke retinopatije putem MATLAB -a
Automatska dijagnostika dijabetičke retinopatije putem MATLAB -a
Automatska dijagnostika dijabetičke retinopatije putem MATLAB -a

(Vidi gornji prikaz koda)

Dijabetička retinopatija je očna bolest povezana s dijabetesom uzrokovana visokom razinom šećera u krvi. Visoka razina šećera u krvi uzrokuje oticanje krvnih žila u mrežnicama, što dovodi do povećanja krvnih žila, pa čak i do propuštanja žila, što dovodi do tamnih mrlja na slikama mrežnice. Ovim kodom nastojimo koristiti izgled mjesta propuštanja krvnih žila kao pokazatelj pozadinske dijabetičke retinopatije, iako bi u stvarnom svijetu bile potrebne daljnje dijagnostičke tehnike. Cilj ovog koda je automatizirati obradu slike i dijagnosticiranje retinalnih slika radi identifikacije znakova dijabetičke retinopatije prikazane kroz tamne mrlje na slikama retine.

10 normalnih slika retine i 10 dijagnosticiranih slika retine obrađeno je pomoću koda koji prvo čita i filtrira slike, a zatim kvantificira tamne mrlje kako bi se utvrdilo postoje li simptomi dijabetičke retinopatije, na temelju danog praga. Rezultati se zatim ispisuju u naredbeni prozor radi interpretacije gledatelja.

Korak 1: Preduvjeti

Preduvjeti
Preduvjeti

1. Provjerite jeste li na računalo preuzeli program MATLAB.

2. Preuzmite txt datoteku koja se nalazi na poveznici. (Pritisnite ‘ctrl+s’ za spremanje u isti direktorij kao i MATLAB kôd)

2. korak: Preduvjeti (ne)

Preduvjeti (nije)
Preduvjeti (nije)
Preduvjeti (nije)
Preduvjeti (nije)

4. Otvorite MATLAB i u naredbeni prozor upišite ‘uiimport’.

5. Odaberite datoteku officialdiagnoses.txt i uvezite je u MATLAB kao matricu ćelije.

6. Pobrinite se da vidite "officialdiagnoses" kao varijablu u radnom prostoru.

Korak 3: Preduvjeti (ne)

Preduvjeti (nije)
Preduvjeti (nije)

7. Preuzmite funkciju ModWald.m koju možete dobiti iz gornjeg koda ili je preuzeti s Canvas -a.

(Kôd dali profesor King i profesor Choi)

Korak 4: Preduvjeti (ne)

Preduvjeti (nije)
Preduvjeti (nije)

8. Preuzmite 400 neobrađenih slika iz odjeljka s podacima projekta STARE.

Korak 5: Očistite Matlab kako biste se pripremili za radni kôd

Očistite Matlab kako biste se pripremili za radni kôd
Očistite Matlab kako biste se pripremili za radni kôd

Dodaj u kôd:

1. zatvori sve (Zatvara sve prethodno otvorene slike)

2. clearvars - osim službenih dijagnoza (Briše sve varijable osim prethodno uvezene službene txt datoteke za dijagnostiku)

3. cclc (Briše naredbeni prozor)

Korak 6: Odaberite 10 slika normalnog oka i 10 slika sa simptomima dijabetičke retinopatije

Odaberite 10 slika normalnog oka i 10 slika sa simptomima dijabetičke retinopatije
Odaberite 10 slika normalnog oka i 10 slika sa simptomima dijabetičke retinopatije
Odaberite 10 slika normalnog oka i 10 slika sa simptomima dijabetičke retinopatije
Odaberite 10 slika normalnog oka i 10 slika sa simptomima dijabetičke retinopatije

1. Uzmite tekstualnu datoteku dijagnoze i izdvojite nazive slika. Ti su nazivi sadržani u prvom stupcu tekstualne datoteke pa ih za izdvajanje upišite 'officialdiagnoses (:, 1)'. Matrica naziva slika dodijeljena je varijabli "all_image_numbers"

2. Pretvorite varijablu all_image_numbers iz polja ćelija u matrični niz pomoću funkcije cell2mat

Korak 7: Odaberite 10 slika normalnog oka i 10 slika sa simptomima dijabetičke retinopatije (ne)

Odaberite 10 slika normalnog oka i 10 slika sa simptomima dijabetičke retinopatije (ne)
Odaberite 10 slika normalnog oka i 10 slika sa simptomima dijabetičke retinopatije (ne)
Odaberite 10 slika normalnog oka i 10 slika sa simptomima dijabetičke retinopatije (ne)
Odaberite 10 slika normalnog oka i 10 slika sa simptomima dijabetičke retinopatije (ne)

3. Odaberite 10 normalnih slika oka za pokretanje koda. U ovom slučaju odabrane su slike 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.

Stavite ove brojeve u matricu i dodijelite ih varijabli koja će se pozvati prilikom učitavanja slika.

4. Ponovite korak 3 za slike retine kod kojih je dijagnosticirana dijabetička retinopatija. Slike odabrane u ovom slučaju bile su 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.

Korak 8: Izradite 2 varijable (normalne i dijagnosticirane) i postavite ih jednake na 0

Izradite 2 varijable (normalne i dijagnosticirane) i postavite ih jednake na 0
Izradite 2 varijable (normalne i dijagnosticirane) i postavite ih jednake na 0

Stvorite ove varijable prije for petlje za inicijalizaciju brojeva petlje.

Korak 9: Stvorite petlju za automatsko prenošenje normalnih slika

Izradite for Loop za automatsko prenošenje normalnih slika
Izradite for Loop za automatsko prenošenje normalnih slika

1. Napravite for petlju

2. Postavite varijablu brojanja (u ovom slučaju i) na matricu vrijednosti 1-10. Ova će se varijabla brojanja koristiti za pozivanje svake slike pojedinačno

3. Uzmite element i u matrici slika za izdvajanje i pretvaranje naziva slike iz niza u broj pomoću funkcije num2str.

Pomoću numeričke funkcije pronađite broj znamenki u nazivu slike. Dodijelite ovu vrijednost varijabli, digits_normal. Taj bi broj trebao biti 1 za jednoznamenkaste brojeve, 2 za dvoznamenkaste i 3 za troznamenkaste brojeve. Ove će se informacije koristiti za automatsko pozivanje slika.

Korak 10: Izradite for Loop za automatsko prenošenje normalnih slika (ne)

Izradite petlju za automatsko prenošenje normalnih slika (ne)
Izradite petlju za automatsko prenošenje normalnih slika (ne)

3. Napravite if naredbu koja sadrži sve tri mogućnosti iz prethodnih koraka. Ako naziv slike ima 1 znamenku, slika će se zvati “im000”, ako ima 2 znamenke, slika će se zvati “im00”, a ako ima 3 slika će se zvati “im0”.

4. Ispod svakog if izraza dodijelite varijablu da imread "im" ispod odgovarajućeg if naredbe s odgovarajućim brojem nula (kao što je gore opisano), a zatim i.

Korak 11: Izrežite granice slike

Izrežite granice slike
Izrežite granice slike

Uzmite izvornu sliku i primijenite imcrop filter kako biste uklonili crne obrube i dodijelili varijabli I_crop. Pravokutnik za obrezivanje određuje se pomoću matrice [95, 95, 500, 410].

Korak 12: Stvorite sliku u sivoj boji

Napravite sliku u sivoj boji
Napravite sliku u sivoj boji

Uzmite izrezanu sliku i primijenite filtar rbg2gray da biste sliku promijenili u sive. Dodijelite ovu sliku varijabli I2.

Korak 13: Stvorite kontrastnu sliku

Stvorite kontrastnu sliku
Stvorite kontrastnu sliku

Snimite sliku I2 i upotrijebite neprilagođeno za promjenu vrijednosti intenziteta.

Uzmite vrijednosti koje spadaju u raspon [0,2, 0,7] i promijenite ih na [0, 1]. Gama je postavljena na 0,8 kako bi slika postala svjetlija. Dodijelite novu sliku I_adjusted.

Korak 14: Poboljšajte kontrastnu sliku

Poboljšajte kontrastnu sliku
Poboljšajte kontrastnu sliku

Snimite I_adjusted sliku i upotrijebite funkciju adapthisteq za povećanje kontrasta.

Sintaksa Adapthisteq zahtijeva naziv slike, I_adjusted, 'numTiles', veličinu numTiles, 'nBins' i broj spremnika. Veličina numTiles postavljena je na [8 8], dijeleći sliku na 8x8 pločice, a broj spremnika postavljen je na 28. Dodijelite sliku I_constrast.

Korak 15: Izradite prosječni filtar

Izradite prosječni filtar
Izradite prosječni filtar

Izradite varijablu pod nazivom "meanfilt" pomoću funkcije fspecial. Unesite ‘prosječnu funkciju’ za stvaranje filtra za usrednjavanje i umetnite [90 90] za veličinu kliznog prozora.

Korak 16: Kombinirajte filtar prosjeka sa kontrastnom slikom

Kombinirajte filtar prosjeka sa kontrastnom slikom
Kombinirajte filtar prosjeka sa kontrastnom slikom

Izradite novu varijablu pod nazivom mask_mean i upotrijebite funkciju imfilter za uzimanje slike I_contrast i za primjenu prethodno stvorenog filtra.

Korak 17: Napravite novu srednju masku oduzimanjem piksela

Napravite novu srednju masku oduzimanjem piksela
Napravite novu srednju masku oduzimanjem piksela

Izradite varijablu pod nazivom mask_mean2 i upotrijebite funkciju imsubtract za oduzimanje vrijednosti svakog piksela u I_contrast od odgovarajućeg piksela u mask_mean.

Korak 18: Izradite binarno filtriranu sliku

Izradite binarno filtriranu sliku
Izradite binarno filtriranu sliku

Pretvorite slike u sivim tonovima u crno -bijele pomoću imbinarize. Input mask_mean2, 'adaptive', 'ForegroundPolarity', 'dark', 'Sensitivity', 0,6. Dodijelite ovoj novoj slici mask_binarize.

Korak 19: Uklonite manje mrlje pronađene na filtriranim slikama

Uklonite manje mrlje pronađene u filtriranim slikama
Uklonite manje mrlje pronađene u filtriranim slikama

Uklonite objekte s povezivanjem manjim od 100 piksela pomoću funkcije bwareaopen na mask_binarize i postavite vrijednost praga na 100. Dodijelite varijablu kao bw.

Korak 20: Izradite element za strukturiranje diska

Izradite element za strukturiranje diska
Izradite element za strukturiranje diska

Izradite element za strukturiranje diska (s radijusom 2) pomoću strel funkcije. Dodijelite ga se.

Korak 21: Izvedite morfološke operacije zatvaranja

Izvršite morfološke operacije zatvaranja
Izvršite morfološke operacije zatvaranja

Uzmite bw i primijenite funkciju imclose na strukturni element kako biste izvršili morfološku operaciju zatvaranja objekta.

Korak 22: Pronađite objekte sa povezivanjem najmanje 8

Pronađite objekte s povezivanjem najmanje 8
Pronađite objekte s povezivanjem najmanje 8

Uzmite bw i upotrijebite bwconncomp za pronalaženje objekata sa povezivanjem najmanje 8 na slici. Dodijelite izlaz broju cc_1.

Korak 23: Pronađite najveći mogući broj povezanih piksela

Pronađite najveći mogući broj povezanih piksela
Pronađite najveći mogući broj povezanih piksela
Pronađite najveći mogući broj povezanih piksela
Pronađite najveći mogući broj povezanih piksela

Koristite funkciju cellfun za izvođenje funkcije "numel" na svakoj ćeliji u CC -u. Ovo pronalazi broj elemenata u ćeliji PixelIdxList. Dodijelite vrijednost “numPixels”.

Pronađite maksimalne vrijednosti u numPIxels. Dodijelite najveći maksimum "najvećem", a indeks najveće vrijednosti "idx".

Korak 24: Postavite maksimalne vrijednosti piksela na 0 i pronađite piksele s> = 26 povezivanjem piksela

Uklonite krvne žile sa slike
Uklonite krvne žile sa slike

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

Prikaz slika
Prikaz slika

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

Uklonite posude i izbrojite mrlje krvi
Uklonite posude i izbrojite mrlje krvi

= 26 Povezivanje piksela "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">

Dijagnosticirajte retinalnu sliku na temelju broja identificiranih krvnih ugrušaka
Dijagnosticirajte retinalnu sliku na temelju broja identificiranih krvnih ugrušaka

= 26 Povezivanje piksela "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">

Postavite piksele s najvećim vrijednostima na slici "bw" na 0, čineći piksele crnima.

Pomoću bwconncomp pronađite objekte s mogućnošću povezivanja od najmanje 26 piksela na slici. Dodijeli varijabli cc_1.

Korak 25: Uklonite krvne žile sa slike

Uklonite krvne žile koje su još prisutne na slici pomoću funkcije bwpropfilt s rasponom od [0, 0,9].

[0,9, 1] je isključeno jer vrijednosti blizu 1 označavaju liniju. Dodijelite “RemoveVessels”.

Korak 26: Prikaz slike

Prikažite svaku filtriranu sliku u podcrtu. Imshow. s "obrubljenim" i "uskim" ulazima, prikazuje svaku sliku u strukturi podcrta. Svakoj slici dodajte naslov kako biste razlikovali koji je filtar korišten.

Korak 27: Uklonite posude i prebrojte mrlje krvi

1. Uzmite "RemoveVessels" i primijenite značajku "Centroid" u rejonima regija da biste identificirali centroide objekata na slici. Ovi predmeti trebaju odgovarati krvnim ugrušcima koji su prisutni na slici.

2. Izbrojite identificirane krvne ugruške uzimajući duljinu centroidnog matriksa.

Korak 28: Dijagnosticirajte retinalnu sliku na temelju broja identificiranih krvnih ugrušaka

Koristite if naredbe za dijagnosticiranje slike na temelju broja identificiranih krvnih ugrušaka.

Ako je broj identificiranih centroida bio manji ili jednak 5, slika je identificirana kao normalna.

Ako je broj centroida bio veći od 5, na slici je dijagnosticirana dijabetička retinopatija.

Rezultat se ispisuje u naredbeni prozor pomoću fprintf.

Korak 29: Ako postoji više od 5 mrlja …

Ako postoji više od 5 mrlja …
Ako postoji više od 5 mrlja …

Ponovite gornje upute za dijagnosticirane slike kao izjavu else. Ovaj dio će se pokrenuti ako je broj mrlja veći od 5.

Završite if naredbu.

Korak 30: Ponovite postupak filtriranja za normalne slike s vrijednostima znamenki slike kao 2 i 3

Ponovite postupak filtriranja za normalne slike s vrijednostima znamenki slike kao 2 i 3
Ponovite postupak filtriranja za normalne slike s vrijednostima znamenki slike kao 2 i 3
Ponovite postupak filtriranja za normalne slike s vrijednostima znamenki slike 2 i 3
Ponovite postupak filtriranja za normalne slike s vrijednostima znamenki slike 2 i 3

Ponovite postupak za ostatak izvornika if ako je numel (broj znamenki u broju slike) jednak 2 i 3. Time se završava for petlja za normalne slike.

Završite for petlju.

Korak 31: Ponovite cijeli postupak za dijagnosticirane slike

Ponovite cijeli postupak za dijagnosticirane slike
Ponovite cijeli postupak za dijagnosticirane slike

Ponovite cijeli postupak koristeći dijagnosticirane slike navedene u matrici "brojevi_za_dignosticirani_diskutirani".

Svakako prođite kroz svaku brojku (i) i promijenite je u brojku (i+10) kako bi se dijagnosticirane brojke pojavile kao slike od 11 do 20.

Korak 32: Statistička analiza

Statistička analiza
Statistička analiza

1. 'Actual_Diagnosis_Matrix' koristi se za usporedbu rezultata sa službenom dijagnozom koja se nalazi u txt datoteci. Prvih 10 nula označava da bi prvih 10 slika trebalo biti normalno. Posljednjih 10 pokazuje da bi posljednjih 10 slika trebalo klasificirati kao dijabetičku retinopatiju.

2. Dvostruki znak jednakosti koji se koristi za stvaranje 'number_correct' stvara logički niz usporedbom vrijednosti odgovarajućih elemenata 'Actual_Diagnosis_Matrix' s 'Diagnosis_Matrix' stvorenih iz for petlje.

Za svaki element koji odgovara dijagnozi bit će dodan 1, što znači da je kod ispravno dijagnosticirao tu sliku. Ako nije točna, matrici će dodati 0.

Zatim se uzimanjem zbroja zbrajaju sve one. Drugim riječima, pronalazi zbroj ispravno dijagnosticiranih slika.

3. 'Konačni_procenat_ispravno' izračunati je postotak koliko je točan kôd dijagnosticirao dijabetičku retinopatiju. Broj ispravno dijagnosticiranih slika dijeli se s 20 (ukupan broj slika) i množi sa 100 kako bi se pronašao postotak uspješnih dijagnoza.

Korak 33: Pronalaženje intervala povjerenja

Pronalaženje intervala povjerenja
Pronalaženje intervala povjerenja

1. Provjerite jeste li preuzeli ModWald.m da biste ga pozvali kao funkciju. Bez funkcije, sami biste morali izračunati interval pouzdanosti korištenjem modificirane Waldove metode.

2. Funkcija ModWald ima 2 ulaza gdje je prvi broj ispravno identificiranih slika, a drugi ukupna količina slika.

3. Funkcija ModWald ispisat će donju i gornju granicu intervala pouzdanosti proporcija za točnost uzorkovanih podataka. Drugim riječima, dat ćete interval postotaka u kojima će se nalaziti pravi postotak točnosti koda.

4. Upotrijebite dolje navedeni fprintf za izlaz statistike i interval pouzdanosti u naredbeni prozor.

> fprintf ('%. 0f posto slika mrežnice ispravno je dijagnosticirano prema službenoj dijagnozi. / n / n', Konačni_procent_ispravno)

> fprintf ('Pravi postotak u kojem će naš kôd ispravno dijagnosticirati dijabetičku retinopatiju bit će / n u rasponu od [%.3f, %.3f], na temelju 20 uzorkovanih slika / n', donja granica, gornja granica)

Preporučeni: