Sadržaj:
- Korak 1: Upotreba Brain Box -a
- Korak 2: Uvod: Analiza poprečnih presjeka
- Korak 3: Postavljanje funkcije: LevelCurveTracings.m
- Korak 4: Razvijanje vezanog algoritma: Pronalaženje granica
- Korak 5: Razvoj vezanog algoritma: Generiranje vanjskog vezanog niza
- Korak 6: Razvijanje vezanog algoritma: Rad sa središnjom tačkom
- Korak 7: Razvijanje vezanog algoritma: Kada centroid nije centriran
- Korak 8: Razvijanje vezanog algoritma: Interferencija rupa
- Korak 9: Razvijanje vezanog algoritma: lociranje rupa, dovršavanje moždanih veza i rupa
- Korak 10: Zapisivanje podataka: Funkcija PatientFiles.m
- Korak 11: Zapis podataka u datoteke
- Korak 12: Zapisivanje podataka: Prikaz grafika volumena mozga tokom vremena
- Korak 13: Zatvaranje praznina u podcrtima: Subplotclose.m
- Korak 14: Glavni kod: Brisanje svih i traženje unosa
- Korak 15: Glavni kod: Skupna obrada slika
- Korak 16: Glavni kod: Podstava
- Korak 17: Glavni kod: Određivanje granica
- Korak 18: Glavni kod: Određivanje odgovarajuće Z dimenzije
- Korak 19: Glavni kod: Određivanje X i Y koordinata
- Korak 20: Glavni kod: Iscrtavanje trodimenzionalne strukture, pronalaženje volumena i bilježenje podataka
Video: Brain Box: Praćenje neuronske zapremine tokom vremena: 20 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-31 10:17
Napredak na granici dužeg ljudskog života doveo je do porasta bolesti koje civilizacije nisu vidjele prije naše. Među njima je Alzheimerova bolest pogodila približno 5,3 milijuna živućih starijih Amerikanaca u 2017., ili otprilike 1 od 10 starijih Amerikanaca (https://www.alz.org/facts/) i nebrojeno drugih osoba s demencijom. Kako bi pomogao u borbi za razumijevanje onoga što muči naše starješine, ovaj kôd će buduće istraživače i željne znatiželjnike opremiti sposobnošću praćenja volumena mozga s vremenom.
Korak 1: Upotreba Brain Box -a
Za korištenje mozga potrebno je samo sljedeće:
- MRI skeniranje mozga i naziv i format takvih datoteka (svi bi trebali imati približno iste dimenzije)
- Dužina jednog skeniranja
- Udaljenost između svakog sloja (MRI skeniranje)
- Ime pacijenta (Prilikom unosa nemojte uključivati razmake i molimo vas da veliko ime i prezime napišete velikim slovima, na primjer: FirstnameLastname)
Od toga se može pratiti pojedinačne trendove u volumenu mozga tokom vremena. Tako se pomoću ovog softvera mogu pratiti brojke za Alzheimerove trendove. Dužina koju smo koristili u ispitivanju bila je 180 mm za dužinu jednog skeniranja i 5 mm za udaljenost između MRI skeniranja, na osnovu prosječnih brojki.
Međutim, primjena moždane kutije ne mora biti ograničena na ovaj jedan zadatak. Ako su presjeci određene čvrste građe fotografije, poput tumora po sebi, trendovi u promjenama volumena za njih mogu se pratiti i u softveru.
Korak 2: Uvod: Analiza poprečnih presjeka
U trodimenzionalnim strukturama, dvodimenzionalne ravnine od kojih se takve sastoje nazivale bi se presjeci. Zamislite da hrpa papira čini pravokutnu prizmu, a onda bi svaki komad papira bio presjek papira. U zamišljanju mozga primjenjujemo isti način razmišljanja. MRI (slikanje magnetskom rezonancom) (vidi informacije o MRI) snima presjeke mozga, a pomoću granica definiranih u svakom "sloju" mozga možemo konstruirati strukturu za modeliranje i pronalaženje volumena mozga. Međutim, prvo moramo izgraditi funkciju za pružanje informacija o takvim granicama.
Korak 3: Postavljanje funkcije: LevelCurveTracings.m
Prvo provjerite je li na vašem računaru instaliran MATLAB_R2017b (preuzmite ovdje) i otvorite MATLAB. U sučelju MATLAB -a kliknite na gumb u gornjem lijevom kutu prozora koji kaže "Novo" sa podebljanim žutim znakom plus, a zatim odaberite opciju "funkcija", da biste otvorili u prozoru uređivača prostor koji podsjeća na onaj u treća slika. Usredotočit ćemo se na promjenu prvog retka za postavljanje funkcije. Tamo gdje piše "outputArg1", zamijenite ga sa "brain", "outputArg2" da kažete "rupe", "untitled2" u "exp2" i "inputArg1" u "sliku" i izbrišite "inputArg2". Sada imate funkciju koju možete pozvati pomoću "exp2", uzimajući jedan argument "image" i ispisujući granice "mozga" i "rupa". Prvi red funkcije trebao bi nalikovati liniji prikazanoj na četvrtoj slici. Izbrišite sav kôd ispod ove početne linije.
Korak 4: Razvijanje vezanog algoritma: Pronalaženje granica
Unesite kod na sljedeći način ispod retka. Ovaj odjeljak funkcije radi sljedeće po redak.
- Učitajte sliku "image" u varijablu "mri".
- Pretvorite "mri" u sliku napravljenu od vrijednosti u rasponu brojeva do jedinica i nula (poznatih i kao binarno) na osnovu postavljene vrijednosti praga. Ako je vrijednost u pikselu jednaka ili veća od 0,1, postavlja se na jedan, ako nije, vrijednost na tom pikselu postavljena je na nulu.
- Sljedeća četiri retka pretvaraju 10 stupaca i redova na rubovima sloja MRI skeniranja u nule, kako bi se izbjeglo čitanje nepravilnih vrijednosti kao granica (naučeno iz eksperimentiranja s kodom).
- U posljednjem retku, bwboundaries prati granice binarne slike "mri" i postavlja je jednaku "b", nizu s elementima čiji indeksi odgovaraju indeksima granica postavljenih na jedan.
Korak 5: Razvoj vezanog algoritma: Generiranje vanjskog vezanog niza
U prozoru uređivača slijedite sljedeći kôd na slici. Ovaj odjeljak koda radi sljedeće po redak.
- Pronađite dužinu svakog od redova binarne slike "b" (cellfun primjenjuje dužinu funkcije na svaki red).
- Postavite "loc" za spremanje maksimalnih dužina.
- Pronađite indeks maksimalne dužine, postavljen za spremanje u "najveći trag".
- Pronađite veličinu slike "mri" koja se sastoji od iste veličine kao "b" i postavite je na "BWsize".
- Pronađite broj redova u nizu slike, postavljen na "ysize".
- Pronađite broj stupaca u nizu slike postavljenih na "xsize".
- Generirajte niz "najvećiTraceMat", "ysize" po "xsize" matricu nula.
- Pronađite ekvivalentni indeks iz pretplaćenih vrijednosti koje odgovaraju mjestu gdje su bile najveće vrijednosti Trace x i vrijednosti y, pohranite u vektorski "lindex".
- U matrici nula, "najvećiTraceMat", pretvorite elemente na indeksima koji odgovaraju vrijednostima indeksa pohranjenim kao elementi u "lindexu" u jedinice.
Stoga logički niz "najvećiTraceMat" ima najveću ograničenu regiju datog presjeka skeniranja mozga iscrtanog kao onaj s pozadinom nula
Korak 6: Razvijanje vezanog algoritma: Rad sa središnjom tačkom
Zatim moramo testirati da vidimo da li se poprečni presjek sastoji od više regija (najvećih). Testiranjem poravnanja centroida najveće regije možemo vidjeti postoji li jedno susjedno područje koje bi dalo centriraniji centar ili mogućnost više regija.
- Koristite "regionProps" da pronađete informacije o prisutnim centroidima, postavljene jednake nizu strukture "tempStruct"
- Formirajte niz "centroidi" s podacima vertikalno spojenim podacima iz polja "centroid"
- Uzmite vrijednosti drugog stupca "centroida" (koordinate vodoravnih dimenzija)
- Pokrenite filter da provjerite poravnanje centroida prema horizontalnom centru
Korak 7: Razvijanje vezanog algoritma: Kada centroid nije centriran
U scenariju da središte najvećeg područja traga nije centrirano, idemo kroz sljedeće korake. Kao što smo primijetili tokom snimanja magnetnom rezonancom, tendencija je bila da se hemisfere mozga prikazuju u poprečnom presjeku kada nisu susjedne, pa sada nastavljamo crtati drugi najveći trag zajedno s najvećim tragom u "najvećiTraceMat"
- Postavite matricu praćenja na novu varijablu "b2"
- Inicijalizirajte praznu matricu "b2", sa skupom indeksiranim sa "loc"
- Kreirajte uvjetno, kada centroid nije centriran (tj. Sloj s više regija)
- Postavite novu veličinu praćenja koja će se pronaći za svaki red (traceSize2)
- Postavite "loc2" da pronađete indekse gdje su prisutne granice
- Neka ćelije navedene sa "loc2" u "b2" biti jednake "najvećiTrace2"
- Pretvorite indekse u indekse, postavite na "lindex"
- Promijenite elemente koji odgovaraju "lindex" u "najvećiTraceMat" na 1
- Inicijalizirajte praznu matricu "b2", sa skupom indeksiranim sa "loc2"
Korak 8: Razvijanje vezanog algoritma: Interferencija rupa
U radu s rupama, vrijednosti pohranjene u "b2" pratile su strukture koje nisu najveći trag, a njihovo iscrtavanje na ispunjenom obliku "najvećiTraceMat" otkrit će gdje postoje rupe u regijama mozga.
- Kreirajte niz "fillMat", koji je ispunjen oblik "najvećiTraceMat"
- Kreirajte niz "interferenceMat", "ysize" by "xsize" niz nula
- Kreirajte niz "interferenceloc", za pohranu vrijednosti iz "b2", vertikalno spojenih
- Kreirajte niz "lindex" za spremanje indeksa koji odgovaraju "interferenceloc"
- Za indekse u "interferenceMat" koji odgovaraju "lindex", postavite vrijednost na 1, čineći drugačije ograničeno područje
Korak 9: Razvijanje vezanog algoritma: lociranje rupa, dovršavanje moždanih veza i rupa
- Niz "tempMat" postavite na "interferenceMat" plus "fillMat", dodajući tako svaku vrijednost u matrici jedni drugima
- Postavite niz "holesLoc" jednak indeksima gdje su "interferenceMat" i "fillMat" bili jednaki
- Postavite "holesMat" kao nultu matricu dimenzija "ysize" x "xsize"
- Postavite indekse u "holesMat" koji su jednaki "holeLoc" kao jedinice
- Postavite "mozak" na "najvećiTraceMat"
- Postavite "hole" na "holesMat"
S otkrićem gdje su vrijednosti dodanih matrica jednake 2, lokacije rupa su lako osigurane i iscrtane na praznu matricu.
Korak 10: Zapisivanje podataka: Funkcija PatientFiles.m
Slično kao i kod postavljanja posljednje funkcije, kliknite gumb u gornjem lijevom kutu prozora na kojem piše "Novo" s podebljanim žutim znakom plus i odaberite opciju "funkcija", kako biste u prozoru uređivača otvorili prostor koji liči na ono na trećoj slici. U prvom redu izbrišite izlaznu matricu i zamijenite je sa samo "output", zamijenite "untitled2" sa "PatientFiles", izbrišite sve ulazne argumente i umjesto toga slijedite oblikovanje navedeno na četvrtoj slici reda koda. Prvi red ove funkcije trebao bi odgovarati oblikovanju slike.
Korak 11: Zapis podataka u datoteke
Da bismo postavili datoteku za bilježenje podataka koje je pronašla glavna funkcija (koje tek treba opisati), moramo slijediti ove korake (kako je propisano kodom po redak).
- Provjerite je li ulaz za ime pacijenta niz.
- Ako to nije niz, pokažite da bi pacijentovo ime trebalo biti niz.
- Završite if naredbu (spriječite grešku).
- Postavite niz "DateandTime" koji će dati sljedeći format: sat: minute-mjesec/dan/godina.
- Podesite promenljivu fileName na sledeće: pacijentName.m.
A sada na sljedeći odjeljak funkcije: Da li datoteka ovog imena već postoji?
1) Pretpostavimo da datoteka ovog imena već postoji:
- Pokrenite datoteku da biste dobili vrijednosti iz prethodnog čekanja
- Dodajte podatke "DateandTime" trenutne iteracije kao novu ćeliju u nizu ćelija s vrijednostima x (indeksni kraj+1)
- Dodajte trenutnu vrijednost "brainVolume" kao novu ćeliju u nizu ćelija s vrijednostima y (indeksni kraj+1)
- Spremite trenutne varijable učitane u datoteku.
2) Pretpostavimo da datoteka ovog imena ne postoji:
- Kreirajte novu datoteku s imenom pohranjenim u varijabli "ime pacijenta"
- Dodajte trenutne podatke "DateandTime" kao ćeliju u prazan niz ćelija s x vrijednostima
- Dodajte trenutne podatke "brainVolume" kao ćeliju u prazan niz ćelija s vrijednostima y
- Spremite trenutne varijable učitane u datoteku.
Korak 12: Zapisivanje podataka: Prikaz grafika volumena mozga tokom vremena
- Pretvorite niz x vrijednosti (xVals) u kategorijski niz (xValsCategorical), kako biste omogućili iscrtavanje
- Generirajte prozor broj 5
- Iscrtajte točke označene sa "xValsCategorical" i "yVals" (koje sadrže volumen mozga), koristeći šuplje krugove za označavanje točaka i povezivanje isprekidanim linijama
- Naslovite grafikon kao: ime pacijenta Podaci o volumenu mozga
- Označite x os kao što je prikazano na slici
- Osovinu y označite kao što je prikazano na slici
- Neka je slika 5 jednaka izlaznoj vrijednosti
Odatle, funkcija "PatientName" koja se poziva dat će datoteku s uređenim podacima koji prate volumen mozga tijekom vremena i grafikon koji prikazuje trendove.
Korak 13: Zatvaranje praznina u podcrtima: Subplotclose.m
Funkcija, prilagođena kodu sa https://www.briandalessandro.com, funkcionira tako da zatvori praznine između figura podcrta glavnog koda, kada se stvaraju figure koje prikazuju MRI slike i slojeve mozga. Funkcija podcrta koja se koristi unutar subplotclose.m prilagođava položaj datih podcrtava tako da se međusobno dobro uklapaju u aspekt duže dimenzije. Na primjer, ako kôd ima matricu 7 x 3, redovi će dobro pristajati jer je dimenzija reda duža. Ako kôd ima matricu 3 x 7, stupci će se dobro uklopiti, s prazninama u redovima, kako je prikazano na slikama našeg glavnog koda.
Korak 14: Glavni kod: Brisanje svih i traženje unosa
Da biste pokrenuli glavni kôd, kliknite na isto dugme na kojem piše "Novo" u gornjem lijevom kutu prozora i odaberite "Skripta" umjesto "Funkcija" iz ranijih odjeljaka. Upišite kôd kao što je prikazano na slici u prozoru uređivača. Redovi koda izvršavaju sljedeće zadatke po redoslijedu:
- Zatvorite sve otvorene datoteke osim 0, 1 i 2.
- Zatvorite sve prozore sa figurama.
- Obrišite sve varijable u radnom prostoru.
- Očistite komandni prozor.
- Prikaz u naredbenom prozoru: Molimo unesite sljedeće dimenzije za MRI skeniranje:
- Na novom retku u prozoru naredbe pitajte: Dužina jednog skeniranja u milimetrima:. Odgovor koji korisnik unese bit će postavljen na varijablu "lengthMM".
- Na novoj liniji pitajte: Udaljenost između MRI skeniranja u milimetrima:. Odgovor koji korisnik unese bit će postavljen na varijablu "ZStacks".
Korak 15: Glavni kod: Skupna obrada slika
U ovom odjeljku, kod će učitati slike (koje se sastoje od MRI skeniranja poprečnih presjeka mozga) i pohraniti nazive svake datoteke slike u varijablu "Baza" i prikazati svaku od MRI skeniranja. Molimo slijedite kôd na slici, koji radi sljedeće:
- Napravite niz struktura "BrainImages" koji sadrži informacije o svim datotekama u trenutnoj mapi koje odgovaraju formatu naziva MRI _ (). Png
- Postavite varijablu "NumberofImages" jednaku broju elemenata u nizu strukture "BrainImages"
- Otvorite prozor sa figurama 1
- Postavite for petlju da se kreće kroz ciklus za broj slika prebrojanih u datoteci
- Za svaku petlju, "CurrentImage" je odgovarajući naziv svake datoteke MRI_i.png, s brojem iteracije kao 'i'
- Generirajte podcrt 3 x 7 za prikaz 19 slika koje će učitati "imshow"
- Prikažite svaku sliku kao drugi element u prozoru figure potcrta
- Naslovite svaki element potcrtice kao Nivo_, gdje je prazno broj ponavljanja for petlje.
- Završite for petlju (izbjegavajući grešku)
Ovo će u prozoru sa slikom 1 prikazati sve MRI snimke u sirovom obliku u konfiguraciji 3 x 7 bez praznina u x orijentaciji.
Korak 16: Glavni kod: Podstava
Punjenjem izbjegavamo problem manjih odstupanja u veličini slike koje mogu dovesti do greške pri neusklađenosti dimenzija u slučaju da je jedna slika nešto veća od druge.
- Otvorite prozor sa figurama 2
- Učitajte matricu slike sa MRI_1-p.webp" />
- Pronađite veličinu matrice slike i postavite na "OriginalXPixels" (za broj redova) i "OriginalYPixels" (za broj stupaca)
- Postavite matricu "BrainMat" da se sastoji od svih nula sa još 20 redova i još 20 stupaca za svaku ravninu i 19 ukupnih presjeka, po jedan po ravnini.
- Postavite "HolesMat" da se sastoji od istog trodimenzionalnog niza nula za kasnije unos koordinata rupe
- Napravite "zeroMat" da bude veličine jastučića plus dvadeset redova i dvadeset stupaca, dvodimenzionalnog niza nula.
Korak 17: Glavni kod: Određivanje granica
- Postavite for petlju da prolazi kroz podatke sa svake ranije učitane slike
- Na isti način grupne obrade ranije, "CurrentImage" učitava datoteke sa "MRI_i.png", gdje je i broj ponavljanja
- Pokrenite svaku sliku putem funkcije za obradu "LevelCurveTracings2.m" koju ste ranije napravili
- Pronađite veličinu izlaza "Mozak", postavite broj redova na "Trenutni rast", a broj stupaca na "Trenutne stupce"
- Postavite "CurrentMat" na matricu nula s dimenzijama navedenim u "Currentrow" i "Currentcolumns"
- Centrirajte podatke iz "Mozak" u "CurrentMat", sa marginom od 10 redova sa svih strana
- Generirajte podcrt dimenzija 3 x 7 za prikaz granica slika
- Naslovite svaki od elemenata podcrta u prozoru sa slikom
- Generirajte trodimenzionalnu matricu "BrainMat" koja se sastoji od svakog graničnog sloja "CurrentMat"
- Završi for petlju (radi izbjegavanja grešaka)
Pododsjek koji slijedi popunjava rupe lijevo na vrhu i dnu predloženog trodimenzionalnog oblika
- Postavite "LevelCurve1" jednak prvom sloju "BrainMat -a" (dno čvrstog dijela)
- Postavite "LevelCurveEnd" jednak posljednjem sloju "BrainMat -a" (vrh čvrstog dijela)
- Prepišite "LevelCurve1" ispunjenim slojem
- Prepišite "LevelCurveEnd" ispunjenim slojem
- Postavite ispunjeni sloj kao donji sloj "BrainMat -a"
- Postavite ispunjeni sloj kao gornji sloj "BrainMat -a"
Korak 18: Glavni kod: Određivanje odgovarajuće Z dimenzije
Prva tri retka sastoje se od postavljanja praznog niza "z" i obavljanja jednostavnih operacija konverzije (podjele piksela po dužini) kako bi se dobilo pravilno očitanje volumena u mm^3
- Kreirajte for petlju za kretanje kroz svaki sloj
- Pronađite broj jedinica u danom sloju
- Pretvorite z koordinate za one u vrijednosti koje su prilagođene odgovarajućem omjeru, postavljene na "tempz", vektor stupca
- Vektoru z dodati vrijednost z za krivulju nivoa
Sa ovim z koordinate se pravilno podešavaju.
Korak 19: Glavni kod: Određivanje X i Y koordinata
Sada odredimo položaje x i y svake od točaka u granicama.
- Inicijalizirajte "xBrain" kao prazan niz
- Inicijalizirajte "yBrain" kao prazan niz
- Postavite for petlju za petlju kroz svaku učitanu sliku
- Sastavite matricu s dva stupca za spremanje ravninskih koordinata svake točke u granicu, predstavljenu vektorima stupaca "RowBrain" i "ColumnBrain"
- Dodajte "xBrain" sa trenutno pronađenim "RowBrain" koordinatama
- Dodajte "yBrain" sa trenutno pronađenim "ColumnBrain" koordinatama
- Završite for petlju (radi izbjegavanja greške)
Korak 20: Glavni kod: Iscrtavanje trodimenzionalne strukture, pronalaženje volumena i bilježenje podataka
Koristeći funkciju alphaShape, stvorit ćemo trodimenzionalnu strukturu iz koje možemo izračunati volumen mozga.
- Koristite funkciju alphaShape, uključite vektore "xBrain", "yBrain" i "z" za koordinate x, y i z i postavite jednako na "BrainPolyhedron"
- Otvorite prozor sa figurama 3
- Iscrtajte izračunati alfa oblik "BrainPolyhedron", prikaz u prozoru sa slikom
- Izračunajte volumen alfa oblika, koristeći funkciju "volumen" koja radi za alfa oblike
- Pretvorite volumen u mm^3
- Odštampajte volumen čvrstog materijala u komandnom prozoru
- Zatražite da se ime pacijenta postavi kao unos
- Dobijte trenutni datum i vrijeme sa satom i postavite na "DateandTime"
- Pozovite funkciju "PatientFiles" za evidentiranje i iscrtavanje izračunatih podataka
Odavde druga i treća slika trebaju prikazati brojke koje se pojavljuju, a četvrta slika koju treba prikazati u naredbenom prozoru.
Preporučuje se:
Pametni distribuirani IoT sistem za praćenje vremena pomoću NodeMCU: 11 koraka
Pametni distribuirani IoT sistem za praćenje vremena pomoću NodeMCU -a: Svi ste možda svjesni tradicionalne meteorološke stanice; ali jeste li se ikada zapitali kako to zapravo funkcionira? Budući da je tradicionalna meteorološka stanica skupa i glomazna, gustoća ovih stanica po jedinici površine vrlo je mala što doprinosi
Sistem za praćenje vremena pomoću senzora Raspberry Pi3 i DHT11: 4 koraka
Sistem za nadzor vremena pomoću Raspberry Pi3 i DHT11 senzora: U ovom vodiču ću vam pokazati kako spojiti DHT11 na Raspberry Pi i prikazati očitanja vlažnosti i temperature na LCD -u. DHT11 senzor temperature i vlažnosti lijep je mali modul koji pruža digitalnu temperaturu i vlažnost
ESP8266 Web server za praćenje vremena (bez Arduina): 4 koraka
ESP8266 Web server za praćenje vremena (bez Arduina): "Internet stvari" (IoT) postaje sve veća tema razgovora iz dana u dan. To je koncept koji ne samo da može utjecati na način na koji živimo, već i na način na koji radimo. Od industrijskih mašina do nosivih uređaja - koristeći ugrađene
Vremenska kocka - Arduino gadget za praćenje vremena: 6 koraka
Time Cube - Arduino gadget za praćenje vremena: Želio bih vam predložiti jednostavan, ali zaista koristan arduino projekt za praćenje vremenskih događaja okretanjem nekog pametnog gadgeta u obliku kocke. Okrenite ga na " Rad " > " Uči " > " Poslovi " > " Odmor " stranu i računat će
Arduino 3-u-1 prikaz vremena i vremena: 11 koraka
Arduino 3-u-1 prikaz vremena i vremena: Volim PIC mikrokontrolere i volim programiranje na asemblerskom jeziku. Zapravo, u posljednjih nekoliko godina na svojoj sam web stranici objavio oko 40 projekata na temelju te kombinacije. Nedavno sam naručivao neke dijelove iz jednog od mojih omiljenih američkih v