Obsah:
- Krok 1: Použití Brain Box
- Krok 2: Úvod: Analýza příčných řezů
- Krok 3: Nastavení funkce: LevelCurveTracings.m
- Krok 4: Rozvoj vázaného algoritmu: Hledání hranic
- Krok 5: Rozvoj vázaného algoritmu: Generování vnějšího vázaného pole
- Krok 6: Rozvoj vázaného algoritmu: Práce se středovým bodem
- Krok 7: Rozvoj vázaného algoritmu: Když těžiště není vycentrováno
- Krok 8: Rozvoj vázaného algoritmu: Interference děr
- Krok 9: Rozvoj vázaného algoritmu: Umístění otvorů, dokončení vazeb mozku a svázání děr
- Krok 10: Protokolování dat: Funkce PatientFiles.m
- Krok 11: Přihlášení dat do souborů
- Krok 12: Protokolování dat: Zobrazení grafu objemu mozku v průběhu času
- Krok 13: Uzavření mezer v podkresech: Subplotclose.m
- Krok 14: Hlavní kód: Vymazání všech a výzva pro vstupy
- Krok 15: Hlavní kód: Dávkové zpracování obrázků
- Krok 16: Hlavní kód: Polstrování
- Krok 17: Hlavní kód: Určení hranic
- Krok 18: Hlavní kód: Určení správné dimenze Z
- Krok 19: Hlavní kód: Určení souřadnic X a Y
- Krok 20: Hlavní kód: Vykreslení trojrozměrné struktury, hledání objemu a protokolování dat
Video: Brain Box: Sledování neurálního objemu v průběhu času: 20 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-31 10:18
Pokrok na hranici delšího lidského života přinesl vzestup nemocí, které civilizace neviděly dříve než ty naše. Mezi nimi Alzheimerova choroba postihla v roce 2017 přibližně 5,3 milionu žijících starších Američanů nebo přibližně 1 z 10 starších Američanů (https://www.alz.org/facts/) a bezpočet dalších s demencí. Abychom pomohli v boji za pochopení toho, co trápí naše starší, tento kód vybaví budoucí badatele a nedočkavé zvědavce schopností sledovat objem mozku v průběhu času.
Krok 1: Použití Brain Box
Chcete -li použít mozkovou schránku, potřebujete pouze následující:
- MRI skenování mozku a název a formát takových souborů (všechny by měly mít zhruba stejné rozměry)
- Délka jednoho skenování
- Vzdálenost mezi každou vrstvou (skenování MRI)
- Jméno pacienta (Při zadávání nezahrnujte mezery a používejte velká písmena křestního jména a příjmení, například: FirstnameLastname)
A z toho má člověk schopnost sledovat individuální trendy v objemu mozku v průběhu času. Tento software tedy může sledovat čísla o trendech Alzheimerovy choroby. Délka, kterou jsme použili ve studii, byla 180 mm pro délku jednoho skenu a 5 mm pro vzdálenost mezi skeny MRI, na základě průměrných hodnot.
Aplikace mozkové schránky však nemusí být omezena na tento jeden úkol. Pokud jsou průřezy dané pevné látky fotografické, jako nádor jako takový, lze trendy v objemových změnách u těchto produktů také sledovat v softwaru.
Krok 2: Úvod: Analýza příčných řezů
V trojrozměrných strukturách by dvourozměrné roviny, ze kterých takové sestávají, byly nazývány průřezy. Představte si, že stoh papírů tvoří obdélníkový hranol, pak by každý kus papíru byl průřezem papíru. Při představování mozku uplatňujeme stejný způsob myšlení. MRI (zobrazování magnetickou rezonancí) (viz informace o MRI) zachycuje průřezy mozku a pomocí hranic definovaných v každé „vrstvě“mozku, kterou jsme poskytli, můžeme zkonstruovat strukturu pro modelování a nalezení objemu mozku. Nejprve však musíme vytvořit funkci, která bude poskytovat informace o takových hranicích.
Krok 3: Nastavení funkce: LevelCurveTracings.m
Nejprve se ujistěte, že má váš počítač stažený MATLAB_R2017b (stáhněte si zde) a otevřete MATLAB. V rozhraní MATLAB klikněte na tlačítko v levém horním rohu okna s nápisem „Nový“s tučným žlutým znaménkem plus a vyberte možnost „funkce“, aby se v okně editoru otevřel prostor, který se podobá prostoru v třetí obrázek. Zaměříme se na změnu prvního řádku pro nastavení funkce. Tam, kde je uvedeno „outputArg1“, nahraďte výrazy „brain“, „outputArg2“pro výraz „hole“, „untitled2“až „exp2“a „inputArg1“pro „image“a odstraňte „inputArg2“. Nyní máte funkci, kterou lze zavolat pomocí „exp2“, přičemž vezmete jeden argument „obrázek“a vydáte hranice „mozku“a „děr“. První řádek funkce by měl připomínat řádek zobrazený na čtvrtém obrázku. Odstraňte veškerý kód pod tímto počátečním řádkem.
Krok 4: Rozvoj vázaného algoritmu: Hledání hranic
Pod řádek zadejte kód následujícím způsobem. Tato část funkce provádí následující řádek po řádku.
- Vložte do obrázku „obrázek“do proměnné „mri“.
- Proměňte „mri“na obrázek vytvořený z hodnot v rozsahu čísel až jedniček a nul (alias binarizace) na základě nastavené prahové hodnoty. Pokud je hodnota v pixelu rovna nebo větší než 0,1, je nastavena na jednu, pokud ne, hodnota v tomto pixelu je nastavena na nulu.
- Následující čtyři řádky přeměňují 10 sloupců a řádků na okrajích skenovací vrstvy MRI na nuly, aby se zabránilo čtení nesprávných hodnot jako vytváření hranic (jak jsme se naučili z experimentování s kódem).
- V posledním řádku bwboundaries sleduje hranice binarizovaného obrazu „mri“a nastaví jej na „b“, pole s prvky, jejichž indexy odpovídají indexům hranic nastaveným na jeden.
Krok 5: Rozvoj vázaného algoritmu: Generování vnějšího vázaného pole
V okně editoru postupujte podle následujícího kódu na obrázku. Tato část kódu provádí následující řádek po řádku.
- Najděte délku každého z řádků binarizovaného obrázku „b“(cellfun použije délku funkce na každý řádek).
- Nastavením „loc“uložíte maximální délky.
- Najděte index maximální délky, který je nastaven na uložení do „NejvětšíTrace“.
- Najděte velikost obrázku „mri“, který se skládá ze stejné velikosti jako „b“, a nastavte jej na „BWsize“.
- Najděte počet řádků v poli obrázku a nastavte jej na „ysize“.
- Zjistěte počet sloupců v poli obrázku, nastavte na "xsize".
- Generujte pole „největšíTraceMat“, matici „xsize“podle „xsize“nul.
- Najděte ekvivalentní index z předepsaných hodnot odpovídajících tomu, kde byly hodnoty x a y největší hodnoty Trace, uložte do vektoru „lindex“.
- V matici nul, „NejvětšíTraceMat“, proměňte prvky v indexech, které odpovídají hodnotám indexu uloženým jako prvky v „lindexu“, na jednotky.
Logické pole „NejvětšíTraceMat“má tedy největší ohraničenou oblast daného průřezu skenování mozku vykreslenou jako jednotky s pozadím nul
Krok 6: Rozvoj vázaného algoritmu: Práce se středovým bodem
Dále musíme otestovat, zda průřez sestává z více než jedné oblasti (největší). Testováním zarovnání těžiště největší oblasti můžeme zjistit, zda existuje jedna souvislá oblast, která by přinesla více soustředěný těžiště, nebo možnost více oblastí.
- Pomocí „regionProps“najděte informace o přítomných těžních strojích, které se rovnají poli struktury „tempStruct“
- Pole pole „těžiště“s údaji z pole „těžiště“svázanými svisle
- Vezměte hodnoty druhého sloupce „centroidů“(souřadnice vodorovné kóty)
- Spusťte filtr a zkontrolujte zarovnání těžiště k vodorovnému středu
Krok 7: Rozvoj vázaného algoritmu: Když těžiště není vycentrováno
Ve scénáři, že těžiště největší trasovací oblasti není vycentrováno, projdeme následujícími kroky. Jak jsme pozorovali při skenování MRI, tendence byla mít mozkové hemisféry vyobrazené v průřezu, pokud nejsou souvislé, takže nyní pokračujeme v vykreslování druhé největší stopy spolu s největší stopou v „NejvětšíTraceMat“
- Nastavit sledovanou matici na novou proměnnou "b2"
- Inicializujte prázdnou matici „b2“se sadou indexovanou „loc“
- Vytvořte podmíněné, když těžiště není vycentrováno (tj. Vrstva více oblastí)
- Nastavit novou velikost trasování pro každý řádek (traceSize2)
- Nastavením "loc2" vyhledáte indexy, kde jsou přítomny hranice
- Buňky určené „loc2“v „b2“nechť se rovnají „největšíTrace2“
- Převeďte dolní indexy na indexy nastavené na „lindex“
- Změňte prvky odpovídající „lindex“v „NejvětšíTraceMat“na 1
- Inicializujte prázdnou matici „b2“se sadou indexovanou „loc2“
Krok 8: Rozvoj vázaného algoritmu: Interference děr
Při práci s dírami hodnoty uložené v „b2“sledovaly struktury jiné než největší stopa a jejich vykreslení na vyplněnou formu „největšíTraceMat“odhalí, kde jsou díry v oblastech mozku.
- Vytvořte pole „fillMat“, což je vyplněný tvar „největšíTraceMat“
- Vytvořte pole „interferenceMat“, pole nul „ysize“podle „xsize“
- Vytvořte pole „interferenceloc“pro ukládání hodnot z „b2“, spojených svisle
- Vytvořte pole „lindex“pro uložení indexů, které odpovídají „interferenceloc“
- U indexů v „interferenceMat“, které odpovídají „lindexu“, nastavte hodnotu na 1, čímž vytvoříte jinou ohraničenou oblast
Krok 9: Rozvoj vázaného algoritmu: Umístění otvorů, dokončení vazeb mozku a svázání děr
- Nastavte pole "tempMat" na hodnotu "interferenceMat" plus "fillMat", čímž si navzájem přidáte každou hodnotu v matici
- Nastavte pole „holeLoc“na rovné indexům, kde „interferenceMat“a „fillMat“se rovnaly jedné
- Nastavit "holeMat" jako nulovou matici rozměrů "ysize" x "xsize"
- Nastavte indexy v "holeMat", které se rovnají "holeLoc" jako ty
- Nastavte „mozek“na „největšíTraceMat“
- Nastavit „díry“na „holeMat“
Se zjištěním, kde hodnoty přidaných matic byly rovny 2, byla umístění otvorů snadno zajištěna a vynesena na prázdnou matici.
Krok 10: Protokolování dat: Funkce PatientFiles.m
Podobně jako u poslední funkce klikněte na tlačítko v levém horním rohu okna s nápisem „Nový“s tučným žlutým znaménkem plus a výběrem možnosti „funkce“otevřete v okně editoru mezeru, která připomíná to na třetím obrázku. V prvním řádku odstraňte výstupní matici a nahraďte ji pouze „výstupem“, nahraďte „untitled2“„pacientskými soubory“, odstraňte všechny vstupní argumenty a místo toho postupujte podle formátování uvedeného na čtvrtém obrázku řádku kódu. První řádek této funkce by měl odpovídat formátování obrázku.
Krok 11: Přihlášení dat do souborů
Chcete-li nastavit soubor pro protokolování dat nalezených hlavní funkcí (ještě bude popsáno), musíme postupovat podle těchto kroků (jak předepisuje kód řádek po řádku).
- Zkontrolujte, zda vstup pro název pacienta je řetězec.
- Pokud se nejedná o řetězec, zobrazte, že vstupem název_pacienta by měl být řetězec.
- Ukončete příkaz if (zabraňte chybě).
- Nastavte řetězcový příkaz „DateandTime“, který bude mít následující formát: hodina: minuty-měsíc/den/rok.
- Nastavte proměnnou název_souboru na následující: jmeno pacienta.m.
Nyní k další části funkce: Existuje již soubor s tímto názvem?
1) Předpokládejme, že soubor s tímto názvem již existuje:
- Spusťte soubor a získejte hodnoty z minulosti ve frontě
- Přidejte data „DateandTime“aktuální iterace jako novou buňku do pole buněk s hodnotami x (konec indexu+1)
- Přidejte aktuální hodnotu „brainVolume“jako novou buňku do pole buněk hodnot y (konec indexu+1)
- Uložte aktuální proměnné načtené do souboru.
2) Předpokládejme, že soubor s tímto názvem neexistuje:
- Vytvořte nový soubor s názvem uloženým v proměnné „název_pacienta“
- Přidejte aktuální data „DateandTime“jako buňku do prázdného pole buněk x hodnot
- Přidejte aktuální data „brainVolume“jako buňku do prázdného pole buněk hodnot y
- Uložte aktuální proměnné načtené do souboru.
Krok 12: Protokolování dat: Zobrazení grafu objemu mozku v průběhu času
- Převést pole hodnot x (xVals) na kategorické pole (xValsCategorical), aby bylo možné vykreslování
- Okno vygenerovat obrázek 5
- Vykreslete body označené „xValsCategorical“a „yVals“(obsahující objem mozku), pomocí dutých kruhů označte body a spojte je přerušovanými čarami
- Název spiknutí pojmenujte jako: patientName Údaje o objemu mozku
- Označte osu x podle obrázku
- Označte osu y podle obrázku
- Nechť obrázek 5 odpovídá výstupu
Z toho bude vyvolávaná funkce pacientské jméno získávat soubor s upravenými daty, které budou sledovat objem mozku v čase, a graf zobrazující trendy.
Krok 13: Uzavření mezer v podkresech: Subplotclose.m
Funkce převzatá z kódu z https://www.briandalessandro.com funguje tak, že uzavírá mezery mezi dílčími obrázky hlavního kódu, když jsou vytvořeny obrázky zobrazující obrázky MRI a mozkové vrstvy. Funkce subplot použitá v subplotclose.m upraví polohu daných subplotů tak, aby se těsně přizpůsobily aspektu delší dimenze. Pokud například kód zamýšlí matici 7 x 3, řádky budou pohodlně sedět, protože rozměr řádku je delší. Pokud kód zamýšlí matici 3 x 7, sloupce budou pohodlně sedět s mezerami v řádcích, jak je znázorněno na obrázcích našeho hlavního kódu.
Krok 14: Hlavní kód: Vymazání všech a výzva pro vstupy
Chcete -li spustit hlavní kód, klikněte na stejné tlačítko, které říká „Nový“v levém horním rohu okna, a v předchozích částech vyberte „Skript“místo „Funkce“. Zadejte kód, jak je znázorněno na obrázku v okně editoru. Řádky kódu provádějí následující úkoly v uvedeném pořadí:
- Zavřete všechny otevřené soubory kromě 0, 1 a 2.
- Zavřete všechna okna obrázku.
- Vymažte všechny proměnné v pracovním prostoru.
- Vymažte příkazové okno.
- Zobrazit v příkazovém okně: Pro skeny MRI zadejte následující rozměry:
- Na novém řádku v příkazovém okně se zeptejte: Délka jednoho skenování v milimetrech:. Odpověď zadaná uživatelem bude nastavena na proměnnou "lengthMM".
- Na novém řádku se zeptejte: Vzdálenost mezi skeny MRI v milimetrech:. Reakce zadaná uživatelem bude nastavena na proměnnou "ZStacks".
Krok 15: Hlavní kód: Dávkové zpracování obrázků
V této části kód načte obrázky (skládající se ze skenů MRI průřezů mozku) a uloží názvy každého souboru obrázku do proměnné „Base“a zobrazí každý ze skenů MRI. Postupujte prosím podle kódu na obrázku, který dělá následující:
- Vytvořte strukturní pole „BrainImages“, které obsahuje informace o všech souborech v aktuální složce, které odpovídají formátu názvu MRI _ (). Png
- Nastavit proměnnou „NumberofImages“rovnou počtu prvků v poli struktury „BrainImages“
- Otevřete okno obrázku 1
- Nastavte cyklus for, který bude procházet počet obrázků započítaných v souboru
- Pro každou smyčku je „CurrentImage“příslušný název každého souboru MRI_i.png, přičemž číslo iterace je „i“
- Vygenerujte subplot 3 x 7 pro zobrazení 19 obrázků, které se mají načíst pomocí „imshow“
- V okně obrázku dílčího obrázku zobrazte každý obrázek jako další prvek
- Každý prvek subplot pojmenujte jako Level_, kde prázdné je číslo iterace smyčky for.
- Ukončete smyčku for (vyhněte se chybě)
V okně obrázku 1 se zobrazí všechny skeny MRI v surové formě v konfiguraci 3 x 7 bez mezer v orientaci x.
Krok 16: Hlavní kód: Polstrování
Díky polstrování se vyhneme problému s mírnými nesrovnalostmi ve velikostech obrázků, které mohou způsobit chybu v nesouladu rozměrů v případě, že je jeden obrázek o něco větší než druhý.
- Otevřete okno obrázku 2
- Načtěte matici obrázku z MRI_1-p.webp" />
- Najděte velikost matice obrázku a nastavte ji na „OriginalXPixels“(pro počet řádků) a „OriginalYPixels“(pro počet sloupců)
- Nastavte matici „BrainMat“tak, aby se skládala ze všech nul s 20 dalšími řádky a 20 dalšími sloupci pro každou rovinu a celkem 19 průřezy, jeden pro každou rovinu.
- Nastavte „HolesMat“tak, aby se skládalo ze stejného trojrozměrného pole nul pro pozdější zadání souřadnic díry
- Vytvořte „zeroMat“o velikosti podložky plus dvacet řádků a dvacet sloupců, dvourozměrné pole nul.
Krok 17: Hlavní kód: Určení hranic
- Nastavte smyčku pro procházení dat z každého dříve načteného obrázku
- Stejným způsobem dávkového zpracování dříve načte „CurrentImage“soubory s „MRI_i.png“, kde i je číslo iterace
- Každý obrázek spusťte prostřednictvím funkce zpracování „LevelCurveTracings2.m“, kterou jste vytvořili dříve
- Najděte velikost výstupu „Brain“, nastavte počet řádků na „Currentrow“a počet sloupců na „Currentcolumns“
- Nastavte "CurrentMat" na matici nul s rozměry určenými "Currentrow" a "Currentcolumns"
- Vycentrujte data z „Brain“v „CurrentMat“s okrajem 10 řádků na všech stranách
- Vygenerujte subplot rozměrů 3 x 7 pro zobrazení hranic obrázků
- V okně obrázku pojmenujte každý z prvků dílčího grafu
- Vygenerujte trojrozměrnou matici „BrainMat“složenou z každé mezní vrstvy „CurrentMat“
- Ukončete smyčku for (pro vyhýbání se chybám)
Následující podsekce vyplňuje otvory vlevo v horní a dolní části navrhovaného trojrozměrného tvaru
- Nastavte „LevelCurve1“rovnou první vrstvě „BrainMat“(spodní část tělesa)
- Nastavte „LevelCurveEnd“na konečnou vrstvu „BrainMat“(horní část tělesa)
- Přepište „LevelCurve1“vyplněnou vrstvou
- Přepište „LevelCurveEnd“vyplněnou vrstvou
- Nastavit vyplněnou vrstvu jako spodní vrstvu „BrainMat“
- Nastavit vyplněnou vrstvu jako horní vrstvu „BrainMat“
Krok 18: Hlavní kód: Určení správné dimenze Z
První tři řádky se skládají z nastavení prázdného pole „z“a provádění jednoduchých operací převodu (dělení pixelů délkou), aby se dosáhlo správného čtení objemu v mm^3
- Vytvořte smyčku pro procházení každou vrstvou
- Zjistěte počet jedniček v dané vrstvě
- Převeďte souřadnice z pro ty na hodnoty, které jsou upraveny na správný poměr, nastavený na "tempz", sloupcový vektor
- Přidejte hodnotu z pro křivku úrovně do vektoru z
Díky tomu jsou souřadnice z upraveny správně.
Krok 19: Hlavní kód: Určení souřadnic X a Y
Nyní určete polohy x a y každého z bodů v hranicích.
- Inicializujte "xBrain" jako prázdné pole
- Inicializujte "yBrain" jako prázdné pole
- Nastavte smyčku pro procházení každého načteného obrázku
- Zkompilovat matici se dvěma sloupci pro uložení rovinných souřadnic každého bodu do ohraničené, reprezentované vektory sloupců "RowBrain" a "ColumnBrain"
- Připojte „xBrain“k aktuálně nalezeným souřadnicím „RowBrain“
- Připojte „yBrain“k aktuálně nalezeným souřadnicím „ColumnBrain“
- Ukončete smyčku for (abyste se vyhnuli chybám)
Krok 20: Hlavní kód: Vykreslení trojrozměrné struktury, hledání objemu a protokolování dat
Pomocí funkce alphaShape vytvoříme trojrozměrnou strukturu, ze které můžeme vypočítat objem mozku.
- Použijte funkci alphaShape, zapojte vektory "xBrain", "yBrain" a "z" pro souřadnice x, y a z a nastavte je rovno "BrainPolyhedron"
- Otevřete okno obrázku 3
- Vykreslete vypočítaný tvar alfa „BrainPolyhedron“, který se zobrazí v okně obrázku
- Vypočítejte objem tvaru alfa pomocí funkce „objem“, která funguje pro tvary alfa
- Převeďte objem na mm^3
- Vytiskněte objem tělesa v příkazovém okně
- Vyzvat k zadání jména pacienta jako vstupu
- Získejte aktuální datum a čas pomocí hodin a nastavte je na „DateandTime“
- Voláním funkce „patientFiles“zaznamenáte a vypočítáte vypočítaná data
Odtud by druhý a třetí obrázek měly zobrazovat vyskakující obrazce a čtvrtý obrázek, který by měl být zobrazen v příkazovém okně.
Doporučuje:
ATtiny85 Nositelné vibrační sledování aktivity Sledování a programování ATtiny85 s Arduino Uno: 4 kroky (s obrázky)
ATtiny85 Wearable Vibration Activity Tracking Watch & Programming ATtiny85 With Arduino Uno: How to make the wearable activity tracking watch? Toto je nositelný gadget navržený tak, aby vibroval, když detekuje stagnaci. Trávíte většinu času na počítači jako já? Sedíte hodiny, aniž byste si to uvědomovali? Pak je toto zařízení f
Sady inteligentních robotů pro sledování robotů Sledování automobilů Fotosenzitivní: 7 kroků
Sady inteligentních robotů pro sledování robotů Sledovací auto Fotosenzitivní: Design od SINONING ROBOT Můžete si koupit od sledovacího robota carTheoryLM393 čip porovnat dva fotorezistory, když je na jedné straně LED dioda fotorezistoru na BÍLÉ, strana motoru se okamžitě zastaví, druhá strana motoru roztočit, aby
DIY funkce/generátor průběhu: 6 kroků (s obrázky)
DIY generátor funkcí/průběhů: V tomto projektu se krátce podíváme na generátory komerčních funkcí/průběhů, abychom zjistili, jaké funkce jsou pro verzi pro kutily důležité. Poté vám ukážu, jak vytvořit jednoduchý generátor funkcí, analogový a číslicový
Time Cube - Arduino Gadget na sledování času: 6 kroků
Time Cube - Arduino Gadget pro sledování času: Chtěl bych vám navrhnout jednoduchý, ale opravdu užitečný arduino projekt pro sledování časových událostí otočením nějakého gadgetu pro chytré kostky. Přepněte na " práci " > " učit se " > " domácí práce " > " Odpočinek " stranu a bude počítat
Inatel - SmartHome - SH2Y - Sledování systému a sledování prostředí: 6 kroků
Inatel - SmartHome - SH2Y - Sledování systému a prostředí Ambiente: Foen desenvolvido um & Sistema de Monitoramento e Seguran ç a F í sica de Ambiente " para Smart Homes, což je intuitivní monitorování stavu vari á veis como "Temperatura", "Luminosidade" e " Senzor