如何使用simpleitk得到逆位移场

时间:2017-10-11 21:24:05

标签: python itk simpleitk

我最近刚从matlab转到python所以我可以使用simpleitk并抱歉如果这是一个愚蠢的问题。

我使用simpleitk进行恶魔注册后转换tx。我希望通过执行以下操作获得位移字段及其反转,

disp_field = tx.GetDisplacementField()
disp_field_inv = tx.GetInverseDisplacementField()

事实证明,disp_field正是我所需要的 - 图像体积为256 * 256 * 176。但是disp_field_inv是一个空数组。有谁知道为什么?

然后我尝试了以下内容,

disp_field_inv = sitk.InverseDisplacementField(disp_field,disp_field.GetSize(),disp_field.GetOrigin(),disp_field.GetSpacing(),
                                           subsamplingFactor=16)

但是python就像永远一样。有人知道如何正确地做到这一点吗?

2 个答案:

答案 0 :(得分:0)

以下是运行InvertDisplacementField程序界面

的规范
Image itk::simple::InvertDisplacementField  (const Image & image1,
        uint32_t    maximumNumberOfIterations = 10u,
        double      maxErrorToleranceThreshold = 0.1,
        double      meanErrorToleranceThreshold = 0.001,
        bool    enforceBoundaryCondition = true) 

所以我认为你通过了

disp_field.GetSize(),disp_field.GetOrigin(),disp_field.GetSpacing(), subsamplingFactor=16

作为参数2到5意味着你传递的界面不是预期的那样?

尝试运行disp_field_inv = sitk.InverseDisplacementField(disp_field)

并查看它是否迭代到结果!

答案 1 :(得分:0)

对于这些年来的价值,我只是想指出,原来的问题和g.stevo的答案(到目前为止)混淆了SimpleITK中可用的两个不同的过滤器,即:

  • sitk.InverseDisplacementField
  • sitk.InvertDisplacementField

每个过程API及其各自的图像过滤器都有不同的Execute函数参数。