整理的一些数据预处理代码

点击查看代码
import numpy as np
import SimpleITK as sitk

###############################################################################################---重采样
def resample_image(itk_image, out_spacing=[1.0, 1.0, 1.0], is_label=True):
    '''
    	gz_path = 'PANCREAS_0015.nii.gz'
    	print('测试文件名为:', gz_path)

    	# 使用sitk读取对应的数据
    	Original_img = sitk.ReadImage(gz_path)
    	print('原始图像的Spacing:', Original_img.GetSpacing())
    	print('原始图像的Size:', Original_img.GetSize())

    	# 对数据进行重采样
    	Resample_img = resample_image(Original_img)
    	print('经过resample之后图像的Spacing是:', Resample_img.GetSpacing())
    	print('经过resample之后图像的Size是:', Resample_img.GetSize())
    	sitk.WriteImage(Resample_img,gz_path)
    '''
    original_spacing = itk_image.GetSpacing()
    original_size = itk_image.GetSize()

    out_size = [
        int(np.round(original_size[0] * (original_spacing[0] / out_spacing[0]))),
        int(np.round(original_size[1] * (original_spacing[1] / out_spacing[1]))),
        int(np.round(original_size[2] * (original_spacing[2] / out_spacing[2])))
    ]
    resample = sitk.ResampleImageFilter()
    resample.SetOutputSpacing(out_spacing)
    resample.SetSize(out_size)
    resample.SetOutputDirection(itk_image.GetDirection())
    resample.SetOutputOrigin(itk_image.GetOrigin())
    resample.SetTransform(sitk.Transform())
    resample.SetDefaultPixelValue(itk_image.GetPixelIDValue())

    if is_label:
        resample.SetInterpolator(sitk.sitkNearestNeighbor)
    else:
        resample.SetInterpolator(sitk.sitkBSpline)

    return resample.Execute(itk_image)
###############################################################################################---获取可以包裹mask的最小bbox,根据bbox截取图片

def get_bbox_from_mask(mask, outside_value=0):
    """

     file_path=path
     old_img = sitk.ReadImage(file_path)
     img_arr = sitk.GetArrayFromImage(old_img)
     bbox = get_bbox_from_mask(img_arr)

    """

    mask_voxel_coords = np.where(mask != outside_value)      #返回值是索引
    minzidx = int(np.min(mask_voxel_coords[0]))
    maxzidx = int(np.max(mask_voxel_coords[0])) + 1          #这里+1因为列表索引最大值不能到头,如[0,5],只有0,1,2,3,4这五个值
    minxidx = int(np.min(mask_voxel_coords[1]))
    maxxidx = int(np.max(mask_voxel_coords[1])) + 1
    minyidx = int(np.min(mask_voxel_coords[2]))
    maxyidx = int(np.max(mask_voxel_coords[2])) + 1
    return [[minzidx, maxzidx], [minxidx, maxxidx], [minyidx, maxyidx]]

def crop_to_bbox(image, bbox):
    """
      # file=path1
      # out_file=path2
      # old_img = sitk.ReadImage(file)
      # img_arr = sitk.GetArrayFromImage(old_img)
      # print(img_arr.shape)
      # bbox=[[minzidx, maxzidx], [minxidx, maxxidx], [minyidx, maxyidx]]
      # img_arr = crop_to_bbox(img_arr, bbox)
      # print("new shape: ", img_arr.shape)
      # img = sitk.GetImageFromArray(img_arr)
      # img.SetOrigin(old_img.GetOrigin())
      # img.SetDirection(old_img.GetDirection())
      # img.SetSpacing(old_img.GetSpacing())
      # sitk.WriteImage(img,out_file)
      # print(bbox)
      """
    assert len(image.shape) == 3, "only supports 3d images"
    # slice是切片函数,参数为:起始值,终止值,[步长]
    resizer = (slice(bbox[0][0], bbox[0][1]), slice(bbox[1][0], bbox[1][1]), slice(bbox[2][0], bbox[2][1]))
    return image[resizer]
###############################################################################################-------数据归一化
"""
image = sitk.ReadImage(path1)
resacleFilter = sitk.RescaleIntensityImageFilter()
resacleFilter.SetOutputMaximum(1)               #此处0,1设置成0,255就代表将图像的灰度值归一化到0-255
resacleFilter.SetOutputMinimum(0)
image = resacleFilter.Execute(image)
sitk.WriteImage(image, path2)
"""
###############################################################################################
posted @   原来是只呆燕  阅读(243)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示