这篇教程python使用SimpleITK 和 Nibabel 读取医学图像 nii 数据并保存为图片写得很实用,希望能帮到您。
SimpleITK 和 Nibabel 的区别:
SimpleITK 加载数据是channel_first,即(155,240,240);
Nibabel 是 channel_last,即(240,240,155),其中155是图像通道数,也就是155张图像,可以把nii看成二维图像,也可以看成三维。
But nibabel加载出来的图像被旋转了90度,横过来了,不知道什么原因~亟待解决~
-
-
-
-
-
img = sitk.ReadImage(path)
-
data = sitk.GetArrayFromImage(img)
-
-
-
-
for i in range(data.shape[0]):
-
io.imshow(data[i,:,:], cmap = 'gray')
-
-
-
-
-
-
io.imshow(ori_img[60], cmap = 'gray')
-
-
-
path = 'F:/my_data/t1ce.nii.gz'
-
-
-
-
-
import matplotlib.pyplot as plt
-
-
-
image_data = nib.load(path).get_data()
-
-
-
-
plt.imshow(ori_img[:,:,85], cmap = 'gray')
-
-
-
path = 'F:/my_data/t1ce.nii.gz'
-
-
.nii文件是NIFTI格式的文件,出现的原因是原来一种图像格式是ANALYZE 7.5 format,但是这个图像格式缺少一些信息,比如没有方向信息,病人的左右方位等,如果需要包括额外的信息,就需要一个额外的文件,比如ANALYZE7.5就需要一对<.hdr, .img>文件来保存图像的完整信息。因此,解决这个问题Data Format Working Group (DFWG) 将图像格式完整的定义为NIFTI(Neuroimaging Informatics Technology Initiative)格式。[4]
这里介绍将多个nii文件(保存在一个文件夹下)转换成png图像。且图像单个文件夹的名称与nii名字相同。
-
-
-
-
-
-
def nii_to_image(niifile):
-
filenames = os.listdir(filepath)
-
-
-
-
-
img_path = os.path.join(filepath, f)
-
-
img_fdata = img.get_fdata()
-
fname = f.replace('.nii','')
-
img_f_path = os.path.join(imgfile, fname)
-
-
if not os.path.exists(img_f_path):
-
-
-
-
-
-
silce = img_fdata[i, :, :]
-
imageio.imwrite(os.path.join(img_f_path,'{}.png'.format(i)), silce)
-
-
-
if __name__ == '__main__':
-
-
-
代码是我自己写的,用于处理ADNI的nii格式完全有效。
有问题欢迎指教,一起进步哟!
这几天总有人问问题,这里总结一下常见问题:
1.出现warning不要紧,数据集处理得没问题就行(个人观点);
2.(x,y,z) = img.shape会报错,
这是因为不同的 nii 的shape不同,比如有的是(256,256,155,1),有的是(256,256,155),这时候先查询nii文件的信息(查询代码:https://blog.csdn.net/weixin_43330946/article/details/91538695),然后修改成(x,y,z,_)、(x,y)就可以了。如果文件夹中nii的shape有多种可能,写一个 if 语句就可以啦。
深度学习训练时利用python处理nii文件 Ubuntu查看当前文件夹路径 |