INHOUDSOPGAWE:

Outomatiese diagnose van diabetiese retinopatie via MATLAB: 33 stappe
Outomatiese diagnose van diabetiese retinopatie via MATLAB: 33 stappe

Video: Outomatiese diagnose van diabetiese retinopatie via MATLAB: 33 stappe

Video: Outomatiese diagnose van diabetiese retinopatie via MATLAB: 33 stappe
Video: 1000+ Common Arabic Words with Pronunciation · Арабские слова 2024, November
Anonim
Outomatiese diagnose van diabetiese retinopatie via MATLAB
Outomatiese diagnose van diabetiese retinopatie via MATLAB
Outomatiese diagnose van diabetiese retinopatie via MATLAB
Outomatiese diagnose van diabetiese retinopatie via MATLAB

(Sien kode uiteensetting hierbo)

Diabetiese retinopatie is 'n diabetesverwante oogsiekte wat veroorsaak word deur hoë bloedsuikervlakke. Die hoë bloedsuikervlakke veroorsaak dat die bloedvate in die retina swel, wat lei tot vergrote bloedvate en selfs vate lek, wat lei tot donker kolle in retinale beelde. Met hierdie kode poog ons om die voorkoms van lekvate van bloedvate te gebruik as 'n aanduiding van diabetiese retinopatie in die agtergrond, hoewel verdere diagnosetegnieke in die werklike wêreld nodig sou wees. Die doel van hierdie kode is om beeldverwerking en diagnose van retinale beelde te outomatiseer om tekens van diabetiese retinopatie te identifiseer wat deur donker kolle op die retinale beelde getoon word.

10 normale retinale beelde en 10 gediagnoseerde retinale beelde is verwerk deur middel van 'n kode wat eers die beelde lees en filtreer en dan die donker kolle kwantifiseer om te bepaal of diabetiese retinopatie simptome voorkom, gebaseer op 'n gegewe drempel. Die resultate word dan op die opdragvenster gedruk om die kyker te interpreteer.

Stap 1: Voorvereistes

Voorvereistes
Voorvereistes

1. Maak seker dat u die MATLAB -program op u rekenaar afgelaai het.

2. Laai die txt -lêer af wat in die skakel gevind word. (Druk 'ctrl+s' om in dieselfde gids as die MATLAB -kode te stoor)

Stap 2: Voorvereistes (vervolg)

Voorvereistes (vervolg)
Voorvereistes (vervolg)
Voorvereistes (vervolg)
Voorvereistes (vervolg)

4. Maak MATLAB oop en tik 'uiimport' in die opdragvenster.

5. Kies die officialdiagnoses.txt -lêer en voer dit as 'n selmatriks in MATLAB in.

6. Maak seker dat u 'amptelike diagnoses' as 'n veranderlike in die werkruimte sien.

Stap 3: Voorvereistes (vervolg)

Voorvereistes (vervolg)
Voorvereistes (vervolg)

7. Laai die funksie ModWald.m af, wat verkry kan word uit die kode hierbo of aflaai van Canvas.

(Kode verskaf deur professor King en professor Choi)

Stap 4: Voorvereistes (vervolg)

Voorvereistes (vervolg)
Voorvereistes (vervolg)

8. Laai die 400 rou beelde af uit die data -afdeling van The STARE Project.

Stap 5: Maak Matlab skoon om voor te berei vir die gebruikskode

Maak Matlab skoon om voor te berei vir die gebruikskode
Maak Matlab skoon om voor te berei vir die gebruikskode

Voeg by kode:

1. sluit alles (sluit alle voorheen geopende beelde)

2. clearvars - behalwe amptelike diagnoses (Maak alle veranderlikes skoon behalwe die txt -lêer wat voorheen ingevoer is)

3. cclc (Maak opdragvenster skoon)

Stap 6: Kies 10 normale oogbeelde en 10 beelde met diabetiese retinopatie -simptome

Kies 10 normale oogbeelde en 10 beelde met simptome van diabetiese retinopatie
Kies 10 normale oogbeelde en 10 beelde met simptome van diabetiese retinopatie
Kies 10 normale oogbeelde en 10 beelde met simptome van diabetiese retinopatie
Kies 10 normale oogbeelde en 10 beelde met simptome van diabetiese retinopatie

1. Neem die diagnose -lêer en haal die prentname uit. Hierdie name is vervat in die eerste kolom van die tekslêer, om dit te onttrek, tik 'officialdiagnoses (:, 1)'. Die matriks van beeldname is toegeken aan 'n veranderlike, "all_image_numbers"

2. Skakel die all_image_numbers veranderlike om van 'n selreeks na 'n matriksreeks met behulp van die cell2mat -funksie

Stap 7: Kies 10 normale oogbeelde en 10 beelde met diabetiese retinopatie -simptome (vervolg)

Kies 10 normale oogbeelde en 10 beelde met simptome van diabetiese retinopatie (vervolg)
Kies 10 normale oogbeelde en 10 beelde met simptome van diabetiese retinopatie (vervolg)
Kies 10 normale oogbeelde en 10 beelde met simptome van diabetiese retinopatie (vervolg)
Kies 10 normale oogbeelde en 10 beelde met simptome van diabetiese retinopatie (vervolg)

3. Kies 10 normale oogbeelde om die kode uit te voer. Die beelde wat in hierdie geval gekies is, was 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.

Plaas hierdie getalle in 'n matriks en ken dit toe aan 'n veranderlike wat genoem sal word wanneer die beelde gelaai word.

4. Herhaal stap 3 vir retinale beelde wat by diabetiese retinopatie gediagnoseer is. Die beelde wat in hierdie geval gekies is, was 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.

Stap 8: Skep 2 veranderlikes (normaal en gediagnoseer) en stel elkeen gelyk aan 0

Skep 2 veranderlikes (normaal en gediagnoseer) en stel elkeen gelyk aan 0
Skep 2 veranderlikes (normaal en gediagnoseer) en stel elkeen gelyk aan 0

Skep hierdie veranderlikes voor die for -lus om die lusgetalle te initialiseer.

Stap 9: Skep 'n for Loop om normale beelde outomaties op te laai

Skep 'n for Loop om normale beelde outomaties op te laai
Skep 'n for Loop om normale beelde outomaties op te laai

1. Skep 'n for -lus

2. Stel 'n telveranderlike (i, in hierdie geval) op 'n matriks van waardes 1-10. Hierdie tel veranderlike sal gebruik word om elke prent individueel te noem

3. Neem die i -element in die matriks van beelde om die prentnaam van 'n string na 'n getal te onttrek en om te skakel met die funksie num2str.

Soek die aantal syfers in die beeldnaam met behulp van die getalfunksie. Ken hierdie waarde toe aan 'n veranderlike, digits_normal. Hierdie getal moet 1 wees vir enkelsyfergetalle, 2 vir dubbelsyfergetalle en 3 vir driesyfergetalle. Hierdie inligting sal gebruik word om prente outomaties te bel.

Stap 10: Skep 'n for Loop om normale beelde outomaties op te laai (vervolg)

Skep 'n for Loop om outomaties normale beelde op te laai (vervolg)
Skep 'n for Loop om outomaties normale beelde op te laai (vervolg)

3. Skep 'n if -verklaring wat al drie moontlikhede uit die vorige stappe bevat. As die prentnaam 1 syfer het, word die beeld “im000” genoem, as dit 2 syfers het, word die beeld “im00” genoem, en as dit drie het, word die beeld “im0” genoem.

4. Wys onder elke if -stelling 'n veranderlike aan om "im" in te lees onder die ooreenstemmende, if -stelling met die gepaste aantal nulle (soos hierbo beskryf), gevolg deur die i.

Stap 11: Sny die rande van die beeld af

Sny die rande van die beeld
Sny die rande van die beeld

Neem die oorspronklike prent en pas 'n imcrop -filter toe om swart rande uit te skakel en ken 'n veranderlike I_crop toe. Die gewasreghoek word gespesifiseer met behulp van 'n matriks [95, 95, 500, 410].

Stap 12: Skep 'n grysskaalbeeld

Skep 'n grysskaalbeeld
Skep 'n grysskaalbeeld

Neem die afgesnyde prent en pas die rbg2gray -filter toe om die prentjie in grysskaal te verander. Ken hierdie prent toe aan veranderlike I2.

Stap 13: Skep 'n kontrasterende beeld

Skep 'n kontrasterende prent
Skep 'n kontrasterende prent

Neem die beeld I2 en gebruik imadjust om die intensiteitswaardes te herskaal.

Neem waardes wat binne die reeks [0,2, 0,7] val en verander dit na 'n [0, 1]. Die gamma is op 0,8 gestel om die beeld helderder te maak. Ken die nuwe beeld toe aan I_adjusted.

Stap 14: Verbeter die kontrasbeeld

Verbeter die kontrasbeeld
Verbeter die kontrasbeeld

Neem die I_aangepaste beeld en gebruik die adapthisteq -funksie om die kontras te verbeter.

Die Adapthisteq -sintaksis vereis die beeldnaam, I_adjusted, 'numTiles', die grootte van numTiles, 'nBins' en die aantal asblikke. Die grootte van numTiles is ingestel op [8 8], die beeld verdeel in 8x8 teëls en die aantal asblikke is ingestel op 28. Ken die prent aan I_constrast toe.

Stap 15: Skep 'n gemiddelde filter

Skep 'n gemiddelde filter
Skep 'n gemiddelde filter

Skep 'n veranderlike met die naam 'meanfilt' met behulp van die fspecial -funksie. Voer 'gemiddelde funksie' in om die gemiddelde filter te skep en voeg [90 90] in vir die grootte van die skuifvenster.

Stap 16: Kombineer die gemiddelde filter met die kontrasteerde prent

Kombineer die gemiddelde filter met die kontrasteerde beeld
Kombineer die gemiddelde filter met die kontrasteerde beeld

Skep 'n nuwe veranderlike met die naam mask_mean en gebruik die imfilter -funksie om die I_contrast -prent te neem en die gemiddelde filter wat voorheen geskep is, toe te pas.

Stap 17: Maak 'n nuwe gemiddelde masker deur pixels af te trek

Maak 'n nuwe gemiddelde masker deur pixels af te trek
Maak 'n nuwe gemiddelde masker deur pixels af te trek

Skep 'n veranderlike met die naam mask_mean2 en gebruik die imsubtract -funksie om die waarde van elke pixel in I_contrast af te trek van die ooreenstemmende pixel in mask_mean.

Stap 18: Skep 'n binêre gefiltreerde prent

Skep 'n binêre gefiltreerde prent
Skep 'n binêre gefiltreerde prent

Draai beelde van grysskaal na swart en wit met behulp van imbinarize. Invoer mask_mean2, 'aanpasbaar', 'Voorgrondpolariteit', 'donker', 'Gevoeligheid', 0.6. Ken hierdie nuwe prent toe aan mask_binarize.

Stap 19: Verwyder kleiner blobs wat in die gefiltreerde beelde voorkom

Verwyder kleiner blobs wat in die gefiltreerde beelde voorkom
Verwyder kleiner blobs wat in die gefiltreerde beelde voorkom

Verwyder voorwerpe met minder as 100 pixels met behulp van die bwareaopen -funksie op die mask_binarize en stel die drempelwaarde op 100. Ken die veranderlike as bw toe.

Stap 20: Skep 'n skyfstruktuurelement

Skep 'n skyfstruktuurelement
Skep 'n skyfstruktuurelement

Skep 'n skyfstruktuurelement (met 'n radius van 2) met behulp van die strel -funksie. Gee dit aan se.

Stap 21: Voer morfologiese sluitbewerkings uit

Voer morfologiese sluitbewerkings uit
Voer morfologiese sluitbewerkings uit

Neem bw en pas die imclose -funksie toe op die strukturele element om 'n morfologiese nabywerking op die voorwerp uit te voer.

Stap 22: vind die voorwerpe met aansluitings van ten minste 8

Vind die voorwerpe met verbinding van minstens 8
Vind die voorwerpe met verbinding van minstens 8

Neem bw en gebruik bwconncomp om die voorwerpe met 'n verbinding van minstens 8 in die prent te vind. Gee die getaluitset aan cc_1.

Stap 23: Vind die maksimum aantal gekoppelde pixels

Vind die maksimum aantal gekoppelde pixels
Vind die maksimum aantal gekoppelde pixels
Vind die maksimum aantal gekoppelde pixels
Vind die maksimum aantal gekoppelde pixels

Gebruik die cellfun -funksie om die funksie "numel" op elke sel in CC uit te voer. Dit vind die aantal elemente in die PixelIdxList -sel. Ken waarde toe aan “numPixels”.

Vind die maksimum waardes in numPIxels. Ken die grootste maksimum toe aan "grootste" en die indeks van die maksimum waarde aan "idx".

Stap 24: Stel die maksimum pixelwaardes op 0 en vind pixels met> = 26 pixelverbindings

Verwyder bloedvate in die prentjie
Verwyder bloedvate in die prentjie

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

Figuur vertoon
Figuur vertoon

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

Verwyder vate en tel bloedblasies
Verwyder vate en tel bloedblasies

= 26 Pixel -verbinding "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">

Diagnoseer die retinale beeld op grond van die aantal geïdentifiseerde bloedklonte
Diagnoseer die retinale beeld op grond van die aantal geïdentifiseerde bloedklonte

= 26 Pixel -verbinding "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">

Stel die pixels met die grootste waardes in die beeld "bw" op 0, maak die pixels swart.

Soek die voorwerpe met 'n verbinding van ten minste 26 pixels in die prent met behulp van bwconncomp. Wys aan veranderlike cc_1.

Stap 25: Verwyder bloedvate in die prentjie

Verwyder die bloedvate wat nog in die prentjie voorkom met behulp van die bwpropfilt -funksie met 'n reeks [0, 0.9].

[0.9, 1] is uitgesluit omdat waardes naby 1 'n lyn aandui. Ken toe aan “RemoveVessels”.

Stap 26: Figuurvertoning

Vertoon elke gefiltreerde prent in 'n subplot. Imshow. met 'rand' en 'stywe' insette, vertoon elke beeld in 'n subplotstruktuur. Voeg 'n titel by elke prent om te onderskei watter filter gebruik is.

Stap 27: Verwyder vate en tel bloedblasies

1. Neem 'RemoveVessels' en pas die 'Centroid' -funksie toe in regionprops om die sentroïede van die voorwerpe in die prent te identifiseer. Hierdie voorwerpe moet ooreenstem met bloedklonte in die prentjie.

2. Tel die aantal bloedklonte wat geïdentifiseer is deur die lengte van die sentroïedmatriks te neem.

Stap 28: Diagnoseer die retinale beeld op grond van die aantal geïdentifiseerde bloedklonte

Gebruik if -stellings om die beeld te diagnoseer op grond van die aantal geïdentifiseerde bloedklonte.

As die aantal sentroïede wat geïdentifiseer is, kleiner as of gelyk aan 5 was, is die beeld as normaal geïdentifiseer.

As die aantal sentroïede groter as 5 was, is die beeld gediagnoseer met diabetiese retinopatie.

Die resultaat word met behulp van fprintf op die opdragvenster gedruk.

Stap 29: As daar meer as 5 blokke is …

As daar meer as 5 blokke is …
As daar meer as 5 blokke is …

Herhaal die instruksies hierbo vir gediagnoseerde beelde as 'n ander verklaring. Hierdie deel sal werk as die aantal blobs groter as 5 is.

Beëindig die if -stelling.

Stap 30: Herhaal die filtreerproses vir normale beelde met beeldsyferwaardes soos 2 en 3

Herhaal die filtreerproses vir normale beelde met beeldsyferwaardes soos 2 en 3
Herhaal die filtreerproses vir normale beelde met beeldsyferwaardes soos 2 en 3
Herhaal die filtreerproses vir normale beelde met beeldsyferwaardes soos 2 en 3
Herhaal die filtreerproses vir normale beelde met beeldsyferwaardes soos 2 en 3

Herhaal die proses vir die res van die oorspronklike as stellings wanneer getal (die aantal syfers in die beeldnommer) gelyk is aan 2 en 3. Dit voltooi die for -lus vir die normale beelde.

Beëindig die for -lus.

Stap 31: Herhaal die hele proses vir die gediagnoseerde beelde

Herhaal die hele proses vir die gediagnoseerde beelde
Herhaal die hele proses vir die gediagnoseerde beelde

Herhaal die hele proses met behulp van die gediagnoseerde beelde wat in die matriks "numbers_to_extract_diagnosed" gelys word.

Maak seker dat u deur elke syfer (i) gaan en dit verander na figuur (i+10), sodat die gediagnoseerde syfers verskyn as beelde 11 tot 20.

Stap 32: Statistiese analise

Statistiese analise
Statistiese analise

1. 'Actual_Diagnosis_Matrix' word gebruik om die resultate te vergelyk met die amptelike diagnose wat in die txt -lêer voorkom. Die eerste 10 nulle dui aan dat die eerste 10 beelde normaal moet wees. Die laaste tien dui aan dat die laaste tien beelde as diabetiese retinopatie geklassifiseer moet word.

2. Die dubbele gelyke teken wat gebruik word om 'getal_korrigeer' te skep, skep 'n logiese skikking deur die waarde van die ooreenstemmende elemente van 'Actual_Diagnosis_Matrix' te vergelyk met 'Diagnose_Matrix' wat uit die for -lus geskep is.

Vir elke element wat by die diagnose pas, word 'n 1 bygevoeg, wat beteken dat die kode die beeld korrek gediagnoseer het. As dit verkeerd is, voeg dit 'n 0 by die matriks.

As ons dan die som optel, tel ons almal op. Met ander woorde, dit vind die som van korrek gediagnoseerde beelde.

3. 'Final_percentage_correct' is die berekende persentasie van hoe akkuraat die kode by diabetiese retinopatie gediagnoseer is. Die aantal beelde wat korrek gediagnoseer word, word gedeel deur 20 (die totale aantal foto's) en vermenigvuldig met 100 om die persentasie suksesvolle diagnoses te vind.

Stap 33: vind vertrouensinterval

Vind vertrouensinterval
Vind vertrouensinterval

1. Maak seker dat u ModWald.m afgelaai het om dit as 'n funksie te noem. Sonder die funksie sou u self die vertrouensinterval moes bereken deur die aangepaste Wald -metode te gebruik.

2. Die ModWald -funksie het 2 insette waar die eerste die aantal korrek geïdentifiseerde beelde is, en die tweede die totale hoeveelheid beelde.

3. Die ModWald -funksie gee die onderste en boonste grense van die vertrouensinterval van verhoudings weer vir die akkuraatheid van die bemonsterde data. Met ander woorde, u gee 'n interval van persentasies waar die ware persentasie van die akkuraatheid van die kode lê.

4. Gebruik fprintf hieronder om die statistieke en vertrouensinterval in die opdragvenster uit te voer.

> fprintf ('%. 0f persent van die retinale beelde is korrek gediagnoseer volgens amptelike diagnose. / n / n', Final_percentage_correct)

> fprintf ('Die ware persentasie waarvolgens ons kode diabetiese retinopatie korrek sal diagnoseer, sal in die reeks [%.3f, %.3f] val, gebaseer op 20 beelde wat geneem is / n', laer_gebonde, boonste_gebonde)

Aanbeveel: