View source on GitHub
|
Image warping using correspondences between sparse control points.
tfa.image.sparse_image_warp(
image: tfa.types.TensorLike,
source_control_point_locations: tfa.types.TensorLike,
dest_control_point_locations: tfa.types.TensorLike,
interpolation_order: int = 2,
regularization_weight: tfa.types.FloatTensorLike = 0.0,
num_boundary_points: int = 0,
name: str = 'sparse_image_warp'
) -> tf.Tensor
Apply a non-linear warp to the image, where the warp is specified by
the source and destination locations of a (potentially small) number of
control points. First, we use a polyharmonic spline
(tfa.image.interpolate_spline) to interpolate the displacements
between the corresponding control points to a dense flow field.
Then, we warp the image using this dense flow field
(tfa.image.dense_image_warp).
Let t index our control points. For regularization_weight = 0, we have:
warped_image[b, dest_control_point_locations[b, t, 0],
dest_control_point_locations[b, t, 1], :] =
image[b, source_control_point_locations[b, t, 0],
source_control_point_locations[b, t, 1], :].
For regularization_weight > 0, this condition is met approximately, since
regularized interpolation trades off smoothness of the interpolant vs.
reconstruction of the interpolant at the control points.
See tfa.image.interpolate_spline for further documentation of the
interpolation_order and regularization_weight arguments.
Args | |
|---|---|
image
|
Either a 2-D float Tensor of shape [height, width],
a 3-D Tensor of shape [height, width, channels],
or a 4-D Tensor of shape [batch_size, height, width, channels].
batch_size is assumed as one when image is a 2-D or 3-D Tensor.
|
source_control_point_locations
|
[batch_size, num_control_points, 2] float
Tensor.
|
dest_control_point_locations
|
[batch_size, num_control_points, 2] float
Tensor.
|
interpolation_order
|
polynomial order used by the spline interpolation |
regularization_weight
|
weight on smoothness regularizer in interpolation |
num_boundary_points
|
How many zero-flow boundary points to include at
each image edge. Usage:
|
name
|
A name for the operation (optional).
Note that |
Returns | |
|---|---|
warped_image
|
a float Tensor with the same shape and dtype as image.
|
flow_field
|
[batch_size, height, width, 2] float Tensor containing the
dense flow field produced by the interpolation.
|
View source on GitHub