我正在使用SimpleITK加载分层tiff图像,它是一个具有30个平面/切片的体积图像。
在玩了很多skimage
和imageio
之后,我发现SimpleITK
是处理体积图像的最佳方式,但问题是这些功能似乎都不适用于我的图像。
img = sitk.ReadImage(path)
在读取图像后,我可以很容易地将其转换为numpy
,甚至可以使用sitk.Show()
显示它,以便正确加载。但我在上面使用的任何功能,例如:
img_s = sitk.CurvatureFlow(img, 0.125, 5)
# or
sitk.IntensityWindowing(img)
# or
img_m = sitk.ConnectedThreshold(img, (257,419,7))
发出警告:
sitk::错误:像素类型:16位无符号整数的矢量不是在3D中按类别支持itk::simple::
我也尝试转换为任何其他数据类型,但我再次出现错误:
img2 = sitk.Cast(img, sitk.sitkFloat32)
sitk::错误:筛选器不支持从的强制转换向量强制转换16位无符号整数到32位浮点
我尝试了上面的2D变体:
img_m = sitk.ConnectedThreshold(img2[:,:,7], [(257,419)])
但这次我得到了错误:
sitk::错误:像素类型:2D中不支持64位浮点矢量byclass itk::simple::ConnectedThresholdImageFilter
知道是什么原因造成的吗?
附言:我读过这个问题:SimpleITK N4BiasFieldCorrection,不适用于任何数据类型,我相信这不是重复的,因为他的问题是通过铸造解决的,而我的问题甚至不适用于铸造。
感谢
看起来您的图像具有矢量像素类型。许多过滤器不适用于矢量像素。您需要选择向量的一个特定元素来应用这样的过滤器。
可以使用VectorIndexSelectionCastImageFilter或函数VectorIndexCSelectionCast将矢量的特定通道提取到标量图像中。