Получить матрицу и перевод из преобразования SimpleITK - PullRequest
0 голосов
/ 18 сентября 2018

Я читаю преобразование ITK из файла.Я не могу понять API для получения Translation или Matrix непосредственно из преобразования.

t = sitk.ReadTransform('sample_transform.h5')
print(t)

Вот результат печати:

itk::simple::Transform
VersorRigid3DTransform (0x55c3e22f5de0)
RTTI typeinfo:   itk::VersorRigid3DTransform<double>
Reference Count: 1
Modified Time: 802
Debug: Off
Object Name: 
Observers: 
 none
Matrix: 
 0.999862 0.016289 0.00333268 
 -0.0161218 0.998848 -0.0451944 
 -0.00406501 0.0451344 0.998973 
Offset: [-1.3857, 0.238944, 0.984074]
Center: [36.1356, 6.81771, -27.0756]
Translation: [-1.36988, 0.872183, 1.17271]
Inverse: 
 0.999862 -0.0161218 -0.00406501 
 0.016289 0.998848 0.0451344 
 0.00333268 -0.0451944 0.998973 
Singular: 0
Versor: [ 0.0225887, 0.00184996, -0.00810505, 0.99971 ]

Есть ли функции для непосредственного получения матрицы и перевода?

Похоже, что перевод можно получитьиз трех последних элементов t.GetParameters ():

print(t.GetParameters())

даст:

(0.02258874140769294,
 0.0018499585651891462,
 -0.00810504740162434,
 -1.3698806341361933,
 0.8721829896773953,
 1.1727120470384382) 

1 Ответ

0 голосов
/ 18 сентября 2018

Методы ReadTransform всегда возвращают базовый класс std :: Transform.Этот общий интерфейс может быть полезен.Когда-нибудь вам понадобится производный интерфейс, который предоставляет полезные методы, такие как GetTranslation и GetMatrix [1].Это может быть просто сделано путем преобразования / приведения базового преобразования:

myVersorTransform = VersorRigid3DTransform(t)

[1] https://itk.org/SimpleITKDoxygen/html/classitk_1_1simple_1_1VersorRigid3DTransform.html

...