QMAKABAKA 2024-03-22 18:15 采纳率: 0%
浏览 2

关于#python#的问题:分割尺寸和spacing

#我在做分割影像组学实验
分割出来的mask大小为128×128×128,spacing为1×1×1,但是我训练验证的图像标签大小是128×128×128,spacing不是统一的,我想做影像组学实验的时候,是不是要把图像和分割出来的mask,他俩的size和spacing统一?
或者帮我改一下下面这段代码,我写的代码虽说是能把size和spacing改成128×128×128和1×1×1,但是内容被剪裁了很多
附:我写的代码

import os
import SimpleITK as sitk

def resize_nii_files(input_directory, output_directory, new_size=(128, 128, 128)):
    for filename in os.listdir(input_directory):
        if filename.endswith('.nii.gz'):
            input_filepath = os.path.join(input_directory, filename)
            output_filepath = os.path.join(output_directory, filename)
            image = sitk.ReadImage(input_filepath)
            
            # 获取当前尺寸和间距
            current_size = image.GetSize()
            current_spacing = image.GetSpacing()
            
            # 调整图像大小
            resampler = sitk.ResampleImageFilter()
            resampler.SetSize(new_size)
            resampled_image = resampler.Execute(image)
            
            # 插值调整间距
            resampled_spacing = [current_spacing[i] * current_size[i] / new_size[i] for i in range(3)]
            resampled_image.SetSpacing(resampled_spacing)
            
            # 更新为1x1x1
            resampled_spacing = [1.0, 1.0, 1.0]
            resampled_image = sitk.Resample(resampled_image, new_size, sitk.Transform(), sitk.sitkLinear, resampled_image.GetOrigin(), resampled_spacing, resampled_image.GetDirection(), 0.0, resampled_image.GetPixelID())
            
            # 保存调整后的图像
            sitk.WriteImage(resampled_image, output_filepath)

# 指定输入和输出目录
input_directory = 'xxx'
output_directory = 'yyy'

# 创建输出目录
if not os.path.exists(output_directory):
    os.makedirs(output_directory)

# 调整所有.nii.gz文件
resize_nii_files(input_directory, output_directory)


  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-22 18:15
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    你的问题是:在做分割影像组学实验时,分割出来的mask大小为128×128×128,spacing为1×1×1,但是你训练验证的图像标签大小是128×128×128,spacing不是统一的,你想知道是否要把图像和分割出来的mask,他俩的size和spacing统一? 回答: 在影像组学实验中,图像和mask的大小和间距应该保持一致,这有助于后续处理步骤的一致性和可靠性。 在代码方面,你的代码存在以下问题:
    1. 对于间距的修改,代码中使用了插值来调整间距,但插值可能会导致图像质量损失,因此建议直接设置间距为1x1x1。
    2. 对于图像大小的修改,代码中使用了ResampleImage filter来调整图像大小,但这会导致图像内容被剪裁。建议使用Crop filter来裁剪图像而不是使用ResampleImage filter来调整大小。 下面是修改后的代码:
    import os
    import SimpleITK as sitk
    def resize_nii_files(input_directory, output_directory, new_size=(128, 128, 128)):
        for filename in os.listdir(input_directory):
            if filename.endswith('.nii.gz'):
                input_filepath = os.path.join(input_directory, filename)
                output_filepath = os.path.join(output_directory, filename)
                image = sitk.ReadImage(input_filepath)
                
                # 获取当前尺寸和间距
                current_size = image.GetSize()
                current_spacing = image.GetSpacing()
                # 调整图像大小
                resampled_image = sitk.Crop(image, (current_size[0]-new_size[0])//2, 
                                            (current_size[1]-new_size[1])//2, (current_size[2]-new_size[2])//2,
                                            0,0,0)
                resampled_image.SetSpacing((1.0, 1.0, 1.0))
                # 保存调整后的图像
                sitk.WriteImage(resampled_image, output_filepath)
    # 指定输入和输出目录
    input_directory = 'xxx'
    output_directory = 'yyy'
    # 创建输出目录
    if not os.path.exists(output_directory):
        os.makedirs(output_directory)
    # 调整所有.nii.gz文件
    resize_nii_files(input_directory, output_directory)
    

    在修改后的代码中,我们使用了Crop filter来裁剪图像,并将间距设为1x1x1,以保证图像和mask的大小和间距一致。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月22日

悬赏问题

  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡
  • ¥20 基于MATLAB的TDOA
  • ¥15 为啥输入字体突然变了
  • ¥20 已知坐标,换成MATLAB可以用的数据
  • ¥15 这个python五子棋代码的每一句意思是什么啊
  • ¥15 求一段隐藏代码,隐藏一些内容