sitk.N4BiasFieldCorrectionImageFilter()正确用法

时间:2018-02-14 21:45:04

标签: simpleitk

我正在尝试将SimpleITK中的N4ITKBiasFieldCorrectionImageFilter应用于MRI扫描作为预处理步骤。从我收集的内容中可以用3D执行,我已经将其应用于此代码:

corrector = sitk.N4BiasFieldCorrectionImageFilter()

maskImage=sitk.OtsuThreshold(Original_scan, 0, 1, 200)   
I = sitk.Cast( Original_scan, sitk.sitkFloat32 )
BiasCorrected_scan=corrector.Execute(I,maskImage)

我最终在执行函数时始终得到相同的错误:

    RuntimeError: Exception thrown in SimpleITK N4BiasFieldCorrectionImageFilter_Execute: c:\d\vs14-win64-pkg\simpleitk-build\itk-prefix\include\itk-4.11\itkImageToImageFilter.hxx:250:
itk::ERROR: SubtractImageFilter(0000021C00CCEEA0): Inputs do not occupy the same physical space! 
InputImage Origin: [1.2708700e+02, -1.5783400e+02, 9.0149000e+01], InputImage_1 Origin: [6.5250000e+01, -5.4894173e+01, 5.4894173e+01]
    Tolerance: 4.2969999e-05
InputImage Spacing: [4.2969999e-01, 4.2969999e-01, 3.0000000e+00], InputImage_1 Spacing: [5.4894173e+01, 5.4894173e+01, 6.5250000e+01]
    Tolerance: 4.2969999e-05

有没有人有执行此过滤器的经验?

PS。即使我在执行过滤器之前设置原点和间距,也会发生错误。

提前致谢

2 个答案:

答案 0 :(得分:0)

这不应该发生。您的数据要么是奇怪的,要么是过滤器中的小错误。

快速破解就是将sitk :: ProcessObject :: SetGlobalDefaultCoordinateTolerance(double)调用到足够大的数字以隐藏此错误。

答案 1 :(得分:0)

尝试设置已定义的MaximunNumberOfIterations :::

def delete_starting_evens(lst):
    while len(lst) > 0 and lst[0]%2==0:
        lst.remove(lst[0])
    return lst

l = [2, 2, 4, 6, 1]
delete_starting_evens(l)
print(l)

设置较低的值,直到您的公差值被接受