The Alpert transform is a multiwavelets transform based on orthogonal polynomials. It was originally designed for the resolution of partial differential and integral equations, since it avoids boundary artifact and can be used with an arbitrary sampling.
The reference for the numerical algorithm:
Bradley K. Alpert, Wavelets and Other Bases for Fast Numerical Linear Algebra, in Wavelets: A Tutorial in Theory and Applications, C. K. Chui, editor, Academic Press, New York, 1992.
And more theoretical (continuous setting):
B.K. Alpert, A class of bases in L^2 for the sparse representatiion of integral operators, in SIAM J. Math. Anal., 24 (1993), 246-262.
The strengh of this transform is that you can transform data sampled irregularly. Of course this algorithm runs in linear time, i.e. O(n). The use of multiwavelets remove any boundary artifact (which are common with wavelet of support > 1, e.g. Daubechies wavelets), but the price to pay is that the wavelets functions are not continuous, they look like the Haar basis functions. So do not use this transform to compress data that will be seen by human eyes (although the reconstruction error can be very low, the reconstructed function can have some ugly steps-like artifacts).
In this toolbox, you can transform a signal (1D, 2D, nD) with arbitrary length and arbitrary sampling (you must each time provide sampling locations in a parameter pos).
The number of vanishing moments (which is also the degree of the polynomial approximation+1) is set via the parameter 'k' (default=3). You can provide different numbers of vanishing moments for X and Y axis, using k=[kx,ky] (default k=[3,3]).
Dichotomic Grouping Functions: All the transforms require to recursively split the data. For each transform a default splitting rule is used, but you can provide your own partition via a parameter part. The way you split the data (isotropicaly, using a prefered direction, etc) will lead to various behaviour for the transform (of course this is relevant for 2D transform only, since the splitting rule in 1D is always the same). The function to perform an automatic grouping is 'dichotomic_grouping' (it can provide orthogonal split along the axis or isotropic using k-means)