linear_deform¶
-
odl.deform.linearized.
linear_deform
(template, displacement, interp='linear', out=None)[source]¶ Linearized deformation of a template with a displacement field.
The function maps a given template
I
and a given displacement fieldv
to the new functionx --> I(x + v(x))
.- Parameters
- template
DiscretizedSpaceElement
Template to be deformed by a displacement field.
- displacementelement of power space of
template.space
Vector field (displacement field) used to deform the template.
- interpstr or sequence of str
Interpolation type that should be used to sample the template on the deformed grid. A single value applies to all axes, and a sequence gives the interpolation scheme per axis.
Supported values:
'nearest'
,'linear'
- out
numpy.ndarray
, optional Array to which the function values of the deformed template are written. It must have the same shape as
template
and a data type compatible withtemplate.dtype
.
- template
- Returns
- deformed_template
numpy.ndarray
Function values of the deformed template. If
out
was given, the returned object is a reference to it.
- deformed_template
Examples
Create a simple 1D template to initialize the operator and apply it to a displacement field. Where the displacement is zero, the output value is the same as the input value. In the 4-th point, the value is taken from 0.2 (one cell) to the left, i.e. 1.0.
>>> space = odl.uniform_discr(0, 1, 5) >>> disp_field_space = space.tangent_bundle >>> template = space.element([0, 0, 1, 0, 0]) >>> displacement_field = disp_field_space.element([[0, 0, 0, -0.2, 0]]) >>> linear_deform(template, displacement_field, interp='nearest') array([ 0., 0., 1., 1., 0.])
The result depends on the chosen interpolation. With ‘linear’ interpolation and an offset of half the distance between two points, 0.1, one gets the mean of the values.
>>> displacement_field = disp_field_space.element([[0, 0, 0, -0.1, 0]]) >>> linear_deform(template, displacement_field, interp='linear') array([ 0. , 0. , 1. , 0.5, 0. ])