SimpleITK选择性地改变像素/切片

时间:2017-03-07 14:40:52

标签: python numpy filter masking simpleitk

我在SimpleITK中加载了CT扫描。我想在NumPy中做一些非常简单的事情,但是还没弄清楚如何在SimpleITK中做到这些。我想在SimpleITK中为速度做这些。

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

# SimpleITK:
???

SimpleITK image == 100将生成相同维度的二进制图像,其中所有强度== 100均为1 / True。这是期望的。但我不相信SimpleITK不幸支持布尔索引。什么是实现这一目标的最有效方法?

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

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

2 个答案:

答案 0 :(得分:1)

您正在使用SimpleITK图像对象以numpy样式使用它,您需要使用方法GetArrayFromImageGetImageFromArray然后通过将imagedata转换为numpy数组来获取像素访问权。 / p>

import SimpleITK as sitk

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

答案 1 :(得分:1)

您可以使用BinaryTheshold过滤器。

result = sitk.BinaryThreshold(image,100,101,500,0)

那应该只选择强度为100的像素。