2015-05-14 160 views
2

我有一个3D图像从NIfTI文件读入SimpleITK(使用python),取出每个轴向切片,做一些事情并重新插入新的2D用(希望)适当的尺寸切成3D体积。例如,在SimpleITK中对3D图像的切片进行操作并创建新的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 

的最后一步是抛出一个错误

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 

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

回答

0

我还没有体验simpleITK,但似乎他们提供了一个Paste方法(example

5

使用粘贴功能,以您的切片图像粘贴到卷。唯一的小窍门是Paste函数假定两个图像都是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)