Innholdsfortegnelse:
- Trinn 1: Forutsetninger
- Trinn 2: Forutsetninger (fortsett)
- Trinn 3: Forutsetninger (fortsett)
- Trinn 4: Forutsetninger (fortsett)
- Trinn 5: Rydd opp Matlab for å forberede kjøring av kode
- Trinn 6: Velg 10 normale øyebilder og 10 bilder med diabetisk retinopati
- Trinn 7: Velg 10 normale øyebilder og 10 bilder med diabetiske retinopati -symptomer (fortsett)
- Trinn 8: Lag to variabler (normal og diagnostisert) og sett dem hver til 0
- Trinn 9: Lag en for loop for automatisk opplasting av normale bilder
- Trinn 10: Lag en for loop for å automatisk laste opp normale bilder (fortsett)
- Trinn 11: Beskjær kantene på bildet
- Trinn 12: Lag et gråtonebilde
- Trinn 13: Lag et kontrastbilde
- Trinn 14: Forbedre kontrastbildet
- Trinn 15: Lag et gjennomsnittsfilter
- Trinn 16: Kombiner gjennomsnittsfilteret med kontrastbildet
- Trinn 17: Lag en ny gjennomsnittsmaske ved å trekke fra piksler
- Trinn 18: Lag et binært filtrert bilde
- Trinn 19: Fjern mindre blobs som finnes i filtrerte bilder
- Trinn 20: Lag et diskstruktureringselement
- Trinn 21: Utfør morfologiske lukkeoperasjoner
- Trinn 22: Finn objektene med tilkobling minst 8
- Trinn 23: Finn maksimalt antall tilkoblede piksler
- Trinn 24: Sett Maks. Pikselverdier til 0 og Finn piksler med> = 26 pikseltilkoblinger
- Trinn 25: Fjern blodkar i bildet
- Trinn 26: Figurvisning
- Trinn 27: Fjern fartøyer og tell blodblokker
- Trinn 28: Diagnostiser netthinnebildet basert på antall identifiserte blodpropper
- Trinn 29: Hvis det er flere enn 5 klatter …
- Trinn 30: Gjenta filtreringsprosessen for normale bilder med bildesifferverdier som 2 og 3
- Trinn 31: Gjenta hele prosessen for de diagnostiserte bildene
- Trinn 32: Statistisk analyse
- Trinn 33: Finne konfidensintervall
Video: Automatisert diagnose av diabetisk retinopati via MATLAB: 33 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
(Se kodeoversikt ovenfor)
Diabetisk retinopati er en diabetesrelatert øyesykdom forårsaket av høyt blodsukkernivå. Det høye blodsukkernivået får blodårene i netthinnen til å hovne opp, noe som fører til forstørrede blodårer og til og med karlekkasjer, noe som fører til mørke flekker i netthinnebilder. Med denne koden tar vi sikte på å bruke utseendet på blodkarlekkasjer som en indikator på diabetisk retinopati i bakgrunnen, selv om ytterligere diagnoseteknikker ville være nødvendig i den virkelige verden. Målet med denne koden er å automatisere bildebehandling og diagnostisering av netthinnebilder for å identifisere tegn på diabetisk retinopati vist gjennom mørke flekker i netthinnebildene.
10 normale netthinnebilder og 10 diagnostiserte netthinnebilder ble behandlet gjennom en kode som først leser og filtrerer bildene og deretter kvantifiserer de mørke flekkene for å avgjøre om diabetiske retinopatisymptomer er tilstede, basert på en gitt terskel. Resultatene skrives deretter ut på kommandovinduet for tolkning av seerne.
Trinn 1: Forutsetninger
1. Kontroller at du har MATLAB -programmet lastet ned på datamaskinen.
2. Last ned txt -filen som finnes i lenken. (Trykk ‘ctrl+s’ for å lagre i samme katalog som MATLAB -koden)
Trinn 2: Forutsetninger (fortsett)
4. Åpne MATLAB og skriv ‘uiimport’ i kommandovinduet.
5. Velg filen officialdiagnoses.txt og importer den til MATLAB som en cellematrise.
6. Sørg for at du ser "offisielle diagnoser" som en variabel i arbeidsområdet.
Trinn 3: Forutsetninger (fortsett)
7. Last ned funksjonen ModWald.m, som kan hentes fra ovennevnte kode eller lastes ned fra Canvas.
(Kode gitt av professor King og professor Choi)
Trinn 4: Forutsetninger (fortsett)
8. Last ned de 400 råbildene fra dataseksjonen i STARE -prosjektet.
Trinn 5: Rydd opp Matlab for å forberede kjøring av kode
Legg til i koden:
1. Lukk alle (Lukker alle tidligere åpnede bilder)
2. clearvars - unntatt offisiell diagnose (sletter alle variabler unntatt den offisielle diagnosen txt -filen som tidligere er importert)
3. cclc (sletter kommandovinduet)
Trinn 6: Velg 10 normale øyebilder og 10 bilder med diabetisk retinopati
1. Ta diagnosetekstfilen og trekk ut bildenavnene. Disse navnene finnes i den første kolonnen i tekstfilen, så for å trekke dem ut, skriver du 'officialdiagnoses (:, 1)'. Matrisen med bildenavn ble tilordnet en variabel, "all_image_numbers"
2. Konverter variabelen all_image_numbers fra en cellematrise til en matrisematrise ved hjelp av cell2mat -funksjonen
Trinn 7: Velg 10 normale øyebilder og 10 bilder med diabetiske retinopati -symptomer (fortsett)
3. Velg 10 normale øyebilder for å kjøre koden. Bildene som ble valgt i dette tilfellet var 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.
Plasser disse tallene i en matrise og tilordne dem til en variabel som vil bli kalt når du laster inn bildene.
4. Gjenta trinn 3 for netthinnebilder som har blitt diagnostisert med diabetisk retinopati. Bildene som ble valgt i dette tilfellet var 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.
Trinn 8: Lag to variabler (normal og diagnostisert) og sett dem hver til 0
Lag disse variablene før for -sløyfen for å initialisere sløyfetallene.
Trinn 9: Lag en for loop for automatisk opplasting av normale bilder
1. Lag en for loop
2. Sett en tellevariabel (i, i dette tilfellet) til en matrise med verdiene 1-10. Denne tellevariabelen vil bli brukt til å kalle hvert bilde individuelt
3. Ta i -elementet i bildematrisen for å trekke ut og konvertere bildenavnet fra en streng til et tall ved hjelp av num2str -funksjonen.
Finn antall sifre som er tilstede i bildenavnet ved hjelp av tallfunksjonen. Tilordne denne verdien til en variabel, digits_normal. Dette tallet bør være 1 for enkeltsifrede tall, 2 for tosifrede tall og 3 for tresifrede tall. Denne informasjonen vil bli brukt til å ringe bilder automatisk.
Trinn 10: Lag en for loop for å automatisk laste opp normale bilder (fortsett)
3. Lag en if -setning som inneholder alle tre mulighetene fra de foregående trinnene. Hvis bildetavnet har 1 siffer, vil bildet bli kalt "im000", hvis det har to siffer, vil bildet bli kalt "im00", og hvis det har 3, vil bildet bli kalt "im0".
4. Under hver if -setning tilordner du en variabel for å lese "im" under den tilsvarende if -setningen med det riktige antallet nuller (som beskrevet ovenfor), etterfulgt av i.
Trinn 11: Beskjær kantene på bildet
Ta det originale bildet og bruk et imcrop -filter for å eliminere svarte kanter og tilordne en variabel I_crop. Beskjæringsrektangelet er spesifisert ved hjelp av en matrise [95, 95, 500, 410].
Trinn 12: Lag et gråtonebilde
Ta det beskårne bildet og bruk rbg2gray -filteret for å endre bildet til gråtoner. Tilordne dette bildet til variabel I2.
Trinn 13: Lag et kontrastbilde
Ta bildet I2 og bruk imadjust for å skalere intensitetsverdiene.
Ta verdier som faller innenfor området [0,2, 0,7] og omskaler dem til en [0, 1]. Gamma er satt til 0,8 for å gjøre bildet lysere. Tilordne det nye bildet til I_adjusted.
Trinn 14: Forbedre kontrastbildet
Ta det jeg_justerte bildet og bruk adapthisteq -funksjonen for å forbedre kontrasten.
Adapthisteq -syntaksen krever bildenavnet, I_adjusted, ‘numTiles’, størrelsen på numTiles, ‘nBins’ og antall hyller. Størrelsen på numTiles er satt til [8 8], ved å dele bildet i 8 x 8 fliser og antall søppelbøtter er satt til 28. Tilordne bildet til I_constrast.
Trinn 15: Lag et gjennomsnittsfilter
Lag en variabel med navnet 'meanfilt' ved å bruke fspecial -funksjonen. Skriv inn "gjennomsnittlig funksjon" for å lage gjennomsnittsfiltret og sett inn [90 90] for størrelsen på skyvevinduet.
Trinn 16: Kombiner gjennomsnittsfilteret med kontrastbildet
Lag en ny variabel som heter mask_mean, og bruk imfilter -funksjonen til å ta I_contrast -bildet og bruke middelfilteret som ble opprettet tidligere.
Trinn 17: Lag en ny gjennomsnittsmaske ved å trekke fra piksler
Lag en variabel som heter mask_mean2, og bruk funksjonen imsubtract til å trekke verdien av hver piksel i I_contrast fra den tilsvarende pixelen i mask_mean.
Trinn 18: Lag et binært filtrert bilde
Gjør gråtonebilder til svart -hvitt ved hjelp av imbinarize. Skriv inn mask_mean2, 'adaptiv', 'Forgrunnspolaritet', 'mørk', 'Følsomhet', 0.6. Tilordne dette nye bildet til mask_binarize.
Trinn 19: Fjern mindre blobs som finnes i filtrerte bilder
Fjern objekter med tilkobling mindre enn 100 piksler ved hjelp av bwareaopen -funksjonen på mask_binarize og sett terskelverdien til 100. Tilordne variabelen som bw.
Trinn 20: Lag et diskstruktureringselement
Lag et diskstruktureringselement (med en radius på 2) ved hjelp av strel -funksjonen. Tilordne det til se.
Trinn 21: Utfør morfologiske lukkeoperasjoner
Ta bw og bruk funksjonen Imclose på det strukturelle elementet for å utføre en morfologisk tett operasjon på objektet.
Trinn 22: Finn objektene med tilkobling minst 8
Ta bw og bruk bwconncomp for å finne objektene med tilkobling på minst 8 i bildet. Tilordne nummerutgangen til cc_1.
Trinn 23: Finn maksimalt antall tilkoblede piksler
Bruk cellfunfunksjonen til å utføre funksjonen "numel" på hver celle i CC. Dette finner antall elementer i PixelIdxList -cellen. Tilordne verdi til “numPixels”.
Finn maksimalverdiene i numPIxels. Tilordne det største maksimumet til “største” og indeksen for maksimumsverdien til “idx”.
Trinn 24: Sett Maks. Pikselverdier til 0 og Finn piksler med> = 26 pikseltilkoblinger
= 26 Pixel -tilkobling "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 Pixel -tilkobling "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 Pixel -tilkobling "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
= 26 Pixel -tilkobling "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
Sett pikslene med de største verdiene i bildet "bw" til 0, slik at pikslene blir svarte.
Finn objektene med en tilkobling på minst 26 piksler i bildet ved hjelp av bwconncomp. Tilordne variabelen cc_1.
Trinn 25: Fjern blodkar i bildet
Fjern blodårene som fremdeles er på bildet ved hjelp av bwpropfilt -funksjonen med et område på [0, 0,9].
[0,9, 1] er ekskludert fordi verdier nær 1 angir en linje. Tilordne “RemoveVessels”.
Trinn 26: Figurvisning
Vis hvert filtrert bilde i en delplot. Imshow. med "kantlinje" og "stramme" innganger, viser hvert bilde i en delplottstruktur. Legg til en tittel på hvert bilde for å skille hvilket filter som ble brukt.
Trinn 27: Fjern fartøyer og tell blodblokker
1. Ta “RemoveVessels” og bruk “Centroid” -funksjonen i regionprops for å identifisere sentroider til objektene i bildet. Disse objektene skal tilsvare blodproppene i bildet.
2. Tell antall blodpropper som er identifisert ved å ta lengden på sentroidmatrisen.
Trinn 28: Diagnostiser netthinnebildet basert på antall identifiserte blodpropper
Bruk if -setninger for å diagnostisere bildet basert på antall identifiserte blodpropper.
Hvis antallet sentroider som ble identifisert var mindre enn eller lik 5, ble bildet identifisert som normalt.
Hvis antallet sentroider var større enn 5, ble bildet diagnostisert med diabetisk retinopati.
Resultatet skrives ut på kommandovinduet ved hjelp av fprintf.
Trinn 29: Hvis det er flere enn 5 klatter …
Gjenta instruksjonene ovenfor for diagnostiserte bilder som en annen uttalelse. Denne delen vil kjøre hvis antall klatter er større enn 5.
Avslutt if -setningen.
Trinn 30: Gjenta filtreringsprosessen for normale bilder med bildesifferverdier som 2 og 3
Gjenta prosessen for resten av originalen hvis setninger når tall (antall sifre i bildetallet) er lik 2 og 3. Dette fullfører for -løkken for de normale bildene.
Avslutt for -løkken.
Trinn 31: Gjenta hele prosessen for de diagnostiserte bildene
Gjenta hele prosessen ved å bruke de diagnostiserte bildene som er oppført i matrisen "numbers_to_extract_diagnosed".
Sørg for å gå gjennom hver figur (i) og endre den til figur (i+10) slik at de diagnostiserte tallene dukker opp som bilder 11 til 20.
Trinn 32: Statistisk analyse
1. 'Actual_Diagnosis_Matrix' brukes for å sammenligne resultatene med den offisielle diagnosen som finnes i txt -filen. De første 10 nullene indikerer at de første 10 bildene skal være normale. De siste 10 viser at de siste 10 bildene bør klassifiseres som diabetisk retinopati.
2. Det doble likhetstegnet som brukes til å lage 'number_correct' oppretter en logisk matrise ved å sammenligne verdien av de tilsvarende elementene i 'Actual_Diagnosis_Matrix' med 'Diagnosis_Matrix' opprettet fra for -løkken.
For hvert element som samsvarer med diagnosen vil det bli lagt til en 1, noe som betyr at koden korrekt diagnostiserte bildet. Hvis den er feil, vil den legge til en 0 i matrisen.
Ta deretter summen av det som summerer alle. Med andre ord finner den summen av korrekt diagnostiserte bilder.
3. 'Final_percentage_correct' er den beregnede prosentandelen av hvor nøyaktig koden diagnostiserte diabetisk retinopati. Antall bilder diagnostisert riktig er delt med 20 (totalt antall bilder) og multiplisert med 100 for å finne prosentandelen vellykkede diagnoser.
Trinn 33: Finne konfidensintervall
1. Kontroller at du har lastet ned ModWald.m for å kalle det som en funksjon. Uten funksjonen måtte du selv beregne konfidensintervallet ved å bruke den modifiserte Wald -metoden.
2. ModWald -funksjonen har 2 innganger der den første er antallet korrekt identifiserte bilder, og den andre er den totale mengden bilder.
3. ModWald -funksjonen sender ut de nedre og øvre grensene for konfidensintervallet for proporsjoner for nøyaktigheten av de samplede dataene. Med andre ord vil det gi deg et intervall med prosent hvor den sanne prosentandelen av nøyaktigheten til koden vil ligge.
4. Bruk fprintf nedenfor for å sende statistikk og konfidensintervall til kommandovinduet.
> fprintf ('%. 0f prosent av netthinnebildene ble korrekt diagnostisert i henhold til offisiell diagnose. / n / n', Final_percentage_correct)
> fprintf ('Den sanne prosentandelen vår kode vil korrekt diagnostisere diabetisk retinopati vil / n falle i området [%.3f, %.3f], basert på 20 samplede bilder / n', lavere_bound, upper_bound)
Anbefalt:
Automatisert EKG-BME 305 Sluttprosjekt Ekstra kreditt: 7 trinn
Automatisert EKG-BME 305 Sluttprosjekt Ekstra kreditt: Et elektrokardiogram (EKG eller EKG) brukes til å måle de elektriske signalene som produseres av et bankende hjerte, og det spiller en stor rolle i diagnosen og prognosen for kardiovaskulær sykdom. Noe av informasjonen fra et EKG inkluderer rytmen
Automatisert EKG -kretsmodell: 4 trinn
Automatisert EKG -kretsmodell: Målet med dette prosjektet er å lage en kretsmodell med flere komponenter som tilstrekkelig kan forsterke og filtrere et innkommende EKG -signal. Tre komponenter vil bli modellert individuelt: en instrumenteringsforsterker, et aktivt hakkfilter og en
Automatisert Pet-Food Bowl Project: 13 trinn
Automated Pet-Food Bowl Project: Denne instruksjonsfilen vil skildre og forklare hvordan du bygger en automatisert, programmerbar dyrefôr med vedlagte matskåler. Jeg har lagt ved en video her som viser hvordan produktene fungerer og hvordan det ser ut
Automatisert EKG: Forsterkning og filtersimuleringer ved bruk av LTspice: 5 trinn
Automatisert EKG: Forsterkning og filtersimuleringer ved bruk av LTspice: Dette er bildet av den siste enheten du skal bygge og en veldig grundig diskusjon om hver del. Beskriver også beregningene for hvert trinn. Bildet viser blokkdiagram for denne enheten Metoder og materialer: Målet med denne pr
Parkeringshjelp Enkel reparasjon / diagnose: 4 trinn
Parkeringsassistent Enkel reparasjon / diagnose: Ok, kom i gang, jeg har en Chevrolet Avalanche fra 2010 og den har 4 parkeringsassistentsensorer i den bakre støtfangeren. Denne uhåndterlige kan brukes på og kjøretøy etter min beste kunnskap, været du har foran eller Rea eller begge deler. Så jeg gikk til min favoritt