Obsah:
- Krok 1: Predpoklady
- Krok 2: Predpoklady (nie je)
- Krok 3: Predpoklady (nie je)
- Krok 4: Predpoklady (nie je)
- Krok 5: Vyčistite Matlab a pripravte sa na spustenie kódu
- Krok 6: Vyberte 10 bežných snímok očí a 10 snímok s príznakmi diabetickej retinopatie
- Krok 7: Vyberte 10 bežných snímok očí a 10 snímok s príznakmi diabetickej retinopatie (nie je k dispozícii)
- Krok 8: Vytvorte 2 premenné (normálne a diagnostikované) a nastavte ich na 0
- Krok 9: Vytvorte slučku pre automatické odosielanie normálnych obrázkov
- Krok 10: Vytvorte slučku na automatické odosielanie normálnych obrázkov (nie je zahrnuté)
- Krok 11: Orežte okraje obrázka
- Krok 12: Vytvorte obrázok v odtieňoch sivej
- Krok 13: Vytvorte kontrastný obrázok
- Krok 14: Vylepšite kontrastný obraz
- Krok 15: Vytvorte priemerný filter
- Krok 16: Skombinujte priemerujúci filter s kontrastným obrázkom
- Krok 17: Vytvorte novú priemernú masku odčítaním pixelov
- Krok 18: Vytvorte binárne filtrovaný obrázok
- Krok 19: Odstráňte menšie guľôčky nájdené vo filtrovaných obrázkoch
- Krok 20: Vytvorte prvok na štruktúrovanie disku
- Krok 21: Vykonajte operácie morfologického zatvorenia
- Krok 22: Nájdite objekty s konektivitou najmenej 8
- Krok 23: Nájdite maximálny počet prepojených pixelov
- Krok 24: Nastavte maximálne hodnoty pixelov na 0 a vyhľadajte pixely s> = 26 pixelovými pripojeniami
- Krok 25: Odstráňte krvné cievy na obrázku
- Krok 26: Zobrazenie obrázku
- Krok 27: Odstráňte cievy a spočítajte krvné kvapky
- Krok 28: Diagnostikujte obraz sietnice na základe počtu identifikovaných krvných zrazenín
- Krok 29: Ak existuje viac ako 5 blokov…
- Krok 30: Opakujte postup filtrovania pre normálne obrázky s hodnotami číslic obrázku ako 2 a 3
- Krok 31: Zopakujte celý proces pre diagnostikované obrázky
- Krok 32: Štatistická analýza
- Krok 33: Hľadanie intervalu spoľahlivosti
Video: Automatizovaná diagnostika diabetickej retinopatie prostredníctvom systému MATLAB: 33 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 12:00
(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
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)
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)
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)
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
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
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)
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 tieto premenné pred slučkou for, aby sa inicializovali čísla slučiek.
Krok 9: Vytvorte slučku pre automatické odosielanie normálnych 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é)
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
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
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
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
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
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
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 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
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 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 (s polomerom 2) pomocou funkcie strel. Priraďte to k sebe.
Krok 21: Vykonajte operácie morfologického zatvorenia
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
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
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
= 26 Pripojenie pixelov "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 Pripojenie pixelov "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 Pripojenie pixelov "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
= 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…
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 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 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
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
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:
Pripojte sa k celulárnemu systému diaľkového ovládania systému Android Telnet .: 9 krokov
Pripojte sa k celulárnemu systému diaľkového ovládania systému Android: ¡Bienvenido! Aktuálne informácie, ako napríklad prístup k internetu. Väčšina webových stránok a všetkých globálnych počítačových úložísk, ktoré prenášajú údaje; pretože sú sólo eséces contar con las herramientas y técnicas correctas para poder ac
Prístup k systému súborov Raspberry Pi prostredníctvom systému Windows: 9 krokov
Pristupujte k systému súborov Raspberry Pi prostredníctvom systému Windows: Už ste niekedy dostali Raspberry Pi a odišlo „Musím si ho zakaždým nastaviť pomocou monitora, myši a klávesnice!“Frustrácia, ktorú spôsobuje odpojenie/opätovné zapojenie monitora a klávesnice/myši z dôvodu prístupu k Raspberry Pi, je na špičkovej úrovni.
Vykreslenie grafu v reálnom čase pre Android od systému Arduino prostredníctvom krokov HC-05: 3
Vykreslenie grafu v reálnom čase pre Android od Arduina cez HC-05: Ahoj, tu je návod, ako vykresliť graf hodnôt v reálnom čase z mikroovládača, akým je napríklad Arduino, do aplikácie. Využíva modul Bluetooth, ako je HC-05, aby slúžil ako zariadenie na odosielanie správ na prenos a príjem údajov medzi
Ovládajte domáce spotrebiče prostredníctvom systému Alexa s ESP8266 alebo ESP32: 8 krokov
Ovládajte domáce spotrebiče prostredníctvom systému Alexa pomocou systému ESP8266 alebo ESP32: Hej, čo sa deje, chlapci! Akarsh tu od CETech. Tento môj projekt vám pomôže uľahčiť život a budete sa cítiť ako kráľ po tom, čo ovládate spotrebiče vo svojom dome, stačí, ak dáte príkaz Alexovi. Hlavná vec za týmto p
Bluetooth domáca automatizácia prostredníctvom systému Android: 3 kroky
Bluetooth domáca automatizácia prostredníctvom systému Android: Život v 21. storočí je storočím automatizácie, nie každý však má tento luxus, nebojte sa! Tento návod vám presne povie, ako automatizovať vaše spotrebiče, aby ste ich mohli zapnúť alebo vypnúť jednoduchým ťuknutím na zadok