9.7.9. 理解NiftiMasker和mask计算
在本例中,在本例中,Nifti掩码器(Nifti masker)用于自动计算掩码。
三种策略:
默认策略基于背景(background)
还可以使用模板(template)
对于原始EPI(raw EPI),如在静息状态或看电影时间序列中,我们需要使用NiftiMasker的“EPI”策略。
此外,我们展示了使用epi时如何微整不同参数nilearn.masking.compute_epi_mask。
from nilearn.input_data import NiftiMasker
import nilearn.image as image
from nilearn.plotting import plot_roi, plot_epi, show
基于背景计算掩码(mask)
计算掩码的默认策略(例如在NiftiMasker中)是尝试检测背景。
对于已经被修饰(masked)的数据,这将很好地工作,因为它位于一个同质的背景上
#加载Miyawaki数据
# Load Miyawaki dataset
from nilearn import datasets
miyawaki_dataset = datasets.fetch_miyawaki2008()
#打印数据集的基本信息
# print basic information on the dataset
print('First functional nifti image (4D) is located at: %s' %
miyawaki_dataset.func[0]) # 4D data
miyawaki_filename = miyawaki_dataset.func[0]
miyawaki_mean_img = image.mean_img(miyawaki_filename)
plot_epi(miyawaki_mean_img, title='Mean EPI image')
使用默认(基于背景)
masker = NiftiMasker()
masker.fit(miyawaki_filename)
# Plot the generated mask using the mask_img_ attribute
plot_roi(masker.mask_img_, miyawaki_mean_img,
title="Mask from already masked data")
用generate_report方法绘制生成的mask
report = masker.generate_report()
report
9.7.9.2. 计算raw EPI数据的mask
对于raw EPI 数据来说没有一致的背景,因此要使用新的策略
#Load movie watching based brain development fmri dataset
dataset = datasets.fetch_development_fmri(n_subjects=1)
epi_filename = dataset.func[0]
#为了加速计算,把数据限制在100帧
# Restrict to 100 frames to speed up computation
from nilearn.image import index_img
epi_img = index_img(epi_filename, slice(0, 100))
#显示背景
# To display the background
mean_img = image.mean_img(epi_img)
plot_epi(mean_img, title='Mean EPI image')
从EPI图像中提取简单的掩码我们需要指定一个“epi”策略,因为这是原始EPI数据。
masker = NiftiMasker(mask_strategy='epi')
masker.fit(epi_img)
report = masker.generate_report()
report
生成较为展开的掩码
我们可以通过使用NiftiMasker的mask_args参数增加打开步骤的数量(opening=10)来微调掩码的轮廓。这有效地对掩码的外部体素层执行侵蚀和膨胀操作,例如可以移除图像中剩余的颅骨部分。
masker = NiftiMasker(mask_strategy='epi', mask_args=dict(opening=10))
masker.fit(epi_img)
report = masker.generate_report()
report
生成较低截止值的掩码
NiftiMasker调用nilearn.masking.compute_epi_mask函数从EPI计算掩码。它有两个重要的参数:下限截止和上限截止。这些设置了灰度值界限,在该界限中,掩码算法将搜索其阈值(0是图像的最小值,1是最大值)。我们将在这里增加下限,以强制选择那些在EPI图像中显示为明亮的体素。
masker = NiftiMasker(mask_strategy='epi',
mask_args=dict(upper_cutoff=.9, lower_cutoff=.8,
opening=False))
masker.fit(epi_img)
report = masker.generate_report()
report
使用MNI模板计算掩码
还可以从MNI灰质模板计算掩模。在这种情况下,它被重采样到目标图像
masker = NiftiMasker(mask_strategy='template')
masker.fit(epi_img)
report = masker.generate_report()
report