LITS数据预处理(一)

数据集是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)

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值