1
+ from dataclasses import dataclass , field
2
+ from enum import Enum
3
+ from typing import Sequence , Union , Dict , Optional
4
+
5
+ try :
6
+ from numpy .typing import ArrayLike
7
+ except ImportError :
8
+ from numpy import ndarray as ArrayLike
9
+ import numpy as np
10
+
11
+ class TransformParameterizations (str , Enum ):
12
+ Composite = "Composite"
13
+ Identity = "Identity"
14
+ Translation = "Translation"
15
+ Euler2D = "Euler2D"
16
+ Euler3D = "Euler3D"
17
+ Rigid2D = "Rigid2D"
18
+ Rigid3D = "Rigid3D"
19
+ Rigid3DPerspective = "Rigid3DPerspective"
20
+ Versor = "Versor"
21
+ VersorRigid3D = "VersorRigid3D"
22
+ Scale = "Scale"
23
+ ScaleLogarithmic = "ScaleLogarithmic"
24
+ ScaleSkewVersor3D = "ScaleSkewVersor3D"
25
+ Similarity2D = "Similarity2D"
26
+ Similarity3D = "Similarity3D"
27
+ QuaternionRigid = "QuaternionRigid"
28
+ Affine = "Affine"
29
+ ScalableAffine = "ScalableAffine"
30
+ AzimuthElevationToCartesian = "AzimuthElevationToCartesian"
31
+ BSpline = "BSpline"
32
+ BSplineSmoothingOnUpdateDisplacementField = "BSplineSmoothingOnUpdateDisplacementField"
33
+ ConstantVelocityField = "ConstantVelocityField"
34
+ DisplacementField = "DisplacementField"
35
+ GaussianSmoothingOnUpdateDisplacementField = "GaussianSmoothingOnUpdateDisplacementField"
36
+ GaussianExponentialDiffeomorphic = "GaussianExponentialDiffeomorphic"
37
+ VelocityField = "VelocityField"
38
+ TimeVaryingVelocityField = "TimeVaryingVelocityField"
39
+ GaussianSmoothingOnUpdateTimeVaryingVelocityField = "GaussianSmoothingOnUpdateTimeVaryingVelocityField"
40
+
41
+ @dataclass
42
+ class TransformType :
43
+ inputDimension : int = 3
44
+ outputDimension : int = 3
45
+ transformParameterization : TransformParameterizations = TransformParameterizations .Identity
46
+
47
+ @dataclass
48
+ class Transform :
49
+ transformType : Union [TransformType , Dict ] = field (default_factory = TransformType )
50
+ numberOfFixedParameters : int = 0
51
+ numberOfParameters : int = 0
52
+
53
+ name : str = "Transform"
54
+
55
+ inputSpaceName : str = ""
56
+ outputSpaceName : str = ""
57
+
58
+ fixedParameters : Optional [ArrayLike ] = None
59
+ parameters : Optional [ArrayLike ] = None
60
+
61
+ metadata : dict = field (default_factory = dict )
62
+
63
+ def __post_init__ (self ):
64
+ if isinstance (self .transformType , dict ):
65
+ self .transformType = TransformType (** self .transformType )
0 commit comments