0

我正在尝试将 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。即使我在执行过滤器之前设置了原点和间距,也会发生错误。

提前谢谢

4

2 回答 2

0

尝试设置定义的 MaximunNumberOfIterations:::

corrector = sitk.N4BiasFieldCorrectionImageFilter()

numberFittingLevels = 4

numberOfIteration = [50] (array)

corrector.SetMaximumNumberOfIterations(numberOfIteration * numberFittingLevels)

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

于 2020-07-31T14:47:43.603 回答
0

那不应该发生。您的数据要么有点奇怪,要么是过滤器中的一个小错误。

一个快速的技巧是将 sitk::ProcessObject::SetGlobalDefaultCoordinateTolerance (double) 调用到足够大的数字以隐藏此错误。

于 2018-02-14T22:19:17.123 回答