Sisällysluettelo:
- Vaihe 1: Edellytykset
- Vaihe 2: Edellytykset (jatkoa)
- Vaihe 3: Edellytykset (jatkoa)
- Vaihe 4: Edellytykset (jatkoa)
- Vaihe 5: Puhdista Matlab valmistautuaksesi koodin suorittamiseen
- Vaihe 6: Valitse 10 normaalia silmäkuvaa ja 10 kuvaa, joilla on diabeettisen retinopatian oireita
- Vaihe 7: Valitse 10 normaalia silmäkuvaa ja 10 kuvaa, joilla on diabeettisen retinopatian oireita (ei)
- Vaihe 8: Luo 2 muuttujaa (normaali ja diagnosoitu) ja aseta ne yhtä arvoksi 0
- Vaihe 9: Luo silmukka normaalien kuvien automaattiseen lataamiseen
- Vaihe 10: Luo silmukka normaalien kuvien automaattiseen lataamiseen (jatkoa)
- Vaihe 11: Rajaa kuvan reunat
- Vaihe 12: Luo harmaasävyinen kuva
- Vaihe 13: Luo kontrastikuva
- Vaihe 14: Paranna kontrastikuvaa
- Vaihe 15: Luo keskimääräinen suodatin
- Vaihe 16: Yhdistä keskiarvosuodatin kontrastikuviin
- Vaihe 17: Tee uusi keskinaamio vähentämällä pikseliä
- Vaihe 18: Luo binäärisuodatettu kuva
- Vaihe 19: Poista suodatetuista kuvista löytyneet pienemmät läiskät
- Vaihe 20: Luo levyn rakenneosa
- Vaihe 21: Suorita morfologiset sulkutoiminnot
- Vaihe 22: Etsi kohteet, joissa on yhteys vähintään 8
- Vaihe 23: Etsi yhdistettyjen pikselien enimmäismäärä
- Vaihe 24: Aseta pikselien enimmäisarvot 0: ksi ja etsi pikselit, joissa on> = 26 pikseliyhteyttä
- Vaihe 25: Poista verisuonet kuvasta
- Vaihe 26: Kuvanäyttö
- Vaihe 27: Poista alukset ja laske verimunat
- Vaihe 28: Diagnoosi verkkokalvon kuva tunnistettujen verihyytymien määrän perusteella
- Vaihe 29: Jos on enemmän kuin 5 möykkyä…
- Vaihe 30: Toista suodatusprosessi normaaleille kuville, joiden kuvanumerot ovat 2 ja 3
- Vaihe 31: Toista koko prosessi diagnosoiduille kuville
- Vaihe 32: Tilastollinen analyysi
- Vaihe 33: Luottamusvälin etsiminen
Video: Diabeettisen retinopatian automaattinen diagnoosi MATLABin kautta: 33 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
(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
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)
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)
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)
8. Lataa 400 raakakuvaa STARE -projektin dataosasta.
Vaihe 5: Puhdista Matlab valmistautuaksesi koodin suorittamiseen
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
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)
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 nämä muuttujat ennen for -silmukkaa alustaaksesi silmukan numerot.
Vaihe 9: 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)
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
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
Ota rajattu kuva ja käytä harmaasävyistä rbg2harmaa suodatinta. Määritä tämä kuva muuttujalle I2.
Vaihe 13: 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
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 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
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ä
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
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 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 rakenteellinen elementti (säde 2) käyttämällä strel -toimintoa. Määritä se.
Vaihe 21: 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
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ä
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ä
= 26 Pixel Connectivity "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 Pixel Connectivity "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 pikseliliitäntää "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
= 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ä…
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 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 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
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
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:
Pysäköintiavustin Helppo korjaus / diagnoosi: 4 vaihetta
Pysäköintitutkan helppo korjaus / diagnoosi: Ok, päästään alkuun, minulla on vuoden 2010 Chevrolet Avalanche ja sen takapuskurissa on 4 pysäköintitutkaa. Tätä hankalaa voidaan parhaan tietoni mukaan käyttää ja käyttää ajoneuvossa, säällä, edessä tai Realla tai molemmilla. Joten menin suosikkiini
Kiintolevyt: Diagnoosi, vianmääritys ja huolto: 3 vaihetta
Kiintolevyt: Diagnoosi, vianmääritys ja huolto: Mikä on kiintolevy?- Yksinkertaisesti sanottuna kiintolevy tallentaa kaikki tiedot. Se sisältää kiintolevyn, jossa kaikki tiedostot ja kansiot sijaitsevat fyysisesti. Tiedot tallennetaan magneettisesti levylle, joten ne pysyvät asemalla, vaikka
Ohjaa laitteita Internetin kautta selaimen kautta. (IoT): 6 vaihetta
Ohjaa laitteita Internetin kautta selaimen kautta. (IoT): Tässä ohjeessa näytän sinulle, kuinka voit ohjata laitteita, kuten LED-valoja, releitä, moottoreita jne. Internetin kautta verkkoselaimen kautta. Ja voit käyttää ohjaimia turvallisesti millä tahansa laitteella. Tässä käyttämäni verkkoalusta on RemoteMe.org -vierailu
Koti -automaatio: Automaattinen kytkinkortti himmentimen ohjauksella Bluetoothin kautta Tiva TM4C123G: n avulla: 7 vaihetta
Koti -automatiikka: Automaattinen kytkinkortti himmentimellä Bluetoothin kautta Tiva TM4C123G: n avulla: Nykyään meillä on televisiovastaanottimien ja muiden elektronisten järjestelmien kauko -ohjaimet, jotka ovat tehneet elämästämme todella helppoa. Oletko koskaan miettinyt kodin automaatiota, joka antaisi mahdollisuuden ohjata putkivaloja, tuulettimia ja muita sähkölaitteita
Tiedostojen siirtäminen lähiverkon kautta BitTorrentin kautta: 6 vaihetta
Tiedostojen siirtäminen lähiverkon kautta BitTorrentin kautta: Joskus sinun on ehkä siirrettävä tiedostoja verkon kautta useille tietokoneille. Vaikka voit laittaa sen flash -asemaan tai CD/DVD -levylle, sinun on mentävä jokaiseen tietokoneeseen kopioimalla tiedostot, ja kaikkien tiedostojen kopioiminen voi viedä hetken (etenkin f