对于深度学习任务,特征提取是非常重要的一步。
!pip install nibabel
首先要下载NiBabel库,NiBabel提供对一些常见医学和神经影像文件格式的读/写访问,包括ANALYZE(plain,SPM99,SPM2及更高版本),GIFTI,NIfTI1,NIfTI2,CIFTI-2,MINC1,MINC2,AFNI BRIK/HEAD,MGH和ECAT以及Philips PAR/REC。
img = nib.load(path)
通过路径加载PET图像
img = img.dataobj[:, :, :, 0]
img.dataobj即图片的图像矩阵,通过[:, :, :, 0]获得图片第一个通道的数据
random_img = img[:, :, np.random.choice(range(img.shape[2]), 10)]
随机筛选其中10个通道提取特征
feat = [
(random_img != 0).sum(), # 非零像素的数量
(random_img == 0).sum(), # 零像素的数量
random_img.mean(), # 平均值
random_img.std(), # 标准差
len(np.where(random_img.mean(0))[0]), # 在列方向上平均值不为零的数量
len(np.where(random_img.mean(1))[0]), # 在行方向上平均值不为零的数量
random_img.mean(0).max(), # 列方向上的最大平均值
random_img.mean(1).max() # 行方向上的最大平均值
]
对图片计算统计值
if 'NC' in path:
return feat + ['NC']
else:
return feat + ['MCI']
由于文件夹名称为样本类别
故根据路径path的字符串来判断样本类别并返回保存