.nii格式的图像转化numpy格式
ADNI数据集:.nii格式转换为.png格式
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)