我正在尝试将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。即使我在执行过滤器之前设置原点和间距,也会发生错误。
提前致谢
答案 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)
设置较低的值,直到您的公差值被接受