我在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
答案 0 :(得分:1)
您正在使用SimpleITK图像对象以numpy样式使用它,您需要使用方法GetArrayFromImage
和GetImageFromArray
然后通过将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的像素。