1

我已经在 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
4

2 回答 2

2

您正在使用 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)
于 2017-04-04T18:07:51.317 回答
2

您可以使用 BinaryTheshold 过滤器。

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

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

于 2017-10-02T19:40:24.710 回答