SimpleITK 调整图像大小

Mig*_*iro 4 python image image-processing computer-vision simpleitk

我有一套 3D 卷,我正在阅读 SimpleITK

import SimpleITK as sitk
for filename in filenames:
    image = sitk.ReadImage(filename)
Run Code Online (Sandbox Code Playgroud)

每个卷都有不同的大小、间距、原点和方向。此代码为不同的图像生成不同的值:

print(image.GetSize())
print(image.GetOrigin())
print(image.GetSpacing())
print(image.GetDirection())
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何将图像转换为具有相同的大小和间距,以便它们在转换为numpy数组时都具有相同的分辨率和大小。就像是:

import SimpleITK as sitk
for filename in filenames:
    image = sitk.ReadImage(filename)
    image = transform(image, fixed_size, fixed_spacing)
    array = sitk.GetArrayFromImage(image)
Run Code Online (Sandbox Code Playgroud)

ziv*_*ivy 8

这样做的方法是使用具有固定/任意大小和间距的 Resample 函数。下面是一个代码片段,显示了这个“reference_image”空间的构造:

reference_origin = np.zeros(dimension)
reference_direction = np.identity(dimension).flatten()
reference_size = [128]*dimension # Arbitrary sizes, smallest size that yields desired results. 
reference_spacing = [ phys_sz/(sz-1) for sz,phys_sz in zip(reference_size, reference_physical_size) ]

reference_image = sitk.Image(reference_size, data[0].GetPixelIDValue())
reference_image.SetOrigin(reference_origin)
reference_image.SetSpacing(reference_spacing)
reference_image.SetDirection(reference_direction)
Run Code Online (Sandbox Code Playgroud)

对于交钥匙解决方案,请查看此 Jupyter 笔记本,其中说明了如何使用 SimpleITK 中的可变大小图像进行数据增强(上面的代码来自笔记本)。您也可以从SimpleITK 笔记本存储库中找到其他笔记本。

  • 我创建了一个 [github gist](https://gist.github.com/zivy/79d7ee0490faee1156c1277a78e4a4c4),它只是展示了如何进行重采样。对于大多数情况,线性插值器就足够了,但对于标签插值,您需要最近的邻居。如果映射到图像边界之外,则 default_intensity_value 是要设置的值。 (2认同)