Transform¶
-
class
menpo.transform.
Transform
[source]¶ Bases:
Copyable
Abstract representation of any spatial transform.
Provides a unified interface to apply the transform with
apply_inplace()
andapply()
.All Transforms support basic composition to form a
TransformChain
.There are two useful forms of composition. Firstly, the mathematical composition symbol o has the following definition:
Let a(x) and b(x) be two transforms on x. (a o b)(x) == a(b(x))
This functionality is provided by the
compose_after()
family of methods:(a.compose_after(b)).apply(x) == a.apply(b.apply(x))
Equally useful is an inversion the order of composition - so that over time a large chain of transforms can be built to do a useful job, and composing on this chain adds another transform to the end (after all other preceding transforms have been performed).
For instance, let’s say we want to rescale a
PointCloud
p
around its mean, and then translate it some place else. It would be nice to be able to do something like:t = Translation(-p.centre) # translate to centre s = Scale(2.0) # rescale move = Translate([10, 0 ,0]) # budge along the x axis t.compose(s).compose(-t).compose(move)
In Menpo, this functionality is provided by the
compose_before()
family of methods:(a.compose_before(b)).apply(x) == b.apply(a.apply(x))
For native composition, see the
ComposableTransform
subclass and theVComposable
mix-in.For inversion, see the
Invertible
andVInvertible
mix-ins.For alignment, see the
Alignment
mix-in.-
apply
(x, batch_size=None, **kwargs)[source]¶ Applies this transform to
x
.If
x
isTransformable
,x
will be handed this transform object to transform itself non-destructively (a transformed copy of the object will be returned).If not,
x
is assumed to be an ndarray. The transformation will be non-destructive, returning the transformed version.Any
kwargs
will be passed to the specific transform_apply()
method.Parameters: - x (
Transformable
or(n_points, n_dims)
ndarray) – The array or object to be transformed. - batch_size (int, optional) – If not
None
, this determines how many items from the numpy array will be passed through the transform at a time. This is useful for operations that require large intermediate matrices to be computed. - kwargs (dict) – Passed through to
_apply()
.
Returns: transformed (
type(x)
) – The transformed object or array- x (
-
apply_inplace
(x, **kwargs)[source]¶ Applies this transform to a
Transformable
x
destructively.Any
kwargs
will be passed to the specific transform_apply()
method.Parameters: - x (
Transformable
) – TheTransformable
object to be transformed. - kwargs (dict) – Passed through to
_apply()
.
Returns: transformed (
type(x)
) – The transformed object- x (
-
compose_after
(transform)[source]¶ Returns a
TransformChain
that represents this transform composed after the given transform:c = a.compose_after(b) c.apply(p) == a.apply(b.apply(p))
a
andb
are left unchanged.This corresponds to the usual mathematical formalism for the compose operator, o.
Parameters: transform ( Transform
) – Transform to be applied before selfReturns: transform ( TransformChain
) – The resulting transform chain.
-
compose_before
(transform)[source]¶ Returns a
TransformChain
that represents this transform composed before the given transform:c = a.compose_before(b) c.apply(p) == b.apply(a.apply(p))
a
andb
are left unchanged.Parameters: transform ( Transform
) – Transform to be applied after selfReturns: transform ( TransformChain
) – The resulting transform chain.
-
copy
()¶ Generate an efficient copy of this object.
Note that Numpy arrays and other
Copyable
objects onself
will be deeply copied. Dictionaries and sets will be shallow copied, and everything else will be assigned (no copy will be made).Classes that store state other than numpy arrays and immutable types should overwrite this method to ensure all state is copied.
Returns: type(self)
– A copy of this object
-
n_dims
¶ The dimensionality of the data the transform operates on.
None
if the transform is not dimension specific.Type: int or None
-
n_dims_output
¶ The output of the data from the transform.
None
if the output of the transform is not dimension specific.Type: int or None
-