0

我最近刚从 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就像永远一样运行。有谁知道如何正确地做到这一点?

4

2 回答 2

0

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

  • sitk.InverseDisplacementField
  • sitk.InvertDisplacementField

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

于 2019-10-17T13:29:55.153 回答
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)

看看它是否迭代到一个结果!

于 2017-10-24T02:29:54.347 回答