2017-10-11 5 views
0

Je viens de passer de matlab à python récemment, donc je peux utiliser simpleitk et désolé si c'est une question stupide.comment utiliser champ de déplacement simpleitk get inverse

J'ai une transformation tx après l'enregistrement des démons en utilisant simpleitk. Je souhaite obtenir le champ de déplacement et son inverse en procédant comme suit,

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

Il se trouve disp_field est exactement ce que je dois --- un volume d'image de 256 * 256 * 176. Mais disp_field_inv est un tableau vide. Quelqu'un sait-il pourquoi?

Alors j'ai essayé ce qui suit,

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

Mais python est en cours d'exécution tout comme pour toujours. Est-ce que quelqu'un sait comment le faire correctement?

Répondre

0

Ce qui suit est la spécification pour l'exécution de l'InvertDisplacementField interface procédurale

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

Je pense donc qu'en vous passer le

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

en tant que paramètres 2 à 5 signifie que vous passez l'interface pas ce devrait?

peut lancer disp_field_inv = sitk.InverseDisplacementField(disp_field)

et voir si elle itère à un résultat!

+0

Merci pour votre réponse. J'ai essayé sitk.InverseDisplacementField (disp_field) avant et il ne convergerait tout simplement pas. –

+0

Avez-vous essayé sitk.InverseDisplacementField (disp_field, 1) en l'exécutant avec une seule itération au lieu de 10? –