efourier: Elliptical Fourier transform

Description Usage Arguments Details Value Note References See Also Examples

View source: R/core-out-efourier.R

Description

efourier computes Elliptical Fourier Analysis (or Transforms or EFT) from a matrix (or a list) of (x; y) coordinates.

Usage

1
2
3
4
5
6
7
8
efourier(x, ...)

## Default S3 method:
efourier(x, nb.h, smooth.it = 0, verbose = TRUE, ...)

## S3 method for class 'Out'
efourier(x, nb.h, smooth.it = 0, norm = TRUE, start = FALSE,
  verbose = TRUE, ...)

Arguments

x

A list or a matrix of coordinates or a Out object

...

useless here

nb.h

integer. The number of harmonics to use. If missing, 12 is used on shapes; 99 percent of harmonic power on Out objects, both with messages.

smooth.it

integer. The number of smoothing iterations to perform.

verbose

logical. Whether to print or not diagnosis messages.

norm

whether to normalize the coefficients using efourier_norm

start

logical whether to consider the first point as homologous

Details

For the maths behind see the paper in JSS.

Normalization of coefficients has long been a matter of trouble, and not only for newcomers. There are two ways of normalizing outlines: the first, and by far the msot used, is to use a "numerical" alignment, directly on the matrix of coefficients. The coefficients of the first harmonic are consumed by this process but harmonics of higher rank are normalized in terms of size and rotation. This is sometimes referred as using the "first ellipse", as the harmonics define an ellipse in the plane, and the first one is the mother of all ellipses, on which all others "roll" along. This approach is really convenient as it is done easily by most software (if not the only option) and by Momocs too. It is the default option of efourier.

But here is the pitfall: if your shapes are prone to bad aligments among all the first ellipses, this will result in poorly (or even not at all) "homologous" coefficients. The shapes prone to this are either (at least roughly) circular and/or with a strong bilateral symmetry. You can try to use stack on the Coe object returned by efourier. Also, when plotting PCA using Momocs, this will be strikingly clear though. This phenomenon will result in two clusters, and more strikingly into upside-down (or 180 degrees rotated) shapes on the morphospace. If this happen, you should seriously consider aligning your shapes before the efourier step, and performing the latter with no normalization (norm = FALSE), since it has been done before.

You have several options to align your shapes, using control points (or landmarks), of Procrustes alignment (see fgProcrustes) through their calliper length (see coo_aligncalliper), etc. You should also make the first point homologous either with coo_slide or coo_slidedirection to minimize any subsequent problems.

I will dedicate (some day) a vignette or a paper to this problem.

Value

A list with these components:

an

vector of a_{1->n} harmonic coefficients.

bn

vector of b_{1->n} harmonic coefficients.

cn

vector of c_{1->n} harmonic coefficients.

dn

vector of d_{1->n} harmonic coefficients.

ao

ao Harmonic coefficient.

co

co Harmonic coefficient.

Note

Directly borrowed for Claude (2008), and also called efourier there.

References

Claude, J. (2008) Morphometrics with R, Use R! series, Springer 316 pp. Ferson S, Rohlf FJ, Koehn RK. 1985. Measuring shape variation of two-dimensional outlines. Systematic Biology 34: 59-68.

See Also

Other efourier: efourier_i, efourier_norm, efourier_shape

Examples

1
2
3
4
5
6
7
data(bot)
coo <- bot[1]
coo_plot(coo)
ef <- efourier(coo, 12)
ef
efi <- efourier_i(ef)
coo_draw(efi, border='red', col=NA)

Momocs documentation built on Sept. 28, 2017, 9:04 a.m.