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

SimpleITK Selectively Alter Pixels / Slicing

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

您正在使用 SimpleITK 图像对象以 numpy 样式使用它您需要使用方法 GetArrayFromImageGetImageFromArray 然后通过将图像数据转换为 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)

您可以使用 BinaryTheshold 过滤器。

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

应该只有 select 个强度为 100 的像素。