2015-05-14 157 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)