Linear interpolation
Here linear means that the result depends linearly on the interpolated array. The interpolation functions (or kernels) may be linear or not (e.g., cubic spline).
Unidimensional interpolation
Unidimensional interpolation is done by:
apply(ker, x, src) -> dst
which interpolates source array src
with kernel ker
at positions x
, the result is an array of same dimensions as x
. The destination array can be provided:
apply!(dst, ker, x, src) -> dst
which overwrites dst
with the result of the interpolation of source src
with kernel ker
at positions specified by x
. If x
is an array, dst
must have the same size as x
; otherwise, x
may be a fonction which is applied to all indices of dst
(as generated by eachindex(dst)
) to produce the coordinates where to interpolate the source. The destination dst
is returned.
The adjoint/direct operation can be applied:
apply(P, ker, x, src) -> dst
apply!(dst, P, ker, x, src) -> dst
where P
is either Adjoint
or Direct
. If P
is omitted, Direct
is assumed.
To linearly combine the result and the contents of the destination array, the following syntax is also implemented:
apply!(α, P, ker, x, src, β, dst) -> dst
which overwrites dst
with β*dst
plus α
times the result of the operation implied by P
(Direct
or Adjoint
) on source src
with kernel ker
at positions specified by x
.
Separable multi-dimensional interpolation
Separable multi-dimensional interpolation consists in interpolating each dimension of the source array with, possibly, different kernels and at given positions. For instance:
apply(ker1, x1, [ker2=ker1,] x2, src) -> dst
yields the 2D separable interpolation of src
with kernel ker1
at positions x1
along the first dimension of src
and with kernel ker2
at positions x2
along the second dimension of src
. Note that, if omitted the second kernel is assumed to be the same as the first one. The above example extends to more dimensions (providing it is implemented). Positions x1
, x2
, ... must be unidimensional arrays their lengths give the size of the result of the interpolation.
The apply the adjoint and/or linearly combine the result of the interpolation and the contents of the destination array, the same methods as for unidimensional interpolation are supported, it is sufficient to replace arguments ker,x
by ker1,x1,[ker2=ker1,]x2
.
Nonseparable multi-dimensional interpolation
Nonseparable 2D interpolation is implemented where the coordinates to interpolate are given by an affine transform which converts the indices in the destination array into fractional coordinates in the source array (for the direct operation). The syntax is:
apply!(dst, [P=Direct,] ker1, [ker2=ker1,] R, src) -> dst
where R
is an AffineTransform2D
and P
is Direct
(the default) or Adjoint
.