Sisällysluettelo:

Diabeettisen retinopatian automaattinen diagnoosi MATLABin kautta: 33 vaihetta
Diabeettisen retinopatian automaattinen diagnoosi MATLABin kautta: 33 vaihetta

Video: Diabeettisen retinopatian automaattinen diagnoosi MATLABin kautta: 33 vaihetta

Video: Diabeettisen retinopatian automaattinen diagnoosi MATLABin kautta: 33 vaihetta
Video: Miksi munuaisarvoja seurataan? Diabetes ja munuaiset -lääkäriluento 2024, Marraskuu
Anonim
Diabeettisen retinopatian automatisoitu diagnoosi MATLABin kautta
Diabeettisen retinopatian automatisoitu diagnoosi MATLABin kautta
Diabeettisen retinopatian automatisoitu diagnoosi MATLABin kautta
Diabeettisen retinopatian automatisoitu diagnoosi MATLABin kautta

(Katso yllä oleva koodi)

Diabeettinen retinopatia on diabetekseen liittyvä silmäsairaus, jonka aiheuttaa korkea verensokeri. Korkea verensokeritaso saa verkkokalvon verisuonet turpoamaan, mikä johtaa verisuonten laajentumiseen ja jopa suonivuotoihin, mikä johtaa tummiin pisteisiin verkkokalvon kuvissa. Tällä koodilla pyrimme käyttämään verisuonten vuotokohtien ilmaisua taustalla olevasta diabeettisesta retinopatiasta, vaikka todellisessa maailmassa tarvittaisiin lisädiagnostiikkatekniikoita. Tämän koodin tavoitteena on automatisoida verkkokalvon kuvien käsittely ja diagnosointi tunnistaakseen diabeettisen retinopatian merkit verkkokalvon kuvien tummien pisteiden kautta.

10 normaalia verkkokalvon kuvaa ja 10 diagnosoitua verkkokalvon kuvaa käsiteltiin koodilla, joka ensin lukee ja suodattaa kuvat ja sitten kvantifioi tummat täplät sen määrittämiseksi, onko diabeettisen retinopatian oireita läsnä tietyn kynnyksen perusteella. Tulokset tulostetaan sitten komentoikkunaan katsojan tulkintaa varten.

Vaihe 1: Edellytykset

Edellytykset
Edellytykset

1. Varmista, että MATLAB -ohjelma on ladattu tietokoneellesi.

2. Lataa linkistä löytyvä txt -tiedosto. (Paina”ctrl+s” tallentaaksesi samaan hakemistoon kuin MATLAB -koodi)

Vaihe 2: Edellytykset (jatkoa)

Edellytykset (ei)
Edellytykset (ei)
Edellytykset (ei)
Edellytykset (ei)

4. Avaa MATLAB ja kirjoita komentoikkunaan uiimport.

5. Valitse Officialdiagnoses.txt -tiedosto ja tuo se MATLABiin solumatriisina.

6. Varmista, että näet "viralliset diagnoosit" muuttujana työtilassa.

Vaihe 3: Edellytykset (jatkoa)

Edellytykset (ei)
Edellytykset (ei)

7. Lataa toiminto ModWald.m, joka voi hakea yllä olevasta koodista tai ladata sen Canvasilta.

(Koodi: professori King ja professori Choi)

Vaihe 4: Edellytykset (jatkoa)

Edellytykset (ei)
Edellytykset (ei)

8. Lataa 400 raakakuvaa STARE -projektin dataosasta.

Vaihe 5: Puhdista Matlab valmistautuaksesi koodin suorittamiseen

Puhdista Matlab valmistautuaksesi käynnissä olevaan koodiin
Puhdista Matlab valmistautuaksesi käynnissä olevaan koodiin

Lisää koodiin:

1. sulje kaikki (Sulkee kaikki aiemmin avatut kuvat)

2. clearvars - paitsi viralliset diagnoosit (Poistaa kaikki muuttujat paitsi aiemmin tuodun virallisen diagnoosin txt -tiedoston)

3. cclc (tyhjentää komentoikkunan)

Vaihe 6: Valitse 10 normaalia silmäkuvaa ja 10 kuvaa, joilla on diabeettisen retinopatian oireita

Valitse 10 normaalia silmäkuvaa ja 10 kuvaa, joilla on diabeettisen retinopatian oireita
Valitse 10 normaalia silmäkuvaa ja 10 kuvaa, joilla on diabeettisen retinopatian oireita
Valitse 10 normaalia silmäkuvaa ja 10 kuvaa, joilla on diabeettisen retinopatian oireita
Valitse 10 normaalia silmäkuvaa ja 10 kuvaa, joilla on diabeettisen retinopatian oireita

1. Ota diagnoositekstitiedosto ja poimi kuvien nimet. Nämä nimet ovat tekstitiedoston ensimmäisessä sarakkeessa, jotta ne voidaan purkaa kirjoittamalla 'officialdiagnoses (:, 1)'. Kuvanimien matriisi määritettiin muuttujalle "all_image_numbers"

2. Muunna muuttuja all_image_numbers soluryhmästä matriisimatriisiksi käyttämällä cell2mat -funktiota

Vaihe 7: Valitse 10 normaalia silmäkuvaa ja 10 kuvaa, joilla on diabeettisen retinopatian oireita (ei)

Valitse 10 normaalia silmäkuvaa ja 10 kuvaa, joilla on diabeettisen retinopatian oireita (ei)
Valitse 10 normaalia silmäkuvaa ja 10 kuvaa, joilla on diabeettisen retinopatian oireita (ei)
Valitse 10 normaalia silmäkuvaa ja 10 kuvaa, joilla on diabeettisen retinopatian oireita (ei)
Valitse 10 normaalia silmäkuvaa ja 10 kuvaa, joilla on diabeettisen retinopatian oireita (ei)

3. Valitse 10 normaalia silmäkuvaa koodin suorittamiseksi. Tässä tapauksessa valitut kuvat olivat 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.

Aseta nämä numerot matriisiin ja määritä ne muuttujalle, jota kutsutaan kuvien lataamisen yhteydessä.

4. Toista vaihe 3 verkkokalvon kuville, joilla on diagnosoitu diabeettinen retinopatia. Tässä tapauksessa valitut kuvat olivat 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.

Vaihe 8: Luo 2 muuttujaa (normaali ja diagnosoitu) ja aseta ne yhtä arvoksi 0

Luo 2 muuttujaa (normaali ja diagnosoitu) ja aseta ne yhtä suureksi 0
Luo 2 muuttujaa (normaali ja diagnosoitu) ja aseta ne yhtä suureksi 0

Luo nämä muuttujat ennen for -silmukkaa alustaaksesi silmukan numerot.

Vaihe 9: Luo silmukka normaalien kuvien automaattiseen lataamiseen

Luo silmukka normaalien kuvien automaattiseen lataamiseen
Luo silmukka normaalien kuvien automaattiseen lataamiseen

1. Luo for -silmukka

2. Aseta laskentamuuttuja (tässä tapauksessa i) arvomatriisiin 1-10. Tätä laskentamuuttujaa käytetään kutsumaan jokainen kuva erikseen

3. Ota i -elementti kuvien matriisista poimiaksesi ja muuntaaksesi kuvan nimen merkkijonosta numeroksi käyttämällä num2str -funktiota.

Etsi kuvan nimessä olevien numeroiden määrä numerotoiminnon avulla. Määritä tämä arvo muuttujalle, numeroa_normaali. Tämän numeron tulisi olla 1 yksinumeroisille numeroille, 2 kaksinumeroisille numeroille ja 3 kolminumeroisille numeroille. Näitä tietoja käytetään kuvien automaattiseen soittamiseen.

Vaihe 10: Luo silmukka normaalien kuvien automaattiseen lataamiseen (jatkoa)

Luo silmukka normaalien kuvien automaattista lataamista varten (ei voi)
Luo silmukka normaalien kuvien automaattista lataamista varten (ei voi)

3. Luo if -lause, joka sisältää kaikki kolme vaihtoehtoa edellisistä vaiheista. Jos kuvan nimessä on 1 -numeroinen, kuvan nimi on “im000”, jos siinä on 2 numeroa, kuvan nimi on “im00”, ja jos siinä on 3, sen nimi on “im0”.

4. Määritä jokaisen if -lauseen alle muuttuja imreadille "im" vastaavan if -lauseen alla, jossa on sopiva määrä nollia (kuten edellä on kuvattu), ja sen jälkeen i.

Vaihe 11: Rajaa kuvan reunat

Rajaa kuvan reunat
Rajaa kuvan reunat

Ota alkuperäinen kuva ja käytä imcrop -suodatinta mustien reunojen poistamiseksi ja määritä muuttuja I_crop. Rajausneliö määritetään käyttämällä matriisia [95, 95, 500, 410].

Vaihe 12: Luo harmaasävyinen kuva

Luo harmaasävyinen kuva
Luo harmaasävyinen kuva

Ota rajattu kuva ja käytä harmaasävyistä rbg2harmaa suodatinta. Määritä tämä kuva muuttujalle I2.

Vaihe 13: Luo kontrastikuva

Luo kontrastikuva
Luo kontrastikuva

Ota kuva I2 ja käytä imadjust skaalataksesi intensiteetin arvoja.

Ota arvot, jotka kuuluvat alueelle [0,2, 0,7] ja skaalaa ne [0, 1]. Gamma on asetettu arvoon 0,8, jotta kuva olisi kirkkaampi. Määritä uusi kuva I_adjusted.

Vaihe 14: Paranna kontrastikuvaa

Paranna kontrastikuvaa
Paranna kontrastikuvaa

Ota I_adjusted -kuva ja lisää adapthisteq -toimintoa kontrastin parantamiseksi.

Adapthisteq -syntaksi vaatii kuvan nimen, I_adjusted, "numTiles", numTiles -koon, "nBins" ja lokeroiden määrän. NumTiles -koon asetukseksi on määritetty [8 8], jolloin kuva jaetaan 8x8 ruutuun ja lokeroiden lukumääräksi asetetaan 28. Määritä kuva I_constrastille.

Vaihe 15: Luo keskimääräinen suodatin

Luo keskimääräinen suodatin
Luo keskimääräinen suodatin

Luo muuttuja nimeltä 'meanfilt' käyttämällä fspecial -funktiota. Syötä keskimääräinen toiminto luodaksesi keskiarvosuodattimen ja liitä [90 90] liukuikkunan koolle.

Vaihe 16: Yhdistä keskiarvosuodatin kontrastikuviin

Yhdistä keskiarvosuodatin kontrastikuviin
Yhdistä keskiarvosuodatin kontrastikuviin

Luo uusi muuttuja nimeltä mask_mean ja ota imfilter -funktiolla I_contrast -kuva ja ota käyttöön aiemmin luotu keskisuodatin.

Vaihe 17: Tee uusi keskinaamio vähentämällä pikseliä

Tee uusi keskinaamio vähentämällä pikseliä
Tee uusi keskinaamio vähentämällä pikseliä

Luo muuttuja nimeltä mask_mean2 ja käytä imsubtract -funktiota vähentämään jokaisen I_contrast -pikselin arvon mask_mean vastaavasta pikselistä.

Vaihe 18: Luo binäärisuodatettu kuva

Luo binäärisuodatettu kuva
Luo binäärisuodatettu kuva

Muuta harmaasävyiset kuvat mustavalkoisiksi käyttämällä yhdistämistä. Input mask_mean2, 'adaptiivinen', 'ForegroundPolarity', 'dark', 'Sensitivity', 0.6. Määritä tämä uusi kuva mask_binarize.

Vaihe 19: Poista suodatetuista kuvista löytyneet pienemmät läiskät

Poista suodatetuista kuvista löytyneet pienemmät läiskät
Poista suodatetuista kuvista löytyneet pienemmät läiskät

Poista objektit, joiden yhteydet ovat alle 100 pikseliä mask_binarize -bwareaopen -toiminnolla ja aseta kynnysarvoksi 100. Määritä muuttuja bw: ksi.

Vaihe 20: Luo levyn rakenneosa

Luo levyn rakenneosa
Luo levyn rakenneosa

Luo levyn rakenteellinen elementti (säde 2) käyttämällä strel -toimintoa. Määritä se.

Vaihe 21: Suorita morfologiset sulkutoiminnot

Suorita morfologiset sulkutoiminnot
Suorita morfologiset sulkutoiminnot

Ota bw ja käytä liittämisfunktiota rakenne -elementtiin suorittaaksesi morfologisen lähitoiminnon objektille.

Vaihe 22: Etsi kohteet, joissa on yhteys vähintään 8

Etsi kohteita, joissa on yhteys, vähintään 8
Etsi kohteita, joissa on yhteys, vähintään 8

Ota bw ja käytä bwconncomp löytääksesi kohteet, joiden yhteys on vähintään 8 kuvassa. Määritä numerolähtö cc_1.

Vaihe 23: Etsi yhdistettyjen pikselien enimmäismäärä

Etsi yhdistettyjen pikselien enimmäismäärä
Etsi yhdistettyjen pikselien enimmäismäärä
Etsi yhdistettyjen pikselien enimmäismäärä
Etsi yhdistettyjen pikselien enimmäismäärä

Käytä cellfun -toimintoa suorittamaan toiminto "numel" jokaisessa CC: n solussa. Tämä löytää PixelIdxList -solun elementtien määrän. Määritä arvo “numPixels”.

Etsi enimmäisarvot numPIxels. Määritä suurin maksimi arvoksi "suurin" ja enimmäisarvon indeksi arvoon "idx".

Vaihe 24: Aseta pikselien enimmäisarvot 0: ksi ja etsi pikselit, joissa on> = 26 pikseliyhteyttä

Poista verisuonet kuvasta
Poista verisuonet kuvasta

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

Kuvanäyttö
Kuvanäyttö

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

Poista alukset ja laske verimunat
Poista alukset ja laske verimunat

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

Diagnoosi verkkokalvon kuva tunnistettujen verihyytymien määrän perusteella
Diagnoosi verkkokalvon kuva tunnistettujen verihyytymien määrän perusteella

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

Aseta pikselit, joilla on suurimmat arvot kuvassa "bw", arvoksi 0, jolloin pikselit ovat mustia.

Etsi bwconncomp -ohjelmalla objektit, joiden yhteys on vähintään 26 pikseliä. Määritä muuttujaan cc_1.

Vaihe 25: Poista verisuonet kuvasta

Poista kuvassa edelleen olevat verisuonet käyttämällä bwpropfilt -toimintoa [0, 0,9].

[0,9, 1] suljetaan pois, koska lähellä 1 olevat arvot osoittavat viivan. Määritä "RemoveVessels".

Vaihe 26: Kuvanäyttö

Näytä jokainen suodatettu kuva osajoukossa. Imshow. "reunus" - ja "tiukka" -tulolla, näyttää jokaisen kuvan osakaaviorakenteessa. Lisää otsikko kuhunkin kuvaan erottaaksesi mitä suodatinta käytettiin.

Vaihe 27: Poista alukset ja laske verimunat

1. Ota “RemoveVessels” ja käytä”Centroid” -ominaisuutta aluepropsissa tunnistamaan kuvassa olevien objektien keskipisteet. Näiden esineiden tulisi vastata kuvassa olevia verihyytymiä.

2. Laske tunnistettujen verihyytymien määrä ottamalla sentroidimatriisin pituus.

Vaihe 28: Diagnoosi verkkokalvon kuva tunnistettujen verihyytymien määrän perusteella

Käytä, jos lausunnot diagnosoivat kuvan tunnistettujen verihyytymien määrän perusteella.

Jos tunnistettujen keskushermojen määrä oli pienempi tai yhtä suuri kuin 5, kuva tunnistettiin normaaliksi.

Jos keskushermojen lukumäärä oli suurempi kuin 5, kuvassa todettiin diabeettinen retinopatia.

Tulos tulostetaan komentoikkunaan käyttämällä fprintf -tiedostoa.

Vaihe 29: Jos on enemmän kuin 5 möykkyä…

Jos on enemmän kuin 5 möykkyä…
Jos on enemmän kuin 5 möykkyä…

Toista yllä olevat ohjeet diagnosoiduille kuville muutoin. Tämä osa suoritetaan, jos läiskien määrä on yli 5.

Lopeta if -lause.

Vaihe 30: Toista suodatusprosessi normaaleille kuville, joiden kuvanumerot ovat 2 ja 3

Toista suodatusprosessi normaaleille kuville, joiden kuvanumerot ovat 2 ja 3
Toista suodatusprosessi normaaleille kuville, joiden kuvanumerot ovat 2 ja 3
Toista suodatusprosessi normaaleille kuville, joiden kuvanumerot ovat 2 ja 3
Toista suodatusprosessi normaaleille kuville, joiden kuvanumerot ovat 2 ja 3

Toista prosessi jäljellä olevan alkuperäisen osalta, jos lausekkeet, kun numel (kuvien numeroiden lukumäärä) on yhtä kuin 2 ja 3. Tämä täydentää normaalin kuvan for -silmukan.

Lopeta for -silmukka.

Vaihe 31: Toista koko prosessi diagnosoiduille kuville

Toista koko prosessi diagnosoiduille kuville
Toista koko prosessi diagnosoiduille kuville

Toista koko prosessi käyttämällä diagnosoituja kuvia, jotka on lueteltu matriisissa "luvut_ekstrakti_diagnosoitu".

Muista käydä jokainen luku (i) läpi ja muuttaa se kuvaksi (i+10), jotta diagnosoidut luvut näkyvät kuvina 11-20.

Vaihe 32: Tilastollinen analyysi

Tilastollinen analyysi
Tilastollinen analyysi

1. 'Actual_Diagnosis_Matrix' -arvoa käytetään tulosten vertaamiseen txt -tiedostossa olevaan viralliseen diagnoosiin. Ensimmäiset 10 nollaa osoittavat, että kymmenen ensimmäisen kuvan pitäisi olla normaaleja. Viimeiset 10 kuvaa, että viimeiset 10 kuvaa on luokiteltava diabeettiseksi retinopatiaksi.

2. Kaksinkertainen yhtäläisyysmerkki, jota käytetään numeron_korjauksen luomiseen, luo loogisen taulukon vertaamalla kohdan Actual_Diagnosis_Matrix vastaavien elementtien arvoa for -silmukasta luotuun Diagnosis_Matrix -arvoon.

Jokaiselle diagnoosia vastaavalle elementille lisätään 1, mikä tarkoittaa, että koodi diagnosoi kuvan oikein. Jos se on väärä, se lisää matriisiin 0.

Tämän summan laskeminen lisää sitten kaikki. Toisin sanoen se löytää oikein diagnosoitujen kuvien summan.

3. 'Final_percentage_correct' on laskettu prosenttiosuus siitä, kuinka tarkasti koodi diagnosoi diabeettisen retinopatian. Oikein diagnosoitujen kuvien lukumäärä jaetaan 20: llä (kuvien kokonaismäärä) ja kerrotaan 100: lla, jotta löydetään onnistuneiden diagnoosien prosenttiosuus.

Vaihe 33: Luottamusvälin etsiminen

Luottamusvälin löytäminen
Luottamusvälin löytäminen

1. Varmista, että olet ladannut ModWald.m -sovelluksen, jotta voit kutsua sitä toimintoksi. Ilman toimintoa sinun on laskettava luottamusväli itse muokatulla Wald -menetelmällä.

2. ModWald -toiminnossa on 2 tuloa, joista ensimmäinen on oikein tunnistettujen kuvien määrä ja toinen kuvien kokonaismäärä.

3. ModWald -toiminto antaa otosten datan tarkkuuden vuoksi mittasuhteiden luottamusvälin ala- ja ylärajat. Toisin sanoen, annat prosenttiosuuden, jossa todellinen prosenttiosuus koodin tarkkuudesta on.

4. Käytä alla olevaa fprintf -toimintoa tilastojen ja luottamusvälien tulostamiseen komentoikkunaan.

> fprintf ('%. 0f prosenttia verkkokalvon kuvista diagnosoitiin oikein virallisen diagnoosin mukaan. / n / n', Final_percentage_crerect)

> fprintf ('Todellinen prosenttiosuus, jolla koodimme diagnosoi diabeettisen retinopatian oikein, / n on alueella [%.3f, %.3f] 20 näytteen otetun kuvan perusteella / n', alempi_raja, yläraja)

Suositeltava: