Laboratoř funkční magnetické rezonance

Lékařská fakulta Univerzity Palackého v Olomouci
Fakultní nemocnice Olomouc

Seed-based analýza


Teoretický postup


1) Vytvoření masky

Předpokladem pro vytvoření masky z anatomického atlasu je vyhledání dané struktury v FSLView v souboru atlasu, který je uložený v /usr/share/fsl/data/atlases. Například atlas Harvard-Oxford se náchází ve složce HarvardOxford, ostatní složky s jinými atlasy jsou pojmenované podobně. Složka HarvardOxford obsahuje několik souborů, takže je potřeba vybrat ten správný, pro jednoduché vyhledání dané struktury je vhodný na úvod atlas s označením maxprob-thr25, kde jsou všechny struktury v jednom objemu. Číslo 25 zde znamená, že voxely s nižší pravděpodobností než 25% na snímku nejsou (jsou prahovány). Na výběr jsou kortikální a subkortikální atlasy, přičemž kortikální má nově i variantu se samostatnými štítky pro levou a pravou stranu, kdežto subkortikální má unikátní označení pro levé a pravé struktury i ve starších verzích FSL. Dále je možné vybrat atlas s rozlišením 2 nebo 1 mm.

Po nalezení hledané struktury, je nutné si poznamenat hodnotu z políčka intensity (po kliknutí na strukturu na jednom z řezů), které představuje číslo dané struktury (to je použito v dalším kroku). Poté je možné FSLView zavřít a v terminálu spustit následující příkaz:

fslroi <input> <output> <tmin> <tsize>

input: nifti soubor odpovídajícího atlasu, ovšem s příponou prob (ne maxprob)
output: vlastní označení souboru s maskou ROI
tmin: pořadové číslo objemu, ve kterém je daná struktura, odpovídá číslu z maxprob atlasu, od kterého odečteš 1 (první objem má číslo 0).
tsize: tady stačí zadat 1 (chceš vyextrahovat jen jeden objem)

Příklad, kterým je extrahován objem s frontálním pólem: fslroi HarvardOxford-cort-prob-2mm.nii.gz /home/pavel/Plocha/frontal 0 1

2) Transformace masky

Další krok záleží na tom, jaký druh analýzy budeme provádět. Pokud chceme  extrahovat signál z původních dat (např. pro seed-based analýzu), musíme masku nejdřív převést do jejich prostoru. K tomu je potřeba matice (.mat) nebo warp (_warp.nii.gz) soubor (ten je přítomen v případě nelineární registrace), které vytváří nástroj Flirt (lineární registrace, s GUI), respektive fnirt (nelineární registrace, bez GUI). Registrace je samozřejmě i běžnou součástí Single-subject analýzy; potřebné soubory jsou vždy ve složce <název_analýzy>.feat/reg. Jelikož je celý poněkud trochu komplexnější a je více variant, je zde uveden pouze jeden způsob. Nasledující postup je vhodný, pokud funkční data byla registrována nejdřív lineárně na MPRAGE (*.feat/reg/highres.nii.gz) a ten poté nelineárně na MNI šablonu (*.feat/reg/standard.nii.gz). Potřebné soubory jsou v podsložce reg Single-subject analýzy (viz výše). Následující příkazy na sebe přímo navazují a jsou spouštěny z adresáře <běh>.feat/reg:

invwarp -w example_func2standard_warp -o standard2example_func_warp -r example_func
applywarp -i <nifti_soubor_masky> -o mask2example_func -r example_func -w standard2example_func_warp

Příkazy pro konverzi z prostoru morfologického T1-váženého obrazu s vysokým rozlišením (MPRAGE):

convert_xfm -omat highres2example_func.mat -inverse example_func2highres.mat
flirt -in <nifti_soubor_masky> -ref example_func -applyxfm -init highres2example_func.mat -out mask2example_func

Celý výše popsaný postup je potřeba provést zvlášť pro každý funkční běh!

3) Prahování masky

Dalším krokem je strukturu adekvátně naprahovat. Jelikož každý voxel je v dané struktuře jen s určitou pravděpodobností, je vhodné odstranit ty, které jsou spíš mimo mozek nebo už v okolních oblastech. U velkých struktur (např. bílá hmota), kde si chceme být jistí, že použijeme jen voxely z dané struktury, je relativně jistý práh 95%. Velká část (především menších nebo méně konstantních) struktur ale takové voxely v atlase vůbec nemusí mít, navíc po převzorkování a snížení rozlišení transformací se jejich objem ještě zmenší, takže hrozí nebezpečí, že maska vůbec neprojde prahováním. Hodnotu pro prahování je proto potřeba odhadnout empiricky a ověřit vizuálně v fslview. Nedoporučuji používat hodnoty pod 50% (resp. 0.5 u binárních masek), jelikož jen voxely s pravděpodobností nad 50% se nachází spíše ve zkoumané struktuře, než někde jinde. Obecně se prahování provádí následujícím příkazem:

fslmaths <soubor_transformované_masky> -thr <hodnota_prahu> <výstupní soubor>

4) Binarizace

Posledním krokem je binarizace masky, která sice pro některé nástroje FSL není nutná (berou jakoukoliv nenulovou hodnotu jako 1), ale pro jistotu je vhodné ji provést vždy.

fslmaths <soubor_prahované_masky> -bin <výstupní soubor>

Tím je maska pro daný běh hotová. Pokud je hodně dat, je celý proces časově náročný, takže v laboratoři je připraven automatický skript, který ovšem očekává naši adresářovou strukturu. Rád bych dále upozornil, že pořadí kroků, které jsem uvedl není zcela striktní, ale má své opodstatnění. Transformací prahovaných anebo binarizovaných dat se totiž opět rozostří (interpolují) okraje masky a tu je potřeba znovu prahovat. Primárně binární masky (např. clustery z předchozích analýz), doporučuji po transformaci prahovat na hodnotu 0.5 a poté opět binarizovat.

Automatický skript


1) Vygenerování masky a časové řady z oblasti zájmu

Pro vygenerování masky je potřeba provést nejdříve filtraci a registraci dat na standardní šablonu (tedy provést SIngle-subject analýzu, která má shodný design jako pozdější seed analýza). Skript pro zpracování masky je součástí automatické smyčky, spouští se z kořenového adresáře studie (např. NM-RMV) a má následující syntaxi:

loop [čísla studií] -seed=<*.feat>:<možnosti>

čísla studií - pokud jsou definována (buď oddělena čárkou nebo jako rozsah s pomlčkou, v obou případech bez mezer), smyčka prochází jen uvedené studie a ignoruje vše ostatní, v opačném případě prochází vzestupně všechny studie
*.feat - název feat adresářů (ve formátu jako pro příkaz ls v úrovni adresáře Results), které slouží jako zdroj filtrovaných dat a matice pro registraci; skript vyžaduje data, která byla regitrována nelineárně ve dvou krocích
možnosti - jsou uváděné bezprostředně za dvojtečkou bez mezer a jsou odděleny čárkami, jakékoliv mezery např. v  názvech souborů je potřeba předsadit zpětným lomítkem (""): m=<cesta k masce> - je povinným parametrem a definuje úplnou cestu k masce (včetně přípony nii.gz)
l=<štítek> - je nepovinným údajem, definuje štítek pro vygenerované soubory (výchozí je seed)
b (výchozí) nebo p - nepovinný přepínač (b je výchozí), b definuje soubor s binární maskou, p soubor s maskou vygenerovanou z probabilistického atlasu (např. HarvardOxford) a očekává hodnoty voxelů od 0 do 100

Skript nejdříve transformuje a binarizuje masku (viz výše),  výstupy ukládá do složky <běh>.feat/reg a poté pomocí fslmeants vygeneruje průměrný signál za masky aplikované na  filtrovaná data (filtered_func_data.nii.gz). Výstupní soubor (textový soubor obsahující na každém řádku jednu hodnotu pro každý objem) je pojmenován jako <štítek>_timecourse_demeaned a je uložen v adresáři <běh>.feat zdrojové studie. Zároveň se zkopíruje do adresáře Results/seeds/<běh>/, kde jej posléze hledá navazující skript. Tento soubor je bezprostředně použitelný k zadání jako samostatná EV do GLM analýzy.

2) GLM seed analýza

Pro GLM analýzu je potřeba nejdříve ručně pomocí GUI Feat vytvořit vzorový design. Tento postup je popsán an stránkách FSL. Takto lze ovšem spustit vždy jen jednu analýzu zároveň, což je při větším počtu dat a oblastí zájmu časově náročné.

POZOR: Design je nutno připravit se stejným Pre-Stats jako při analýze, ze které byl extrahován signál z oblasti zájmu!

Další postup je tedy již automatizován. Také tento skript je součástí automatické smyčky loop a spouští se ze stejného adresáře jako předchozí krok:

loop [čísla studiií] -f=<*.nii.gz>:<možnosti>

čísla studií - pokud jsou definována (buď oddělena čárkou nebo jako rozsah s pomlčkou, v obou případech bez mezer), smyčka prochází jen uvedené studie a ignoruje vše ostatní, v opačném případě prochází vzestupně všechny studie
*.nii.gz - je název vstupních NIFTI souborů (ve formátu jako pro příkaz ls v úrovni adresáře Results)
možnosti - jsou uváděné bezprostředně za dvojtečkou bez mezer a jsou odděleny čárkami, jakékoliv mezery např. v  názvech souborů je potřeba předsadit zpětným lomítkem (""): d=<cesta k design.fsf> - je povinným parametrem a definuje úplnou cestu k souboru design.fsf, který je šablonou pro design Seed analýzy (včetně přípony fsf)
o=<štítek> - je nepovinným údajem, definuje štítek pro vygenerované adresáře, který následuje název odvozený od vstupního souboru (výchozí je prázdný)
e=<název souboru s daty> - je pro Seed analýzu prakticky povinným parametrem a definuje název souboru, ve kterém je uložena časová řada pro Seed-based analýzu, aktuální verze skriptu hledá tento soubor v adresáři Results/seeds/<název NIFTI souboru> (ověřit aktuální verzi!)
mpr - nepovinný přepínač (výchozí vypnuto), nutí skript aktualizovat úplnou cestu k Mprage_brain.nii.gz (nezbytné pro data registrováná nelineárně), soubor musí být v adresáři Results
mps - má stejnou funkci jako výše uvedený přepínač, cestu aktualizuje na MprageS_brain.nii.gz (pro převrácené analýzy)
r=<REGEXP1@REGEXP2> - nepovinný parametr, který je možno přidat opakovaně na jeden řádek, v souboru design.fsf nahrazuje pomocí příkazu sed hledaný řetězec (REGEXP1) řetězcem druhým (REGEXP2), akceptuje syntax jako sed
parametry regresorů mp, wm, csf, swm, scsf, gs přidávají do souboru design.fsf patřičné regresory. Parametr mp můsí být uveden vždy jako první. Více v kapitole potlačení šumu.

Skript vytvoří v adresáři Results podsložku designs, ve které posléze připraví design.fsf z uvedené šablony. Poté spustí standardně příkaz feat designs/<název odvozený od výstupního adresáře>/design.fsf. Následuje skupinová analýza, která již probíhá standardně jako analýza blokové nebo event-related úlohy.

Zpět na Manuál.

Kontaktujte nás

Tel.: +420 588 443 418

E-mail: phlustik(at)upol.cz