标准NIFTI图像的扩展名是.nii,包含了头文件及图像资料。单独的.nii格式文件的优势就是可以使用标准的压缩软件(如gzip)进行压缩,而且一些分析软件包(比如FSL)可以直接读取和写入压缩的.nii文件(扩展名为.nii.gz)。
什么是npy文件
NumPy 为 ndarray 对象引入了一个简单的文件格式:npy。
npy 文件用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息。
常用的 IO 函数有:
Python读取npy文件代码
import numpy as np
import matplotlib.pyplot as plt
import cv2
image = np.load("4X_99.npy", encoding='bytes')
print(image.shape)
for i in range(0, image.shape[0]):
plt.imshow(image[i, : , :])
cv2.imwrite("4X_99_"+str(i)+".png", image[i, : , :])
# cv2.imwrite(saveFile, img3) # 保存图像文件
plt.show()
Python读取nii文件代码
import numpy as np
import os # 遍历文件夹
import nibabel as nib # nii格式一般都会用到这个包
import imageio # 转换成图像
from PIL import Image
np.set_printoptions(threshold=np.inf)
def nii_to_image(niifile):
return 0
filepath = 'NIIDate/' # 读取本代码同个文件夹下所有的nii格式的文件
filenames = os.listdir(filepath)
imgfile = 'NII/'
slice_trans = []
for f in filenames: # 开始读取nii文件
s = f[-3:]
print(s)
if s != 'nii':
continue
s1 = f[:-4]
print(s1)
imgfile_path = imgfile + s1
print("imgfile_path:" + imgfile_path)
img_path = os.path.join(filepath, f)
# shape 256 256 150
img = nib.load(img_path) # 读取nii
print("img:")
print(img)
# shape 256 256 150
img_fdata = img.get_fdata()
fname = f.replace('.nii', '') # 去掉nii的后缀名
img_f_path = os.path.join(imgfile, fname)
if not os.path.exists(img_f_path):
os.mkdir(img_f_path)
# 创建nii对应的图像的文件夹
# # if not os.path.exists(img_f_path):
# os.mkdir(img_f_path) #新建文件夹
# #开始转换为图像
if '.gz' in s1:
(x, y, z, _) = img.shape
print("img2:")
print(img.shape)
else:
(x, y, z) = img.shape # x:256 y:259 z:150
print("img3:")
print(img.shape)
for i in range(z): # z是图像的序列
silce = img_fdata[:, :, i] # 选择哪个方向的切片都可以
imageio.imwrite(os.path.join(img_f_path, '{}_mask.png'.format(i)), silce)
img = Image.open(os.path.join(img_f_path, '{}_mask.png'.format(i)))
img.save(os.path.join(img_f_path, '{}_mask.png'.format(i)))
参考:全网最详细 Python如何读取NIFTI格式图像(.nii文件)和 .npy格式文件和pkl标签文件内容 - 知乎