在SimpleITK中操作3D图像切片并创建新的3D图像

B. *_*her 3 python 3d 2d itk

我从NIfTI文件中读取了一个3D图像到SimpleITK(使用python),获取每个轴向切片,用它做一些事情并将新的2D切片重新插入到具有(希望)适当尺寸的3D体积中.例如,

output = sitk.Image(original.GetSize(), sitk.sitkFloat32)
output.CopyInformation(original)
for z in numpy.arange(original.GetDepth()):
    image = original[:,:,z]
    << Do Something in SimpleITK>>
    << Produce a new 2D image = newimage >>
    output[:,:,z] = newimage
Run Code Online (Sandbox Code Playgroud)

最后一步是抛出一个错误

In [???]: (executing line ??? of "code.py")
Traceback (most recent call last):
  File "code.py", line ???, in <module>
    output[:,:,z] = newimage
  File "/Library/Python/2.7/site-packages/SimpleITK-0.8.1-py2.7-macosx-10.10-intel.egg/SimpleITK/SimpleITK.py", line 3894, in __setitem__
    raise IndexError("invalid index")
IndexError: invalid index
Run Code Online (Sandbox Code Playgroud)

在for循环中完成最后一步的正确语法(或命令集)是什么?

Dav*_*hen 6

使用"粘贴"功能将切片图像粘贴到卷中.唯一的小技巧是粘贴功能假设两个图像都是3d.因此,您需要将2d图像转换为3d图像(z大小为1).您可以使用JoinSeries函数执行此操作.

下面是一个示例python脚本,用于说明这将如何工作

#! /usr/bin/env python

import SimpleITK as sitk

# make a black volume
vol_img = sitk.Image(100,100,100,sitk.sitkUInt8)

# make a white slice
slice_img = sitk.Image(100,100,sitk.sitkUInt8)
slice_img = slice_img + 200

# convert the 2d slice into a 3d volume
slice_vol = sitk.JoinSeries(slice_img)

# z insertion location
z = 42

# paste the 3d white slice into the black volume
pasted_img = sitk.Paste(vol_img, slice_vol, slice_vol.GetSize(), destinationIndex=[0,0,z])

sitk.Show(pasted_img)
Run Code Online (Sandbox Code Playgroud)