数据集是LITS2017,任务是在3D下进行批量进行预处理,包括重采样与归一化,最后再以nii格式保存。
解压之后大概是volume和segmentation,volume是ct原图,segmentation是对应的ground truth,3D格式保存在nii文件中。
第一步是打算先读取长宽维度,转化为numpy形式重采样与归一化,然后再以nii格式保存
1、读取长宽维度(512×512×75)
import cv2
import numpy as np
import nibabel as nb
import os
import matplotlib.pyplot as plt
ct_fil='D:/volume_0.nii'
#=os.listdir('H:/医学公开数据集/LIST2017/LIST2017/segmentation')
'''
分别读取nii文件夹,volume为原始ct图像,segmentation为分割结果
'''
img=nb.load(ct_fil)
print(img)
print(img.header('db_name'))
width,height,queue=img.dataobj.shape
num=1
for i in range(0,queue,10):
img_arr=img.dataobj[:,:,i]
plt.subplot(5,4,num)
plt.imshow(img_arr,cmap='gray')
num+=1
plt.show()
批量获取nii格式的array
import cv2
import numpy as np
import SimpleITK as itk
import os
import matplotlib.pyplot as plt
import nibabel as nib
def nii(niifile):
filename=os.listdir(filepath)
for i in filename:
path=os.path.join(filepath,i)
img=itk.ReadImage(path)
array=itk.GetArrayFromImage(img)
print(array.shape)
filepath='D:/volume/'
nii(filepath)
origin
import cv2
import numpy as np
import SimpleITK as itk
import os
import matplotlib.pyplot as plt
import nibabel as nib
def nii(niifile):
filename=os.listdir(filepath)
for i in filename:
path=os.path.join(filepath,i)
img=itk.ReadImage(path)
origin=np.array(img.GetOrigin())
print(origin)
filepath='D:/volume/'
nii(filepath)
一个预处理的代码,刚开始学习python连os都不会,学习之后可以进行批量处理了
import numpy as np
import SimpleITK as itk
import os
import matplotlib.pyplot as plt
import nibabel as nib
def nii(files,newspacing=[0.7,0.7,1.0]): #设定新spacing为0.7,0.7,1.0
#filename=os.listdir(filepath)
for i in (files):
#path=os.path.join(filepath,i)
img=itk.ReadImage(path+i) #读取nii
filename,fileexp=os.path.splitext(i) #get filename
original_spacing=img.GetSpacing() #get spacing
original_size=img.GetSize() #get size
new_size=[int(np.round(original_size[0] * original_spacing[0]/ newspacing[0])),
int(np.round(original_size[1] * original_spacing[1] / newspacing[1])),
int(np.round(original_size[2] * original_spacing[2] / newspacing[2]))
] #新size
resample=itk.ResampleImageFilter()
resample.SetOutputDirection(img.GetDirection())
resample.SetOutputOrigin(img.GetOrigin())
resample.SetSize(new_size)
resample.SetOutputSpacing(newspacing)
newimg=resample.Execute(img)
#itk.WriteImage(newimg, './resample.nii')
vol=newimg/255 #归一化
#newvol=nib.Nifti1Image(vol,affine=None)
#print(vol.shape)
#outfile = 'D:/re/'
itk.WriteImage(vol,'D:/test1/'+filename+'.nii') #save and new files
#return vol
path='D:/test/' #volume文件所在路径
#savepath='D:/volume/re/'
files=os.listdir(path) #获取文件
nii(files)