Sadržaj:
- Korak 1: Preduvjeti
- 2. korak: Preduvjeti (ne)
- Korak 3: Preduvjeti (ne)
- Korak 4: Preduvjeti (ne)
- Korak 5: Očistite Matlab kako biste se pripremili za radni kôd
- 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: Izradite 2 varijable (normalne i dijagnosticirane) i postavite ih jednake na 0
- Korak 9: Stvorite petlju za automatsko prenošenje normalnih slika
- Korak 10: Izradite for Loop za automatsko prenošenje normalnih slika (ne)
- Korak 11: Izrežite granice slike
- Korak 12: Stvorite sliku u sivoj boji
- Korak 13: Stvorite kontrastnu sliku
- Korak 14: Poboljšajte kontrastnu sliku
- Korak 15: Izradite prosječni filtar
- Korak 16: Kombinirajte filtar prosjeka sa kontrastnom slikom
- Korak 17: Napravite novu srednju masku oduzimanjem piksela
- Korak 18: Izradite binarno filtriranu sliku
- Korak 19: Uklonite manje mrlje pronađene na filtriranim slikama
- Korak 20: Izradite 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 s> = 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 temelju broja identificiranih krvnih ugrušaka
- Korak 29: Ako postoji više od 5 mrlja …
- Korak 30: Ponovite postupak filtriranja za normalne slike s vrijednostima znamenki 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 dijagnoza dijabetičke retinopatije putem MATLAB -a: 33 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
(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
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)
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 s Canvas -a.
(Kôd dali profesor King i profesor Choi)
Korak 4: Preduvjeti (ne)
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
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
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)
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
Stvorite ove varijable prije for petlje za inicijalizaciju brojeva petlje.
Korak 9: Stvorite petlju 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)
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
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
Uzmite izrezanu sliku i primijenite filtar rbg2gray da biste sliku promijenili u sive. Dodijelite ovu sliku varijabli I2.
Korak 13: 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
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 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
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
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
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 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 (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 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
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
= 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 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 …
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 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 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
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
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:
Upravljanje Led putem aplikacije Blynk pomoću Nodemcua putem interneta: 5 koraka
Upravljanje LED -om putem aplikacije Blynk pomoću Nodemcua putem Interneta: Pozdrav svima Danas ćemo vam pokazati kako možete upravljati LED diodom pomoću pametnog telefona putem interneta
Početak rada s ESP32 CAM - Streaming videa putem ESP CAM -a putem Wi -Fi -ja. Projekt sigurnosne kamere ESP32: 8 koraka
Početak rada s ESP32 CAM | Streaming videa putem ESP CAM -a putem Wi -Fi -ja. Projekt sigurnosne kamere ESP32: Danas ćemo naučiti kako koristiti ovu novu ESP32 CAM ploču i kako je možemo kodirati i koristiti kao sigurnosnu kameru te dobiti streaming video putem WiFi -ja
Upravljajte uređajima putem interneta putem preglednika. (IoT): 6 koraka
Upravljajte uređajima putem interneta putem preglednika. (IoT): U ovom Instructableu pokazat ću vam kako možete upravljati uređajima poput LED-a, releja, motora itd. Putem interneta putem web-preglednika. I možete sigurno pristupiti kontrolama s bilo kojeg uređaja. Web platforma koju sam ovdje koristio je RemoteMe.org posjet
Kućna automatizacija: Automatska sklopna ploča s zatamnjivanjem putem Bluetootha pomoću Tiva TM4C123G: 7 koraka
Kućna automatizacija: Automatska sklopna ploča s zatamnjivanjem putem Bluetootha pomoću Tiva TM4C123G: Danas imamo daljinske upravljače za naše televizore i druge elektroničke sustave koji su nam uvelike olakšali život. Jeste li se ikada zapitali o kućnoj automatizaciji koja bi omogućila upravljanje cijevnim svjetlima, ventilatorima i drugom električnom energijom
Prijenos datoteka putem LAN -a putem BitTorrenta: 6 koraka
Prijenos datoteka putem LAN -a putem BitTorrenta: Ponekad ćete možda morati prenijeti datoteke preko mreže na nekoliko računala. Iako biste ga mogli staviti na flash pogon ili CD/DVD, morali biste otići na svako računalo kopirati datoteke, a možda će trebati i neko vrijeme da se sve datoteke kopiraju (osobito s