刚刚安装了最新版本的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的其他模块似乎可以工作。
任何的想法?你能重现错误吗?
谢谢!
答案 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)