nii格式的图像转化numpy/png

.nii格式的图像转化numpy格式
ADNI数据集:.nii格式转换为.png格式

将一组png图片转为nii.gz

使用Anaconda搭建SimpleITK开发环境


import nibabel as nib
import os
import numpy as np

#第一种情况
#使用r来转译的话,后面使用windows默认的路径,但最后不能待分割的\,后续使用os.path.join来连接路径,会自动加上\
img_path = r'E:\TQ\test seg and label\coronary seg-part\test1-coronary segmentation.nii'
saveimg_path = 'E:/TQ/test seg and label/coronary seg-part/npy_img/'

img_names = os.listdir(img_path)

for img_name in img_names:
    print(img_name)
    img = nib.load(os.path.join(img_path,img_name)).get_data() #载入
    np.save(saveimg_path + str(img_name).split('.')[0] + '.npy', img)


#第二种情况
img_path = 'E:/TQ/test seg and label/coronary seg-part/test1-coronary segmentation.nii/'
saveimg_path = 'E:/TQ/test seg and label/coronary seg-part/npy_img/'

img_names = os.listdir(img_path)


for img_name in img_names:
    print(img_name)
    img = nib.load(img_path + img_name).get_data() #载入
    img = np.array(img)
    np.save(saveimg_path + str(img_name).split('.')[0] + '.npy', img) #保存

错误:显示保存的者数组
不能将数据直接保存为图片,用Image.fromarray转化

import numpy as np
import cv2
import matplotlib.pyplot as plt
image = np.load("test1-coronary segmentation.npy")
image.shape
for  i in range(image.shape[2]):
	plt.imshow(image[:,:,i])
	cv2.imwrite(str(i)+".png",image[:,:,i])
	plt.show()

正确版:

img_path = os.path.join(r'E:\3.nii\3.nii')
img=nib.load(img_path)
img = img.get_fdata()

# np.save('1.npy', img)
# image = np.load("1.npy")

image0 = img[:,:,0]
plt.imshow(image0)
plt.show()
#不转为8位,会提提示不能将32位转为png
new_map = Image.fromarray(np.uint8(image0))
new_map.save('2.png')

AD = cv.imread(r'2.png')
AD1 = AD[:, :, 0]
AD2 = AD[:, :, 1]

直接显示图片

import matplotlib
from matplotlib import pylab as plt
import nibabel as nib
from nibabel import nifti1
from nibabel.viewers import OrthoSlicer3D


img_path=os.path.join(r'E:\3.nii\3.nii')
# 
img=nib.load(img_path)
#print(img.shape)#(160, 192, 144)
width,height,queue=img.dataobj.shape

for i in range(queue):
    img_arr=img.dataobj[:,:,i]
#     plt.subplot(5,4,num)
    plt.imshow(img_arr,cmap='gray')
    num+=1
    plt.show()
import os
import numpy as np
import nibabel as nib
import imageio
import matplotlib
from nibabel.viewers import OrthoSlicer3D
from matplotlib import pylab as plt
    
file = 'D:\\图像分割\\AD\\AD_015\\AD_015.nii'    #你的nii或者nii.gz文件路径
img = nib.load(file)    
print(img)


def read_niifile(niifilepath):           #读取niifile文件
    img = nib.load(niifilepath)          #下载niifile文件(其实是提取文件)
    img_fdata = img.get_fdata()          #获取niifile数据
    return img_fdata
 
def save_fig(niifilepath,savepath):     #保存为图片
    fdata = read_niifile(niifilepath)   #调用上面的函数,获得数据
    (x,y,z,_) = fdata.shape             #获得数据shape信息:(长,宽,维度-切片数量,第四维)
    for k in range(z):
        silce = fdata[:,:,k,:]          #三个位置表示三个不同角度的切片
        imageio.imwrite(os.path.join(savepath,'{}.png'.format(k)),silce)
                                        #将切片信息保存为png格式
 
if __name__=='__main__':
    niifilepath='D:\\图像分割\\AD\\AD_015\\AD_015.nii'
    savepath='F:\\AD\\AD_015'
    if not os.path.exists(savepath):
        os.makedirs(savepath)
    save_fig(niifilepath,savepath)

猜你喜欢

转载自blog.csdn.net/qq_37602161/article/details/112592572