Sadržaj:
- Korak 1: Preduslovi
- Korak 2: Preduvjeti (ne)
- Korak 3: Preduvjeti (ne)
- Korak 4: Preduvjeti (ne)
- Korak 5: Očistite Matlab da biste se pripremili za pokretanje koda
- Korak 6: Odaberite 10 slika normalnog oka i 10 slika sa simptomima dijabetičke retinopatije
- Korak 7: Odaberite 10 slika normalnog oka i 10 slika sa simptomima dijabetičke retinopatije (ne)
- Korak 8: Kreirajte 2 varijable (normalne i dijagnosticirane) i postavite ih jednake na 0
- Korak 9: Kreirajte petlju za automatsko slanje normalnih slika
- Korak 10: Kreirajte petlju za automatsko slanje normalnih slika (ne)
- Korak 11: Izrežite ivice slike
- Korak 12: Kreirajte sliku u sivoj boji
- Korak 13: Kreirajte kontrastnu sliku
- Korak 14: Poboljšajte kontrastnu sliku
- Korak 15: Kreirajte prosječni filter
- Korak 16: Kombinujte filter za usrednjavanje sa kontrastnom slikom
- Korak 17: Napravite novu srednju masku oduzimanjem piksela
- Korak 18: Kreirajte binarno filtriranu sliku
- Korak 19: Uklonite manje mrlje pronađene na filtriranim slikama
- Korak 20: Kreirajte element za strukturiranje diska
- Korak 21: Izvedite morfološke operacije zatvaranja
- Korak 22: Pronađite objekte sa povezivanjem najmanje 8
- Korak 23: Pronađite najveći mogući broj povezanih piksela
- Korak 24: Postavite maksimalne vrijednosti piksela na 0 i pronađite piksele sa> = 26 povezivanjem piksela
- Korak 25: Uklonite krvne žile sa slike
- Korak 26: Prikaz slike
- Korak 27: Uklonite posude i prebrojte mrlje krvi
- Korak 28: Dijagnosticirajte retinalnu sliku na osnovu broja identificiranih krvnih ugrušaka
- Korak 29: Ako postoji više od 5 mrlja …
- Korak 30: Ponovite postupak filtriranja za normalne slike sa vrijednostima znamenke slike kao 2 i 3
- Korak 31: Ponovite cijeli postupak za dijagnosticirane slike
- Korak 32: Statistička analiza
- Korak 33: Pronalaženje intervala povjerenja
Video: Automatska dijagnostika dijabetičke retinopatije putem MATLAB -a: 33 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
(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
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)
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)
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)
8. Preuzmite 400 neobrađenih slika iz odeljka sa podacima projekta STARE.
Korak 5: 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
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)
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
Kreirajte ove varijable prije for petlje za inicijalizaciju brojeva petlje.
Korak 9: Kreirajte petlju za automatsko slanje 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)
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
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
Uzmite izrezanu sliku i primijenite filter rbg2gray da biste sliku promijenili u sive. Dodijelite ovu sliku varijabli I2.
Korak 13: 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
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 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
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
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
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 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
Napravite element za strukturiranje diska (s radijusom 2) pomoću strel funkcije. Dodijelite ga se.
Korak 21: Izvedite 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
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
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
= 26 Povezivanje piksela "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 Povezivanje piksela "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 Povezivanje piksela "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
= 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 …
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 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 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
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
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:
Automatska hranilica za pse: 4 koraka
Automatska hranilica za pse !!: Lako, korisno i zdravo
Pomoć pri parkiranju Jednostavna popravka / dijagnostika: 4 koraka
Pomoć pri parkiranju Lako popravljanje / dijagnosticiranje: U redu, počnimo, imam Chevrolet Avalanche iz 2010. godine i ima 4 senzora za pomoć pri parkiranju u stražnjem odbojniku. Koliko god mi je poznato, ova nerješiva se može koristiti na vozilu i voziti, ako imate prednju stranu ili Rea ili oboje. Pa sam otišao na omiljenu
Upravljajte uređajima putem interneta putem preglednika. (IoT): 6 koraka
Upravljajte uređajima putem interneta putem preglednika. (IoT): U ovom uputstvu ću vam pokazati kako možete kontrolirati uređaje poput LED dioda, releja, motora itd. Putem interneta putem web-preglednika. I možete sigurno pristupiti kontrolama sa bilo kojeg uređaja. Web platforma koju sam ovdje koristio je RemoteMe.org posjetite
Kućna automatizacija: Automatska sklopna ploča sa zatamnjivanjem putem Bluetootha pomoću Tiva TM4C123G: 7 koraka
Kućna automatizacija: Automatska razvodna ploča sa zatamnjivanjem putem Bluetootha koristeći Tiva TM4C123G: Danas imamo daljinske upravljače za naše televizore i druge elektroničke sisteme koji su nam život učinili zaista lakim. Jeste li se ikada zapitali o kućnoj automatizaciji koja bi omogućila upravljanje cijevnim svjetlima, ventilatorima i drugom električnom energijom
Inventar - Brza dijagnostika računara sada je zamijenjena, pogledajte dolje: 6 koraka
Inventar - Brza dijagnostika računara sada je zamijenjena, pogledajte dolje: Ako ikada trebate raditi na računaru koje nije ispred vas, potreban vam je precizan popis. Ovo uputstvo je nastalo čisto zato što kolega ima problema sa pronalaženjem upravljačkog programa za računar. Koristiću Aida32 personal sa http://majorgeeks.com