python 批量resample 数据

def get_filelist(dir, Filelist):

    if os.path.isdir(dir):

        for s in os.listdir(dir):
            newDir = os.path.join(dir, s)
            Filelist.append(newDir)

    return Filelist




list = get_filelist(NII_DIR, [])
for e in list:
    Refimg = sitk.ReadImage(e, sitk.sitkFloat64)
    resample = sitk.ResampleImageFilter()
    resample.SetOutputDirection(Refimg.GetDirection())
    resample.SetOutputOrigin(Refimg.GetOrigin())
    spacing = Refimg.GetSpacing()
    resample.SetInterpolator(sitk.sitkNearestNeighbor)
    resample.SetReferenceImage(Refimg)
    Tar_img = sitk.ReadImage(e)
    resample.SetReferenceImage(Refimg)
    RefimgSize1 = sitk.GetArrayFromImage(Refimg).shape
    RefimgSize = [RefimgSize1[2],RefimgSize1[1],int(RefimgSize1[0]/3)]
    resample.SetSize(RefimgSize)
    ReSpacing = [spacing[0], spacing[1], spacing[2] * 3.0]
    resample.SetOutputSpacing(ReSpacing)
    newimage = resample.Execute(Tar_img)
    sitk.WriteImage(newimage, e)

以下是3D

import os
import pydicom
import numpy as np
import SimpleITK as sitk

# 设置DICOM文件路径
dcm_folder = 'E:/SRS00003/'

# 读取DICOM序列
dcm_files = [os.path.join(dcm_folder, f) for f in os.listdir(dcm_folder)]
dcm_slices = [pydicom.read_file(f) for f in dcm_files]

# 提取DICOM数据和元数据
dcm_data = np.stack([s.pixel_array for s in dcm_slices])
dcm_spacing = np.array([float(dcm_slices[0].PixelSpacing[0]), float(dcm_slices[0].PixelSpacing[1]), float(dcm_slices[0].SliceThickness)])

# 将DICOM数据转换为SimpleITK图像
dcm_image = sitk.GetImageFromArray(dcm_data)
dcm_image.SetSpacing(dcm_spacing)

# 重新采样到1mm间距
resampled_spacing = (dcm_spacing[0], dcm_spacing[1], 1.0)
resampled_size =[dcm_image.GetSize()[0],dcm_image.GetSize()[1],dcm_image.GetSize()[2]*3]

resampled_image = sitk.Resample(dcm_image, resampled_size, sitk.Transform(), sitk.sitkLinear, dcm_image.GetOrigin(), resampled_spacing, dcm_image.GetDirection(), 0.0, dcm_image.GetPixelID())

# 将SimpleITK图像转换为Numpy数组
resampled_data = sitk.GetArrayFromImage(resampled_image)

# 保存为Nifti格式的图像文件
output_folder = 'E:/output/out.nii.gz'
resampled_image = sitk.GetImageFromArray(resampled_data)
resampled_image.SetSpacing(resampled_spacing)
sitk.WriteImage(resampled_image, output_folder)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

COSummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值