Obsah:
- Krok 1: Předpoklady
- Krok 2: Předpoklady (není)
- Krok 3: Předpoklady (není)
- Krok 4: Předpoklady (není)
- Krok 5: Vyčistěte Matlab a připravte se na spuštění kódu
- Krok 6: Vyberte 10 běžných očních snímků a 10 snímků s příznaky diabetické retinopatie
- Krok 7: Vyberte 10 běžných očních snímků a 10 snímků s příznaky diabetické retinopatie (nezahrnuje)
- Krok 8: Vytvořte 2 proměnné (normální a diagnostikované) a nastavte je na 0
- Krok 9: Vytvořte smyčku pro automatické nahrávání normálních obrázků
- Krok 10: Vytvořte smyčku pro automatické nahrávání normálních obrázků (con't)
- Krok 11: Ořízněte okraje obrázku
- Krok 12: Vytvořte obrázek v šedé škále
- Krok 13: Vytvořte kontrastní obrázek
- Krok 14: Vylepšete kontrastní obraz
- Krok 15: Vytvořte průměrný filtr
- Krok 16: Zkombinujte průměrující filtr s kontrastním obrazem
- Krok 17: Vytvořte novou průměrnou masku odečtením pixelů
- Krok 18: Vytvořte binární filtrovaný obrázek
- Krok 19: Odstraňte menší bloby nalezené ve filtrovaných obrázcích
- Krok 20: Vytvořte prvek pro strukturování disku
- Krok 21: Proveďte morfologické operace blízko
- Krok 22: Najděte objekty s konektivitou nejméně 8
- Krok 23: Najděte maximální počet připojených pixelů
- Krok 24: Nastavte maximální hodnoty pixelů na 0 a najděte pixely s> = 26 pixelovým připojením
- Krok 25: Odstraňte krevní cévy na obrázku
- Krok 26: Zobrazení obrázku
- Krok 27: Odstraňte nádoby a spočítejte krvavé kapky
- Krok 28: Diagnostikujte obraz sítnice na základě počtu identifikovaných krevních sraženin
- Krok 29: Pokud existuje více než 5 blobů…
- Krok 30: Opakujte postup filtrování pro normální snímky s hodnotami číslic obrázku jako 2 a 3
- Krok 31: Opakujte celý proces pro diagnostikované obrázky
- Krok 32: Statistická analýza
- Krok 33: Hledání intervalu spolehlivosti
Video: Automatizovaná diagnostika diabetické retinopatie prostřednictvím MATLAB: 33 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:23
(Viz obrys kódu výše)
Diabetická retinopatie je oční onemocnění související s diabetem způsobené vysokou hladinou cukru v krvi. Vysoké hladiny cukru v krvi způsobují bobtnání cév v sítnicích, což vede ke zvětšení krevních cév a dokonce k prosakování cév, což vede k tmavým skvrnám na sítnicových obrazech. S tímto kódem se snažíme využít vzhled skvrn na prosakování krevních cév jako indikátor pozadí diabetické retinopatie, ačkoli v reálném světě by byly zapotřebí další diagnostické techniky. Cílem tohoto kódu je zautomatizovat zpracování obrazu a diagnostiku obrazů sítnice za účelem identifikace známek diabetické retinopatie projevených tmavými skvrnami na sítnicových obrázcích.
10 normálních obrazů sítnice a 10 diagnostikovaných snímků sítnice bylo zpracováno pomocí kódu, který nejprve čte a filtruje obrázky a poté kvantifikuje tmavé skvrny, aby určil, zda jsou přítomny příznaky diabetické retinopatie, na základě daného prahu. Výsledky se poté vytisknou do příkazového okna pro interpretaci prohlížeče.
Krok 1: Předpoklady
1. Ujistěte se, že máte v počítači stažený program MATLAB.
2. Stáhněte si soubor txt, který najdete v odkazu. (Stisknutím ‘ctrl+s’ uložíte do stejného adresáře jako kód MATLAB)
Krok 2: Předpoklady (není)
4. Otevřete MATLAB a do příkazového okna zadejte „uiimport“.
5. Vyberte soubor officialdiagnoses.txt a importujte jej do MATLABu jako matici buněk.
6. Ujistěte se, že vidíte „úřední diagnózy“jako proměnnou v pracovním prostoru.
Krok 3: Předpoklady (není)
7. Stáhněte si funkci ModWald.m, která může získat z výše uvedeného kódu nebo ji stáhnout z Canvas.
(Kód poskytli profesor King a profesor Choi)
Krok 4: Předpoklady (není)
8. Stáhněte si 400 nezpracovaných obrázků z datové části projektu STARE.
Krok 5: Vyčistěte Matlab a připravte se na spuštění kódu
Přidat do kódu:
1. zavřít vše (Zavře všechny dříve otevřené obrázky)
2. clearvars - kromě oficiálních diagnóz (Vymaže všechny proměnné kromě dříve importovaného souboru txt oficiálních diagnóz)
3. cclc (vymaže příkazové okno)
Krok 6: Vyberte 10 běžných očních snímků a 10 snímků s příznaky diabetické retinopatie
1. Vezměte diagnostický textový soubor a rozbalte názvy obrázků. Tato jména jsou obsažena v prvním sloupci textového souboru, takže pro jejich extrahování zadejte 'officialdiagnoses (:, 1)'. Matice názvů obrázků byla přiřazena proměnné „všechna_obrazová_čísla“
2. Převeďte proměnnou all_image_numbers z pole buňky na maticové pole pomocí funkce cell2mat
Krok 7: Vyberte 10 běžných očních snímků a 10 snímků s příznaky diabetické retinopatie (nezahrnuje)
3. Pro spuštění kódu vyberte 10 běžných obrazů očí. V tomto případě byly vybrány obrázky 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.
Umístěte tato čísla do matice a přiřaďte je k proměnné, která bude volána při načítání obrázků.
4. Opakujte krok 3 pro obrazy sítnice, u kterých byla diagnostikována diabetická retinopatie. V tomto případě byly vybrány obrázky 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.
Krok 8: Vytvořte 2 proměnné (normální a diagnostikované) a nastavte je na 0
Vytvořte tyto proměnné před smyčkou for a inicializujte čísla smyček.
Krok 9: Vytvořte smyčku pro automatické nahrávání normálních obrázků
1. Vytvořte smyčku for
2. Nastavte proměnnou počítání (v tomto případě i) na matici hodnot 1-10. Tato proměnná počítání bude použita k volání každého obrázku jednotlivě
3. Vezměte prvek i do matice obrázků a extrahujte a převeďte název obrázku z řetězce na číslo pomocí funkce num2str.
Zjistěte počet číslic přítomných v názvu obrázku pomocí funkce numel. Přiřaďte tuto hodnotu proměnné digits_normal. Toto číslo by mělo být 1 pro jednociferná čísla, 2 pro dvojciferná čísla a 3 pro trojciferná čísla. Tyto informace budou použity k automatickému volání obrázků.
Krok 10: Vytvořte smyčku pro automatické nahrávání normálních obrázků (con't)
3. Vytvořte příkaz if obsahující všechny tři možnosti z předchozích kroků. Pokud má název obrázku 1 číslici, bude obrázek nazýván „im000“, pokud má 2 číslice, bude obrázek nazýván „im00“a pokud má 3, bude obrázek nazýván „im0“.
4. Pod každým příkazem if přiřaďte proměnnou imread „im“pod odpovídající, if příkaz s příslušným počtem nul (jak je popsáno výše), za nímž následuje i.
Krok 11: Ořízněte okraje obrázku
Pořiďte původní obrázek a použijte filtr imcrop k odstranění černých okrajů a přiřaďte proměnné I_crop. Ořezový obdélník je určen pomocí matice [95, 95, 500, 410].
Krok 12: Vytvořte obrázek v šedé škále
Pořiďte oříznutý obrázek a pomocí filtru rbg2gray změňte obrázek na stupně šedi. Přiřaďte tento obrázek proměnné I2.
Krok 13: Vytvořte kontrastní obrázek
Pořiďte snímek I2 a pomocí imadjust změňte hodnoty intenzity.
Vezměte hodnoty, které spadají do rozsahu [0,2, 0,7], a změňte jejich měřítko na [0, 1]. Gama je nastaveno na 0,8, aby byl obraz jasnější. Přiřaďte nový obrázek I_adjusted.
Krok 14: Vylepšete kontrastní obraz
Pořiďte I_adjusted image a použijte funkci adapthisteq ke zvýšení kontrastu.
Syntaxe Adapthisteq vyžaduje název obrázku, I_adjusted, ‘numTiles’, velikost numTiles, ‘nBins‘a počet popelnic. Velikost numTiles je nastavena na [8 8], rozdělení obrazu na dlaždice 8x8 a počet přihrádek je nastaven na 28. Přiřaďte obrázek I_constrast.
Krok 15: Vytvořte průměrný filtr
Pomocí funkce fspecial vytvořte proměnnou s názvem 'meanfilt'. Zadejte „průměrnou funkci“pro vytvoření průměrovacího filtru a vložte [90 90] pro velikost posuvného okna.
Krok 16: Zkombinujte průměrující filtr s kontrastním obrazem
Vytvořte novou proměnnou s názvem mask_mean a pomocí funkce imfilter pořiďte obrázek I_contrast a použijte dříve vytvořený průměrný filtr.
Krok 17: Vytvořte novou průměrnou masku odečtením pixelů
Vytvořte proměnnou s názvem mask_mean2 a pomocí funkce imsubtract odečtěte hodnotu každého pixelu v I_contrast od odpovídajícího pixelu v mask_mean.
Krok 18: Vytvořte binární filtrovaný obrázek
Otočte obrázky ve stupních šedi na černobílé pomocí imbinarizace. Input mask_mean2, ‘adaptive’, ‘ForegroundPolarity’, ‘dark’, ‘Sensitivity’, 0.6. Přiřaďte tento nový obrázek k mask_binarize.
Krok 19: Odstraňte menší bloby nalezené ve filtrovaných obrázcích
Odstraňte objekty s připojením menším než 100 pixelů pomocí funkce bwareaopen na mask_binarize a nastavte prahovou hodnotu na 100. Přiřaďte proměnnou jako bw.
Krok 20: Vytvořte prvek pro strukturování disku
Pomocí funkce strel vytvořte prvek pro strukturování disku (o poloměru 2). Přiřaďte to k sobě.
Krok 21: Proveďte morfologické operace blízko
Vezměte bw a použijte funkci imclose na konstrukční prvek k provedení morfologické blízké operace s objektem.
Krok 22: Najděte objekty s konektivitou nejméně 8
Vezměte bw a pomocí bwconncomp najděte objekty s konektivitou alespoň 8 na obrázku. Přiřaďte výstup čísla k cc_1.
Krok 23: Najděte maximální počet připojených pixelů
Pomocí funkce cellfun proveďte funkci „numel“na každé buňce v CC. Tím se zjistí počet prvků v buňce PixelIdxList. Přiřaďte hodnotu „numPixels“.
Najděte maximální hodnoty v numPIxels. Největší maximum přiřaďte „největší“a index maximální hodnoty „idx“.
Krok 24: Nastavte maximální hodnoty pixelů na 0 a najděte pixely s> = 26 pixelovým připojením
= 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 Pixel Connectivity "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
= 26 Pixel Connectivity "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
Nastavte pixely s největšími hodnotami v obrázku „bw“na 0, čímž budou pixely černé.
Najděte objekty s konektivitou alespoň 26 pixelů v obrázku pomocí bwconncomp. Přiřadit proměnné cc_1.
Krok 25: Odstraňte krevní cévy na obrázku
Odstraňte krevní cévy, které jsou stále na obrázku, pomocí funkce bwpropfilt s rozsahem [0, 0,9].
[0,9, 1] je vyloučeno, protože hodnoty blízké 1 označují řádek. Přiřaďte k „RemoveVessels“.
Krok 26: Zobrazení obrázku
Zobrazte každý filtrovaný obrázek v subplotu. Imshow. se vstupy „ohraničení“a „těsný“zobrazí každý obrázek ve struktuře subplotu. Ke každému obrázku přidejte nadpis, abyste rozlišili, který filtr byl použit.
Krok 27: Odstraňte nádoby a spočítejte krvavé kapky
1. Vezměte „RemoveVessels“a použijte funkci „Centroid“v regionprops, abyste identifikovali těžiště objektů na obrázku. Tyto objekty by měly odpovídat krevním sraženinám přítomným na obrázku.
2. Spočítejte počet krevních sraženin identifikovaný délkou těžiště matrice.
Krok 28: Diagnostikujte obraz sítnice na základě počtu identifikovaných krevních sraženin
Použijte příkazy if k diagnostice obrazu na základě počtu identifikovaných krevních sraženin.
Pokud byl počet identifikovaných centroidů menší nebo roven 5, byl obrázek identifikován jako normální.
Pokud byl počet centroidů větší než 5, byl obraz diagnostikován s diabetickou retinopatií.
Výsledek se vytiskne do příkazového okna pomocí fprintf.
Krok 29: Pokud existuje více než 5 blobů…
Opakujte výše uvedené pokyny pro diagnostikované obrázky jako příkaz else. Tato část se spustí, pokud je počet blobů větší než 5.
Ukončete příkaz if.
Krok 30: Opakujte postup filtrování pro normální snímky s hodnotami číslic obrázku jako 2 a 3
Opakujte postup pro zbývající část původního příkazu if, pokud je numel (počet číslic v čísle obrázku) roven 2 a 3. Tím je smyčka for pro normální obrázky dokončena.
Ukončete smyčku for.
Krok 31: Opakujte celý proces pro diagnostikované obrázky
Opakujte celý proces pomocí diagnostikovaných obrázků uvedených v matici „čísla_to_extrakce_diagnostikována“.
Ujistěte se, že jste prošli každou číslici (i) a změnili ji na číslici (i+10), aby diagnostikované figury vyskočily jako obrázky 11 až 20.
Krok 32: Statistická analýza
1. „Actual_Diagnosis_Matrix“se používá k porovnání výsledků s oficiální diagnózou nalezenou v souboru txt. Prvních 10 nul znamená, že prvních 10 obrázků by mělo být normální. Posledních 10 z nich naznačuje, že posledních 10 snímků by mělo být klasifikováno jako diabetická retinopatie.
2. Dvojité znaménko rovnosti použité k vytvoření „number_correct“vytvoří logické pole porovnáním hodnoty odpovídajících prvků „Actual_Diagnosis_Matrix“s „Diagnosis_Matrix“vytvořeným ze smyčky for.
Pro každý prvek, který odpovídá diagnostice, bude přidána hodnota 1, což znamená, že kód správně diagnostikoval tento obrázek. Pokud je nesprávný, přidá do matice 0.
Když tedy vezmeme jejich součet, všechny sečtou. Jinými slovy, najde součet správně diagnostikovaných obrázků.
3. 'Final_percentage_correct' je vypočtené procento přesnosti kódu diagnostikované diabetické retinopatie. Počet správně diagnostikovaných obrázků se vydělí 20 (celkový počet obrázků) a vynásobí 100, aby se zjistilo procento úspěšných diagnóz.
Krok 33: Hledání intervalu spolehlivosti
1. Ujistěte se, že máte stažený ModWald.m, abyste jej mohli volat jako funkci. Bez funkce byste museli interval spolehlivosti vypočítat pomocí upravené Waldovy metody sami.
2. Funkce ModWald má 2 vstupy, kde první je počet správně identifikovaných obrázků a druhý je celkové množství obrázků.
3. Funkce ModWald vydá dolní a horní hranice intervalu spolehlivosti proporcí pro přesnost vzorkovaných dat. Jinými slovy, udáte interval v procentech, kde bude ležet skutečné procento přesnosti kódu.
4. Pomocí příkazu fprintf níže vygenerujte statistiky a interval spolehlivosti do příkazového okna.
> fprintf ('%. 0f procent obrazů sítnice bylo správně diagnostikováno podle oficiální diagnózy. / n / n', Final_percentage_correct)
> fprintf ('Skutečné procento, při kterém náš kód správně diagnostikuje diabetickou retinopatii, / n spadá do rozmezí [%.3f, %.3f], na základě 20 vzorkovaných obrázků / n', dolní_vázaný, horní_vázaný)
Doporučuje:
Ovládání vedené prostřednictvím aplikace Blynk pomocí Nodemcu přes internet: 5 kroků
Ovládání vedené prostřednictvím aplikace Blynk pomocí Nodemcu přes internet: Dobrý den, všichni vám dnes ukážeme, jak můžete ovládat LED pomocí chytrého telefonu přes internet
Řada IoT ESP8266: 2- Monitorování dat prostřednictvím ThingSpeak.com: 5 kroků
Řada IoT ESP8266: 2- Monitorujte data prostřednictvím ThingSpeak.com: Toto je druhá část řady IoT ESP8266. Chcete -li vidět část 1, podívejte se na tuto instrukovatelnou řadu IoT ESP8266: 1 Připojte se k routeru WIFI. Tato část si klade za cíl ukázat vám, jak odeslat data ze senzoru do jedné z populárních bezplatných cloudových služeb IoT https: //thingspeak.com
Arduino, sledování otevírání dveří prostřednictvím Gmailu: 6 kroků
Arduino, sledování otevírání dveří prostřednictvím Gmailu: V tomto tutoriálu vám ukážu, jak detekovat událost otevírání dveří a odeslat oznámení přes Gmail pomocí Arduino Uno. Pokud jste začátečník, můžete se dozvědět o wifi a senzoru v Arduinu - návody na WiFi a Arduino - dveřní senzor. Pojďme
Zapněte LED prostřednictvím internetu [MagicBlocks]: 10 kroků
Zapněte LED přes internet [MagicBlocks]: Tento tutoriál vás naučí ovládat LED na vašem Magicbit pomocí Magicblocks
Přístup k systému souborů Raspberry Pi prostřednictvím systému Windows: 9 kroků
Získejte přístup k systému souborů Raspberry Pi prostřednictvím systému Windows: Už jste někdy měli Raspberry Pi a odešli jste " musím jej pokaždé nastavit pomocí monitoru, myši a klávesnice! &Quot; Frustrace, kterou způsobuje odpojení/opětovné připojení monitoru a klávesnice/myši, jen kvůli přístupu k Raspberry Pi, je na špičkové úrovni