Source code for nipy.algorithms.registration.chain_transform
""" Chain transforms """
from .affine import Affine
[docs]class ChainTransform(object):
[docs] def __init__(self, optimizable, pre=None, post=None):
""" Create chain transform instance
Parameters
----------
optimizable : array or Transform
Transform that we are optimizing. If this is an array, then assume
it's an affine matrix.
pre : None or array or Transform, optional
If not None, a transform that should be applied to points before
applying the `optimizable` transform. If an array, then assume it's
an affine matrix.
post : None or Transform, optional
If not None, a transform that should be applied to points after
applying any `pre` transform, and then the `optimizable`
transform. If an array, assume it's an affine matrix
"""
if not hasattr(optimizable, 'param'):
raise ValueError('Input transform should be optimizable')
if not hasattr(optimizable, 'apply'):
optimizable = Affine(optimizable)
if not hasattr(pre, 'apply'):
pre = Affine(pre)
if not hasattr(post, 'apply'):
post = Affine(post)
self.optimizable = optimizable
self.pre = pre
self.post = post
[docs] def apply(self, pts):
""" Apply full transformation to points `pts`
If there are N points, then `pts` will be N by 3
Parameters
----------
pts : array-like
array of points
Returns
-------
transformed_pts : array
N by 3 array of transformed points
"""
composed = self.post.compose(self.optimizable.compose(self.pre))
return composed.apply(pts)
def _set_param(self, param):
self.optimizable.param = param
def _get_param(self):
return self.optimizable.param
param = property(_get_param, _set_param, None, 'get/set param')