Q_1.0
Q_1.0

Reputation: 183

how to use simpleitk get inverse displacement field

I just moved from matlab to python recently so I can use simpleitk and sorry if this is a dumb question.

I have a transformation tx after demons registration using simpleitk. I wish to get the displacement field and its inverse by doing the following,

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

It turns out disp_field is exactly what I need --- an image volume of 256*256*176. But disp_field_inv is an empty array. Does anyone know why?

Then I tried the following,

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

But python is just running like forever. Does anybody know how to do it properly?

Upvotes: 0

Views: 1729

Answers (2)

Andreas Schuh
Andreas Schuh

Reputation: 1257

For what it's worth after all these years, just wanted to point out that the original question and (so far only) answer by g.stevo mix-up two different filters available in SimpleITK, namely:

  • sitk.InverseDisplacementField
  • sitk.InvertDisplacementField

Each of these procedural APIs and their respective image filters have different Execute function arguments.

Upvotes: 0

g.stevo
g.stevo

Reputation: 740

The following is the specification for running the InvertDisplacementField procedural interface

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

So I think that by you passing the

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

as parameters 2 to 5 means you are passing the interface not what is expected?

Try just running disp_field_inv = sitk.InverseDisplacementField(disp_field)

and see if it iterates to a result!

Upvotes: 0

Related Questions