Python读取NIFTI格式图像(.nii文件)和 .npy格式文件

什么是nii文件

标准NIFTI图像的扩展名是.nii,包含了头文件及图像资料。单独的.nii格式文件的优势就是可以使用标准的压缩软件(如gzip)进行压缩,而且一些分析软件包(比如FSL)可以直接读取和写入压缩的.nii文件(扩展名为.nii.gz)。

什么是npy文件

NumPy 为 ndarray 对象引入了一个简单的文件格式:npy。

npy 文件用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息。

常用的 IO 函数有:

  • load() 和 save() 函数是读写文件数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy 的文件中。

 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标签文件内容 - 知乎

你可能感兴趣的:(~~~医学影像~~~,python,开发语言,opencv)