2017-03-07 81 views
0

我已经在SimpleITK中加载CT扫描。我想在NumPy中做一些非常简单的事情,但还没有想出如何在SimpleITK中完成它们。我希望在SimpleITK中提供速度。SimpleITK选择性地改变像素/切片

# NumPy: Changes all values of 100 to now become 500 
nparr = nparr[nparr == 100] = 500 

# SimpleITK: 
??? 

SimpleITK图像== 100将产生相同的尺寸,其中所有的强度== 100是1 /真的二进制图像。这是理想的。但我不相信SimpleITK不幸的支持布尔索引。完成这个最有效的方法是什么?

我想出了这个时髦的东西;但我希望能找到预期的方法/最佳实践意味着这样做:

# Cast because data type returned is uint8 otherwise 
difference = 500 - 100 
offset = SimpleITK.Cast(image == 100), sitk.sitkInt32) * difference 
image += offset 

回答

1

您可以使用BinaryTheshold过滤器。

结果= sitk.BinaryThreshold(图像,100,101,500,0)

应当只选择具有强度的像素100

1

您正在使用SimpleITK图像对象在numpy的风格来使用它的工作,你需要使用的方法GetArrayFromImageGetImageFromArray来再通过将imagedata转换为numpy数组来获得像素访问。

import SimpleITK as sitk 

difference = 500 - 100 
img_arr = sitk.GetArrayFromImage(image) 
offset = img_arr[img_arr == 100] * difference 
output = sitk.GetImageFromArray(image += offset) 
+0

我希望有一种方法来sitk内做瓦特/ o转换为numpy,因为许多场合的功能更加优化并且运行速度更快 –