Obsah:

Automatizovaná diagnostika diabetickej retinopatie prostredníctvom systému MATLAB: 33 krokov
Automatizovaná diagnostika diabetickej retinopatie prostredníctvom systému MATLAB: 33 krokov

Video: Automatizovaná diagnostika diabetickej retinopatie prostredníctvom systému MATLAB: 33 krokov

Video: Automatizovaná diagnostika diabetickej retinopatie prostredníctvom systému MATLAB: 33 krokov
Video: Food as Medicine: Preventing and Treating the Most Common Diseases with Diet 2024, December
Anonim
Automatizovaná diagnostika diabetickej retinopatie prostredníctvom systému MATLAB
Automatizovaná diagnostika diabetickej retinopatie prostredníctvom systému MATLAB
Automatizovaná diagnostika diabetickej retinopatie prostredníctvom systému MATLAB
Automatizovaná diagnostika diabetickej retinopatie prostredníctvom systému MATLAB

(Pozri obrys kódu vyššie)

Diabetická retinopatia je očné ochorenie súvisiace s diabetom spôsobené vysokou hladinou cukru v krvi. Vysoká hladina cukru v krvi spôsobuje, že cievy v sietniciach napučiavajú, čo vedie k zväčšeniu ciev a dokonca k únikom ciev, čo vedie k vzniku tmavých škvŕn na obrazoch sietnice. V tomto kódexe sa zameriavame na to, aby sme použili škvrny na miestach úniku krvi ako indikátor základnej diabetickej retinopatie, aj keď v reálnom svete by boli potrebné ďalšie diagnostické techniky. Cieľom tohto kódu je automatizovať spracovanie obrazu a diagnostiku sietnicových snímok s cieľom identifikovať príznaky diabetickej retinopatie prejavujúce sa prostredníctvom tmavých škvŕn na sietnicových obrázkoch.

10 normálnych sietnicových obrazov a 10 diagnostikovaných sietnicových snímok bolo spracovaných prostredníctvom kódu, ktorý obrázky najskôr načíta a filtruje a potom kvantifikuje tmavé škvrny, aby sa určilo, či sú prítomné symptómy diabetickej retinopatie, na základe daného prahu. Výsledky sa potom vytlačia do príkazového okna na interpretáciu.

Krok 1: Predpoklady

Predpoklady
Predpoklady

1. Uistite sa, že máte v počítači stiahnutý program MATLAB.

2. Stiahnite si súbor txt, ktorý nájdete v odkaze. (Stlačením „ctrl+s“uložíte súbor do rovnakého adresára ako kód MATLAB.)

Krok 2: Predpoklady (nie je)

Predpoklady (nie je)
Predpoklady (nie je)
Predpoklady (nie je)
Predpoklady (nie je)

4. Otvorte MATLAB a do príkazového okna zadajte príkaz „uiimport“.

5. Vyberte súbor officialdiagnoses.txt a importujte ho do systému MATLAB ako maticu buniek.

6. Uistite sa, že vidíte „ordialdiagnoses“ako premennú v pracovnom priestore.

Krok 3: Predpoklady (nie je)

Predpoklady (nie je)
Predpoklady (nie je)

7. Stiahnite si funkciu ModWald.m, ktorá môže získať z vyššie uvedeného kódu alebo ju stiahnuť z Canvas.

(Kód poskytli profesor King a profesor Choi)

Krok 4: Predpoklady (nie je)

Predpoklady (nie je)
Predpoklady (nie je)

8. Stiahnite si 400 nespracovaných obrázkov z dátovej sekcie projektu STARE.

Krok 5: Vyčistite Matlab a pripravte sa na spustenie kódu

Vyčistite Matlab a pripravte sa na spustenie kódu
Vyčistite Matlab a pripravte sa na spustenie kódu

Pridať do kódu:

1. zatvorte všetky (Zatvorí všetky predtým otvorené obrázky)

2. clearvars - okrem oficiálnych diagnóz (Vymaže všetky premenné okrem predtým importovaného súboru txt oficiálnych diagnóz)

3. cclc (vymaže príkazové okno)

Krok 6: Vyberte 10 bežných snímok očí a 10 snímok s príznakmi diabetickej retinopatie

Vyberte 10 bežných snímok očí a 10 fotografií s príznakmi diabetickej retinopatie
Vyberte 10 bežných snímok očí a 10 fotografií s príznakmi diabetickej retinopatie
Vyberte 10 bežných snímok očí a 10 fotografií s príznakmi diabetickej retinopatie
Vyberte 10 bežných snímok očí a 10 fotografií s príznakmi diabetickej retinopatie

1. Vezmite diagnostický textový súbor a extrahujte názvy obrázkov. Tieto názvy sú uvedené v prvom stĺpci textového súboru, aby ste ich mohli extrahovať, zadajte „úradné diagnózy (:, 1)“. Matica názvov obrázkov bola priradená k premennej „všetky_obrazové_čísla“

2. Premeňte premennú all_image_numbers z bunkového poľa na maticové pole pomocou funkcie cell2mat

Krok 7: Vyberte 10 bežných snímok očí a 10 snímok s príznakmi diabetickej retinopatie (nie je k dispozícii)

Vyberte 10 bežných snímok očí a 10 fotografií s príznakmi diabetickej retinopatie (nezahŕňa)
Vyberte 10 bežných snímok očí a 10 fotografií s príznakmi diabetickej retinopatie (nezahŕňa)
Vyberte 10 bežných snímok očí a 10 fotografií s príznakmi diabetickej retinopatie (nezahŕňa)
Vyberte 10 bežných snímok očí a 10 fotografií s príznakmi diabetickej retinopatie (nezahŕňa)

3. Na spustenie kódu vyberte 10 bežných očí. V tomto prípade boli vybraté obrázky 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.

Umiestnite tieto čísla do matice a priraďte ich k premennej, ktorá sa bude volať pri načítaní obrázkov.

4. Opakujte krok 3 pre snímky sietnice, u ktorých bola diagnostikovaná diabetická retinopatia. V tomto prípade boli vybraté obrázky 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.

Krok 8: Vytvorte 2 premenné (normálne a diagnostikované) a nastavte ich na 0

Vytvorte 2 premenné (normálne a diagnostikované) a nastavte ich na 0
Vytvorte 2 premenné (normálne a diagnostikované) a nastavte ich na 0

Vytvorte tieto premenné pred slučkou for, aby sa inicializovali čísla slučiek.

Krok 9: Vytvorte slučku pre automatické odosielanie normálnych obrázkov

Vytvorte slučku pre automatické odosielanie bežných obrázkov
Vytvorte slučku pre automatické odosielanie bežných obrázkov

1. Vytvorte slučku for

2. Nastavte počítaciu premennú (v tomto prípade i) na maticu hodnôt 1-10. Táto premenná počítania bude použitá na vyvolanie každého obrázku jednotlivo

3. Vezmite prvok i do matice obrázkov, aby ste extrahovali a konvertovali názov obrázku z reťazca na číslo pomocou funkcie num2str.

Zistite počet číslic prítomných v názve obrázka pomocou funkcie numel. Priraďte túto hodnotu premennej digits_normal. Toto číslo by malo byť 1 pre jednociferné čísla, 2 pre dvojciferné čísla a 3 pre trojciferné čísla. Tieto informácie budú použité na automatické volanie obrázkov.

Krok 10: Vytvorte slučku na automatické odosielanie normálnych obrázkov (nie je zahrnuté)

Vytvorte slučku, ktorá bude automaticky nahrávať normálne obrázky (nie je)
Vytvorte slučku, ktorá bude automaticky nahrávať normálne obrázky (nie je)

3. Vytvorte príkaz if obsahujúci všetky tri možnosti z predchádzajúcich krokov. Ak má názov obrázku 1 číslicu, obrázok sa bude volať „im000“, ak má 2 číslice, obrázok sa bude volať „im00“a ak bude mať 3, obrázok sa bude nazývať „im0“.

4. Pod každým príkazom if priraďte premennú k imread „im“pod zodpovedajúcim príkazom if, ak má príslušný počet núl (ako je popísané vyššie), za ktorým nasleduje i.

Krok 11: Orežte okraje obrázka

Orežte okraje obrázka
Orežte okraje obrázka

Vytvorte pôvodný obrázok a použite filter imcrop na odstránenie čiernych okrajov a priradenie premennej I_crop. Orezávací obdĺžnik je určený pomocou matice [95, 95, 500, 410].

Krok 12: Vytvorte obrázok v odtieňoch sivej

Vytvorte obrázok v odtieňoch sivej
Vytvorte obrázok v odtieňoch sivej

Odrežte obrázok a pomocou filtra rbg2gray zmeňte obrázok na odtieň sivej. Priraďte tento obrázok k premennej I2.

Krok 13: Vytvorte kontrastný obrázok

Vytvorte kontrastný obrázok
Vytvorte kontrastný obrázok

Odfoťte obrázok I2 a upravte hodnoty intenzity pomocou úpravy.

Vezmite hodnoty, ktoré spadajú do rozsahu [0,2, 0,7], a znova ich upravte na a [0, 1]. Gama je nastavená na 0,8, aby bol obraz jasnejší. Priraďte nový obrázok k I_adjusted.

Krok 14: Vylepšite kontrastný obraz

Vylepšite kontrastný obraz
Vylepšite kontrastný obraz

Nasnímajte obrázok I_adjusteded a použite funkciu adapthisteq na zvýšenie kontrastu.

Syntax Adapthisteq vyžaduje názov obrázku, I_adjusted, ‘numTiles’, veľkosť numTiles, ‘nBins‘a počet priehradiek. Veľkosť numTiles je nastavená na [8 8], rozdelenie obrázku na dlaždice 8x8 a počet priehradiek je nastavený na 28. Priradenie obrázku I_constrast.

Krok 15: Vytvorte priemerný filter

Vytvorte priemerný filter
Vytvorte priemerný filter

Pomocou funkcie fspecial vytvorte premennú s názvom 'meanfilt'. Zadajte „priemernú funkciu“, aby ste vytvorili priemerovací filter, a pre veľkosť posuvného okna zadajte [90 90].

Krok 16: Skombinujte priemerujúci filter s kontrastným obrázkom

Skombinujte priemerujúci filter s kontrastným obrázkom
Skombinujte priemerujúci filter s kontrastným obrázkom

Vytvorte novú premennú s názvom mask_mean a pomocou funkcie imfilter urobte obrázok I_contrast a aplikujte priemerný filter, ktorý bol predtým vytvorený.

Krok 17: Vytvorte novú priemernú masku odčítaním pixelov

Vytvorte novú priemernú masku odčítaním pixelov
Vytvorte novú priemernú masku odčítaním pixelov

Vytvorte premennú s názvom mask_mean2 a pomocou funkcie imsubtract odčítajte hodnotu každého pixelu v I_contrast od zodpovedajúceho pixelu v maske_mean.

Krok 18: Vytvorte binárne filtrovaný obrázok

Vytvorte binárne filtrovaný obrázok
Vytvorte binárne filtrovaný obrázok

Otočte obrázky v odtieňoch sivej na čiernobiele pomocou imbinarizácie. Input mask_mean2, ‘adaptive’, ‘ForegroundPolarity’, ‘dark’, ‘Sensitivity’, 0.6. Priraďte tento nový obrázok k maske_binarizácie.

Krok 19: Odstráňte menšie guľôčky nájdené vo filtrovaných obrázkoch

Odstráňte menšie guľôčky nájdené vo filtrovaných obrázkoch
Odstráňte menšie guľôčky nájdené vo filtrovaných obrázkoch

Odstráňte objekty s pripojením menším ako 100 pixelov pomocou funkcie bwareaopen na maske_binarizácii a nastavte prahovú hodnotu na 100. Priraďte premennú ako bw.

Krok 20: Vytvorte prvok na štruktúrovanie disku

Vytvorte prvok na štruktúrovanie disku
Vytvorte prvok na štruktúrovanie disku

Vytvorte prvok na štruktúrovanie disku (s polomerom 2) pomocou funkcie strel. Priraďte to k sebe.

Krok 21: Vykonajte operácie morfologického zatvorenia

Vykonajte morfologické operácie blízko
Vykonajte morfologické operácie blízko

Vezmite telesnú hmotnosť a naneste na štruktúrny prvok funkciu imclose, aby ste na objekte vykonali morfologickú blízku operáciu.

Krok 22: Nájdite objekty s konektivitou najmenej 8

Nájdite objekty s konektivitou najmenej 8
Nájdite objekty s konektivitou najmenej 8

Vezmite bw a pomocou bwconncomp nájdite objekty s konektivitou najmenej 8 na obrázku. Priraďte výstup čísla k cc_1.

Krok 23: Nájdite maximálny počet prepojených pixelov

Zistite maximálny počet spojených pixelov
Zistite maximálny počet spojených pixelov
Zistite maximálny počet spojených pixelov
Zistite maximálny počet spojených pixelov

Pomocou funkcie cellfun vykonajte funkciu „numel“v každej bunke v CC. Zistí sa počet prvkov v bunke PixelIdxList. Priraďte hodnotu „numPixels“.

Nájdite maximálne hodnoty v numPIxels. Priraďte najväčšie maximum k „najväčšiemu“a index maximálnej hodnoty k „idx“.

Krok 24: Nastavte maximálne hodnoty pixelov na 0 a vyhľadajte pixely s> = 26 pixelovými pripojeniami

Odstráňte krvné cievy na obrázku
Odstráňte krvné cievy na obrázku

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

Zobrazenie obrázku
Zobrazenie obrázku

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

Odstráňte cievy a počítajte krvavé škvrny
Odstráňte cievy a počítajte krvavé škvrny

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

Diagnostikujte obraz sietnice na základe počtu identifikovaných krvných zrazenín
Diagnostikujte obraz sietnice na základe počtu identifikovaných krvných zrazenín

= 26 Pripojenie pixelov "src =" {{file.large_url | pridať: 'auto = webp & frame = 1 & výška = 300' %} ">

Nastavte pixely s najväčšími hodnotami na obrázku „bw“na 0, čím budú pixely čierne.

Nájdite objekty s konektivitou najmenej 26 pixelov na obrázku pomocou bwconncomp. Priradiť k premennej cc_1.

Krok 25: Odstráňte krvné cievy na obrázku

Odstráňte krvné cievy stále prítomné na obrázku pomocou funkcie bwpropfilt s rozsahom [0, 0,9].

[0,9, 1] je vylúčené, pretože hodnoty blízke 1 označujú čiaru. Priraďte k „RemoveVessels“.

Krok 26: Zobrazenie obrázku

Zobrazte každý filtrovaný obrázok v subplote. Imshow. so vstupmi „ohraničenie“a „tesné“zobrazí každý obrázok v štruktúre subplot. Na každý obrázok pridajte názov, aby ste rozlíšili, ktorý filter bol použitý.

Krok 27: Odstráňte cievy a spočítajte krvné kvapky

1. Vezmite „RemoveVessels“a použite funkciu „Centroid“v regionprops na identifikáciu ťažníc predmetov na obrázku. Tieto objekty by mali zodpovedať krvným zrazeninám prítomným na obrázku.

2. Spočítajte počet krvných zrazenín identifikovaný odmeraním dĺžky ťažiska.

Krok 28: Diagnostikujte obraz sietnice na základe počtu identifikovaných krvných zrazenín

Príkazy if použite na diagnostiku obrazu na základe počtu identifikovaných krvných zrazenín.

Ak bol počet identifikovaných centroidov menší alebo rovný 5, obrázok bol identifikovaný ako normálny.

Ak bol počet centroidov väčší ako 5, na obrázku bola diagnostikovaná diabetická retinopatia.

Výsledok sa vytlačí do príkazového okna pomocou príkazu fprintf.

Krok 29: Ak existuje viac ako 5 blokov…

Ak existuje viac ako 5 blokov…
Ak existuje viac ako 5 blokov…

Pri diagnostikovaných obrázkoch zopakujte vyššie uvedené pokyny ako ďalšie vyhlásenie. Táto časť sa spustí, ak je počet blobov väčší ako 5.

Ukončite príkaz if.

Krok 30: Opakujte postup filtrovania pre normálne obrázky s hodnotami číslic obrázku ako 2 a 3

Opakujte postup filtrovania pre normálne obrázky s hodnotami číslic obrázku ako 2 a 3
Opakujte postup filtrovania pre normálne obrázky s hodnotami číslic obrázku ako 2 a 3
Opakujte postup filtrovania pre normálne obrázky s hodnotami číslic obrázku ako 2 a 3
Opakujte postup filtrovania pre normálne obrázky s hodnotami číslic obrázku ako 2 a 3

Opakujte postup pre zvyšok pôvodných príkazov if, ak je numel (počet číslic v čísle obrázku) rovný 2 a 3. Tým sa dokončí slučka for pre normálne obrázky.

Ukončite slučku for.

Krok 31: Zopakujte celý proces pre diagnostikované obrázky

Opakujte celý proces pre diagnostikované obrázky
Opakujte celý proces pre diagnostikované obrázky

Opakujte celý proces pomocou diagnostikovaných obrázkov uvedených v matici „čísla_ až_extrakt_diagnostikované“.

Nezabudnite prejsť každý obrázok (i) a zmeňte ho na obrázok (i+10), aby diagnostikované obrázky vyskočili ako obrázky 11 až 20.

Krok 32: Štatistická analýza

Štatistická analýza
Štatistická analýza

1. „Actual_Diagnosis_Matrix“sa používa na porovnanie výsledkov s oficiálnou diagnózou nachádzajúcou sa v súbore txt. Prvých 10 núl naznačuje, že prvých 10 obrázkov by malo byť normálnych. Posledných 10 naznačuje, že posledných 10 snímok by malo byť klasifikovaných ako diabetická retinopatia.

2. Dvojité znamienko rovnosti použité na vytvorenie 'number_correct' vytvára logické pole porovnaním hodnoty zodpovedajúcich prvkov 'Actual_Diagnosis_Matrix' s 'Diagnosis_Matrix' vytvoreného zo slučky for.

Pre každý prvok, ktorý sa zhoduje s diagnózou, sa pridá 1, čo znamená, že kód správne diagnostikoval tento obrázok. Ak je nesprávny, pridá do matice 0.

Potom súčet týchto súčtov spočíta všetky. Inými slovami, nájde súčet správne diagnostikovaných obrázkov.

3. „Final_percentage_correct“je vypočítané percento presnosti kódu diagnostikovanej diabetickej retinopatie. Počet správne diagnostikovaných obrázkov sa vydelí 20 (celkový počet obrázkov) a vynásobí 100, aby sa zistilo percento úspešných diagnóz.

Krok 33: Hľadanie intervalu spoľahlivosti

Hľadanie intervalu spoľahlivosti
Hľadanie intervalu spoľahlivosti

1. Uistite sa, že máte stiahnutý ModWald.m, aby ste to mohli nazývať ako funkciu. Bez funkcie by ste museli interval spoľahlivosti vypočítať pomocou upravenej Waldovej metódy sami.

2. Funkcia ModWald má 2 vstupy, kde prvý je počet správne identifikovaných obrázkov a druhý je celkové množstvo obrázkov.

3. Funkcia ModWald vydá dolné a horné hranice intervalu spoľahlivosti proporcií pre presnosť vzorkovaných údajov. Inými slovami, dáte interval percent, v ktorých bude skutočné percento presnosti kódu.

4. Na výstup štatistických údajov a intervalu spoľahlivosti do príkazového okna použite príkaz fprintf nižšie.

> fprintf ('%. 0f percent obrazov sietnice bolo správne diagnostikovaných podľa oficiálnej diagnózy. / n / n', Final_percentage_correct)

> fprintf („Skutočné percento, v ktorom náš kód správne diagnostikuje diabetickú retinopatiu, / n bude spadať do rozsahu [%.3f, %.3f], na základe 20 vzorkovaných obrázkov / n ', lower_bound, upper_bound)

Odporúča: