Manipulations

Common interface for transforms.

class nitransforms.manip.TransformChain(transforms=None)[source]

Implements the concatenation of transforms.

append(x)[source]

Concatenate one element to the chain.

Example

>>> chain = TransformChain(transforms=TransformBase())
>>> chain.append((TransformBase(), TransformBase()))
>>> len(chain)
3
asaffine(indices=None)[source]

Combine a succession of linear transforms into one.

Example

>>> chain = TransformChain(transforms=[
...     Affine.from_matvec(vec=(2, -10, 3)),
...     Affine.from_matvec(vec=(-2, 10, -3)),
... ])
>>> chain.asaffine()
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])
>>> chain = TransformChain(transforms=[
...     Affine.from_matvec(vec=(1, 2, 3)),
...     Affine.from_matvec(mat=[[0, 1, 0], [0, 0, 1], [1, 0, 0]]),
... ])
>>> chain.asaffine()
array([[0., 1., 0., 2.],
       [0., 0., 1., 3.],
       [1., 0., 0., 1.],
       [0., 0., 0., 1.]])
>>> np.allclose(
...     chain.map((4, -2, 1)),
...     chain.asaffine().map((4, -2, 1)),
... )
True
Parameters

indices (numpy.array_like) – The indices of the values to extract.

classmethod from_filename(filename, fmt='X5', reference=None, moving=None)[source]

Load a transform file.

insert(i, x)[source]

Insert an item at a given position.

Example

>>> chain = TransformChain(transforms=[TransformBase(), TransformBase()])
>>> chain.insert(1, TransformBase())
>>> len(chain)
3
>>> chain.insert(1, TransformChain(chain))
>>> len(chain)
6
map(x, inverse=False)[source]

Apply a succession of transforms, e.g., \(y = f_3(f_2(f_1(f_0(x))))\).

Example

>>> chain = TransformChain(transforms=[TransformBase(), TransformBase()])
>>> chain([(0., 0., 0.), (1., 1., 1.), (-1., -1., -1.)])
[(0.0, 0.0, 0.0), (1.0, 1.0, 1.0), (-1.0, -1.0, -1.0)]
>>> chain([(0., 0., 0.), (1., 1., 1.), (-1., -1., -1.)], inverse=True)
[(0.0, 0.0, 0.0), (1.0, 1.0, 1.0), (-1.0, -1.0, -1.0)]
>>> TransformChain()((0., 0., 0.))  
Traceback (most recent call last):
TransformError:
property transforms

Get the internal list of transforms.

nitransforms.manip.load(filename, fmt='X5', reference=None, moving=None)

Load a transform file.