SimpleITK N4BiasFieldCorrection,不适用于任何数据类型

时间:2016-10-12 13:18:06

标签: python

刚刚安装了最新版本的SimpleITK,我正在尝试运行一个简单的代码:

im = sitk.ReadImage('img.nii.gz')
im_bin = sitk.ReadImage('img_bin.nii.gz')
im_bfc = sitk.N4BiasFieldCorrection(im, im_bin)

错误是

RuntimeError: Exception thrown in SimpleITK N4BiasFieldCorrection: /scratch/dashboards/SimpleITK-OSX10.7-intel-pkg/SimpleITK/Code/Common/include/sitkDualMemberFunctionFactory.hxx:214:
sitk::ERROR: Pixel type: 64-bit signed integer is not supported in 2D byN3itk6simple32N4BiasFieldCorrectionImageFilterE

我尝试使用不同的类型,int,float,signed,unsigned,我尝试使用2d和3d图像。我也尝试使用https://itk.org/SimpleITKDoxygen07/html/N4BiasFieldCorrection_8py-example.html 错误总是一样的。 SimpleITK的其他模块似乎可以工作。 任何的想法?你能重现错误吗?
谢谢!

3 个答案:

答案 0 :(得分:0)

在回答我的问题时,我发现所引起的错误似乎与真正的原因无关。如果掩码是使用sitk作为

的阈值
bth = sitk.BinaryThresholdImageFilter()
img_bin = bth.Execute(img)  
img_bin = -1 * (img_mask - 1)

im_bfc = sitk.N4BiasFieldCorrection(im, img_bin) 

该算法有效,不会引发错误。 - 如果我找到问题的真正原因,将会更新!

答案 1 :(得分:0)

我在这里遇到了真正的问题。 "面具"这里需要是8位或二进制。因此,如果可以对背景进行阈值处理,则可以使用sitk的BinaryThreshold过滤器来获取蒙版。

答案 2 :(得分:0)

这是我能够实现这一目标的唯一方式:

img = sitk.ReadImage(in_file)
img_mask = sitk.OtsuThreshold(img)
img = sitk.Cast(img, sitk.sitkFloat32)
corrector = sitk.N4BiasFieldCorrectionImageFilter()
img_c = corrector.Execute(img, img_mask)