引文: nii格式是医学图像常用格式,类似mhd,可以显示三维信息。以前使用.npy格式,主要是无法直接查看,因此考虑了解nii格式。
1、Matlab添加工具箱NIfTI的方法
(Linux下savepath会报错:Unable to save path to file ‘/usr/local/MATLAB/R2016b/toolbox/local/pathdef.m’,权限问题,可以
sudo chmod 666 /usr/local/MATLAB/R2016b/toolbox/local/pathdef.m
)
python下SimleITK(简写为sitk)也可以保存nii。
sitk读取matlab和sitk保存的nii没有差异。
matlab读取matlab和sitk保存的nii有差异。差异来源于nii中头文件差异,具体也不清楚。
具体应打开图像后再自行检查。
# read by sitk
sitk.ReadImage(ct_path, sitk.sitkInt16)
ct_image = sitk.ReadImage(ct_path, sitk.sitkInt16)
ct_array = sitk.GetArrayFromImage(ct_image)
# write by sitk
ct_sitk = sitk.GetImageFromArray(ct_array)
sitk.WriteImage(ct_sitk, ct_path)
% write by matlab
imgs_nii=make_nii(permute(imgs,[2,1,3])); % nii into matlab, maybe caused by Column-major in matlab
save_nii(imgs_nii, 'imgs.nii');
% read by matlab
imgs_nii = load_nii('imgs.nii');
imgs = imgs_nii.img;
imgs = fliplr(rot90(imgsa)); % read nii from sitk
imgs = permute(imgsa, [2,1,3]); % read nii from matlab
2、nii保存数据类型较多,常用(u)int8(16,32),float32(4),所以保存CT图像时可用int16或float32(文件会大一倍),保存CT分割轮廓可用int8,由于轮廓大部分是0元素,可以采用.nii.gz格式,极大减少文件大小,只需在保存时将.nii换为.nii.gz即可。CT可以不换,会降低读取速度,可自行考虑。