Sadržaj:

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

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

Video: Automatska dijagnostika dijabetičke retinopatije putem MATLAB -a: 33 koraka
Video: Dijabetes: Alternativna Medicina Dijabetes 2024, Novembar
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

(Pogledajte gornji prikaz koda)

Dijabetička retinopatija je očna bolest povezana s dijabetesom uzrokovana visokim razinama š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 iskoristiti pojavu mjesta propuštanja krvnih žila kao pokazatelj pozadinske dijabetičke retinopatije, iako bi u stvarnom svijetu bile potrebne dodatne 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 mrežnice 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 štampaju u komandnom prozoru radi preglednosti.

Korak 1: Preduslovi

Preduslovi
Preduslovi

1. Uverite se da ste na računar preuzeli program MATLAB.

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

Korak 2: Preduvjeti (ne)

Preduslovi (nije)
Preduslovi (nije)
Preduslovi (nije)
Preduslovi (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)

Preduslovi (nije)
Preduslovi (nije)

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

(Kôd dali profesor King i profesor Choi)

Korak 4: Preduvjeti (ne)

Preduslovi (nije)
Preduslovi (nije)

8. Preuzmite 400 neobrađenih slika iz odeljka sa podacima projekta STARE.

Korak 5: Očistite Matlab da biste se pripremili za pokretanje koda

Očistite Matlab da biste se pripremili za pokretanje koda
Očistite Matlab da biste se pripremili za pokretanje koda

Dodaj u kod:

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 komandni 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. Ta su imena sadržana u prvoj koloni tekstualne datoteke pa ih za izdvajanje upišite 'officialdiagnoses (:, 1)'. Matrica naziva slika dodijeljena je varijabli, "svi_brojevi_slika"

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. U ovom slučaju odabrane su slike 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.

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

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

Kreirajte ove varijable prije for petlje za inicijalizaciju brojeva petlje.

Korak 9: Kreirajte petlju za automatsko slanje normalnih slika

Kreirajte for Loop za automatsko postavljanje normalnih slika
Kreirajte for Loop za automatsko postavljanje normalnih slika

1. Kreirajte for petlju

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

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

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

Korak 10: Kreirajte petlju za automatsko slanje normalnih slika (ne)

Kreirajte petlju za automatsko slanje normalnih slika (ne)
Kreirajte petlju za automatsko slanje normalnih slika (ne)

3. Kreirajte 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 naredbe dodijelite varijablu za imread "im" ispod odgovarajuće if naredbe s odgovarajućim brojem nula (kao što je gore opisano), iza koje slijedi i.

Korak 11: Izrežite ivice slike

Izrežite ivice slike
Izrežite ivice slike

Snimite originalnu sliku i primijenite imcrop filter kako biste uklonili crne ivice i dodijelili varijabli I_crop. Pravokutnik za obrezivanje je određen pomoću matrice [95, 95, 500, 410].

Korak 12: Kreirajte sliku u sivoj boji

Kreirajte sliku u sivoj boji
Kreirajte sliku u sivoj boji

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

Korak 13: Kreirajte kontrastnu sliku

Kreirajte kontrastnu sliku
Kreirajte kontrastnu sliku

Snimite sliku I2 i upotrijebite imadjust 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 poboljšanje kontrasta.

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

Korak 15: Kreirajte prosječni filter

Kreirajte prosječni filter
Kreirajte prosječni filter

Kreirajte varijablu pod nazivom 'meanfilt' koristeći funkciju fspecial. Unesite ‘prosječnu funkciju’ za stvaranje filtera za usrednjavanje i umetnite [90 90] za veličinu kliznog prozora.

Korak 16: Kombinujte filter za usrednjavanje sa kontrastnom slikom

Kombinujte filter za usrednjavanje sa kontrastnom slikom
Kombinujte filter za usrednjavanje sa kontrastnom slikom

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

Korak 17: Napravite novu srednju masku oduzimanjem piksela

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

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

Korak 18: Kreirajte binarno filtriranu sliku

Kreirajte binarno filtriranu sliku
Kreirajte 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 na filtriranim slikama
Uklonite manje mrlje pronađene na filtriranim slikama

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

Korak 20: Kreirajte element za strukturiranje diska

Kreirajte element za strukturiranje diska
Kreirajte element za strukturiranje diska

Napravite 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 sa povezivanjem najmanje 8
Pronađite objekte sa povezivanjem najmanje 8

Uzmite bw i pomoću bwconncomp pronađite objekte 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 maksimalne vrijednosti “idx”.

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

Uklonite krvne žile na slici
Uklonite krvne žile na slici

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

Slika Prikaz
Slika Prikaz

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

Uklonite posude i prebrojte mrlje krvi
Uklonite posude i prebrojte 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 sa najvećim vrijednostima na slici „bw“na 0, čineći piksele crnim.

Pronađite objekte sa povezivanjem od najmanje 26 piksela na slici pomoću bwconncomp. Dodijeli varijabli cc_1.

Korak 25: Uklonite krvne žile sa slike

Uklonite krvne žile koje su još prisutne na slici pomoću funkcije bwpropfilt u rasponu 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 ulazima "rub" i "uski", prikazuje svaku sliku u strukturi podcrta. Svakoj slici dodajte naslov kako biste razlikovali koji je filter korišten.

Korak 27: Uklonite posude i prebrojte mrlje krvi

1. Uzmite “RemoveVessels” i primijenite funkciju “Centroid” u rejonima regija da biste identificirali centroide objekata na slici. Ovi predmeti trebaju odgovarati krvnim ugrušcima na slici.

2. Izbrojite identifikovane krvne ugruške uzimajući dužinu centroidnog matriksa.

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

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

Ako je broj identificiranih centroida 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 štampa u komandnom prozoru 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 gornja uputstva 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 sa vrijednostima znamenke slike kao 2 i 3

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

Ponovite postupak za ostatak originala if izraza kada je numel (broj znamenki u broju slike) jednak 2 i 3. Time je završena for petlja za normalne slike.

Završi 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 ekstrakt”.

Svakako prođite kroz svaku brojku (i) i promijenite je u brojku (i+10) kako bi se dijagnosticirane brojke pojavile kao slike 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 kreiranje 'number_correct' stvara logički niz upoređujući vrijednost odgovarajućih elemenata 'Actual_Diagnosis_Matrix' sa 'Diagnosis_Matrix' kreiranom iz for petlje.

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

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

3. 'Konačni_procentni_tač' je izračunati postotak koliko je kod dijagnosticirana dijabetička retinopatija. 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

Traženje intervala povjerenja
Traž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 tač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_procenat_ispravno)

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

Preporučuje se: