This is a proxy function for flexinterpn. It only handles some standard kernels as well as 2D to 3D data conversion for rotation.
While the flexinterpn function allows very flexible interpolation of data, it would be too cumbersome to expect that every user (including myself) will create a suitable kernel window over and over again whenever data is to be interpolated.
The flexinterpn_method function creates a persistent variable and stores some of the more standard kernel windows in a 4096-sampling resolution (enough to allow the linear interpolation internally applied by flexinterpn to yield high-quality results, tested with the Lanczos8 window mentioned at the interpolation quality test page (external link).
flexinterpn_method - call flexinterpn with one of the typical methods FORMAT: [idata, k] = flexinterpn_method(data, cr [, [opts], method]) Input fields: data N-d data (up to 4 dims supported) cr CxD coordinates or 4xD range opts hold (and tranformation matrix) method either of: 'cubic', 'lanczos2' 'lanczos3', {'linear'}, 'nearest', 'poly3', 'spline2', 'spline3' Output fields: idata interpolated data as from flexinterpn k kernel passed to flexinterpn (empty for linear) Note: the range notation of cr must contain Infs in the first row of values, the rest is parsed as row2:row3:row4 for each dim. Note: for methods other than nearest and linear, the value range of the input can be exceeded!
The first two arguments, data
and cr
are identical to the use of flexinterpn with one notable exception: 2D image data can be passed into the function which will then be shifted into the third dimension to allow the quaternion matrix to be used (the rotation must be defined around the 1st dimension!)
Here, neither, the first, or both of the last two arguments of flexinterpn can be given (so, possibly, neither hold
and qtrf
, only hold
, or both hold
and qtrf
).
The following methods (kernel shapes) are supported:
[0; 1; 0]
with a sampling kernsize
of 1
)data(round(coords))
)There are two main uses of this function:
% passing data from flexinterpn_method -> flexinterpn resampled = flexinterpn_method(data, range, 'cubic');<code> * generating/requesting a suitable kernel that is then manually passed to [[flexinterpn]]: <code matlab flexinterpn_method_kernelonly.m>% get cubic interpolation kernel [null, k] = flexinterpn_method(1, 1, 'cubic');