INHOUDSOPGAWE:
- Stap 1: Voorvereistes
- Stap 2: Voorvereistes (vervolg)
- Stap 3: Voorvereistes (vervolg)
- Stap 4: Voorvereistes (vervolg)
- Stap 5: Maak Matlab skoon om voor te berei vir die gebruikskode
- Stap 6: Kies 10 normale oogbeelde en 10 beelde met diabetiese retinopatie -simptome
- Stap 7: Kies 10 normale oogbeelde en 10 beelde met diabetiese retinopatie -simptome (vervolg)
- Stap 8: Skep 2 veranderlikes (normaal en gediagnoseer) en stel elkeen gelyk aan 0
- Stap 9: Skep 'n for Loop om normale beelde outomaties op te laai
- Stap 10: Skep 'n for Loop om normale beelde outomaties op te laai (vervolg)
- Stap 11: Sny die rande van die beeld af
- Stap 12: Skep 'n grysskaalbeeld
- Stap 13: Skep 'n kontrasterende beeld
- Stap 14: Verbeter die kontrasbeeld
- Stap 15: Skep 'n gemiddelde filter
- Stap 16: Kombineer die gemiddelde filter met die kontrasteerde prent
- Stap 17: Maak 'n nuwe gemiddelde masker deur pixels af te trek
- Stap 18: Skep 'n binêre gefiltreerde prent
- Stap 19: Verwyder kleiner blobs wat in die gefiltreerde beelde voorkom
- Stap 20: Skep 'n skyfstruktuurelement
- Stap 21: Voer morfologiese sluitbewerkings uit
- Stap 22: vind die voorwerpe met aansluitings van ten minste 8
- Stap 23: Vind die maksimum aantal gekoppelde pixels
- Stap 24: Stel die maksimum pixelwaardes op 0 en vind pixels met> = 26 pixelverbindings
- Stap 25: Verwyder bloedvate in die prentjie
- Stap 26: Figuurvertoning
- Stap 27: Verwyder vate en tel bloedblasies
- Stap 28: Diagnoseer die retinale beeld op grond van die aantal geïdentifiseerde bloedklonte
- Stap 29: As daar meer as 5 blokke is …
- Stap 30: Herhaal die filtreerproses vir normale beelde met beeldsyferwaardes soos 2 en 3
- Stap 31: Herhaal die hele proses vir die gediagnoseerde beelde
- Stap 32: Statistiese analise
- Stap 33: vind vertrouensinterval
Video: Outomatiese diagnose van diabetiese retinopatie via MATLAB: 33 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
(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
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)
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)
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)
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
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
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)
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 hierdie veranderlikes voor die for -lus om die lusgetalle te initialiseer.
Stap 9: 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)
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
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
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
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
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 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
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
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
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 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 (met 'n radius van 2) met behulp van die strel -funksie. Gee dit aan se.
Stap 21: 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
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
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
= 26 Pixel -verbinding "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 Pixel -verbinding "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 Pixel -verbinding "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
= 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 …
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 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 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
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
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:
Harde skywe: diagnose, probleemoplossing en onderhoud: 3 stappe
Hardeskywe: diagnose, probleemoplossing en onderhoud: wat is 'n hardeskyf?- Eenvoudig gestel, die hardeskyf is die stoor van al u data. Dit bevat die hardeskyf, waar al u lêers en gidse fisies geleë is. Die inligting word magneties op die skyf gestoor, sodat dit op die skyf bly, selfs as
Maak 'n outomatiese stabiliseerder van 220 volt met behulp van Arduino NANO of UNO: 3 stappe
Maak 'n outomatiese stabiliseerder van 220 volt met behulp van Arduino NANO of UNO: In hierdie instruksies sal ek jou wys hoe om 'n outomatiese spanningsstabilisator te maak met behulp van Arduino NANO, wat wisselspanning, watt, stappe, transformator temperatuur en amp sal toon; outomatiese waaier aan-af vir afkoeling. Dit is outomatiese spanningsstabilisator in 3 stappe, my vertroue
BMW INPA E60 Kode-/diagnose -gids: 4 stappe
BMW INPA E60 Kode-/diagnose-gids: In hierdie artikel sal ek 'n paar gevalle oor die BMW INPA-werkkas op BMW E60 versamel, en as u 'n ander BMW INPA E60-saak met mense wil deel, stuur dit dan na my e-pos. sal dit hier plaas om dit te deel
Tuisautomatisering: outomatiese skakelbord met dimmerbeheer via Bluetooth met behulp van Tiva TM4C123G: 7 stappe
Tuisautomatisering: outomatiese skakelbord met dimmerbeheer via Bluetooth met behulp van Tiva TM4C123G: Tans het ons afstandsbedienings vir ons televisiestelle en ander elektroniese stelsels, wat ons lewens baie maklik gemaak het. Het u al ooit gewonder oor huishoudelike outomatisering waarmee u buisligte, waaiers en ander elektrisiteit kan beheer
Hack u usb-raketlanseerder in 'n 'outomatiese mikpunt vir outomatiese toerusting': ses stappe
Hack u usb-raketlanseerder in 'n 'outomatiese mikpunt vir outomatiese toerusting': hoe u u usb-raketlanseerder op sy eie kan laat mik. Hierdie instruksies sal u leer om u usb -raketlanseerder in 'n outorent te verander wat IR -teikens kan vind en daarop gemik is. (jammer net IR -teikens)