Version 2.3 (9.47 KB) by Damien Garcia
SMOOTHN allows automatized and robust smoothing in arbitrary dimension w/wo missing values
Updated 20 Jun 2020

View License

Editor's Note: This file was selected as MATLAB Central Pick of the Week

SMOOTHN provides a fast, unsupervised and robust discretized spline smoother for data of arbitrary dimension.

SMOOTHN(Y) automatically smoothes the uniformly-sampled array Y. Y can be any N-D multicomponent noisy array (e.g. time series, images, 3D data, 3D vector fields, tensors...).

To smooth a vector field or multi-component data, Y must be a cell array. For example, if you need to smooth a 3-D vectorial flow (Vx,Vy,Vz), use Y = {Vx,Vy,Vz}. The output Z is also a cell array which contains the smoothed components.

SMOOTHN can deal with missing (NaN) values (see screenshot and examples).

SMOOTHN(...,'robust') carries out a robust smoothing that minimizes the influence of outlying data (see screenshot and examples).

SMOOTHN is made unsupervised by the minimization of the generalized cross-validation score.

Enter "help smoothn" in the Matlab command window for complete instructions and 1-D to 3-D examples.

A series of 8 documented examples is available here:

When using this algorithm, please refer to these 2 papers:
1) Garcia D. Robust smoothing of gridded data in one and higher dimensions with missing values.
Comput Statist Data Anal, 2010;54:1167-1178
2) Garcia D. A fast all-in-one method for automated post-processing of PIV data.
Exp Fluids, 2011;50:1247-1259.

Cite As

Damien Garcia (2024). smoothn (, MATLAB Central File Exchange. Retrieved .

Garcia, Damien. “Robust Smoothing of Gridded Data in One and Higher Dimensions with Missing Values.” Computational Statistics & Data Analysis, vol. 54, no. 4, Elsevier BV, Apr. 2010, pp. 1167–78, doi:10.1016/j.csda.2009.09.020.

View more styles

Garcia, Damien. “A Fast All-in-One Method for Automated Post-Processing of PIV Data.” Experiments in Fluids, vol. 50, no. 5, Springer Science and Business Media LLC, Oct. 2010, pp. 1247–59, doi:10.1007/s00348-010-0985-y.

View more styles
MATLAB Release Compatibility
Created with R2017a
Compatible with R2017a to R2020a
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
Version Published Release Notes

BSXFUN is no longer used (version thus must be >= R2017)


verLessThan('matlab','9.2'); instead of verLessThan('matlab','9.1');


- fixed bug in isstruct(varargin{end-1})
- no longer use BSXFUN w/ recent Matlab versions

updated links

updated links

updated links


minor updates: 1) use narginchk, 2) two warning messages slightly modified

minor update: 1) use narginchk, 2) some warning messages slightly modified

I noticed a minor error in one comment



Some modifications in the help text

To simplify the syntax, the termination parameters are now in a structure (OPTIONS).

Numerical adjustment in the leverage (for robust smoothing) in the case of unequal spacing increments.

SMOOTHN, by default, assumes that the spacing increments are constant and equal in all the directions (i.e. dx = dy = dz = ...). Spacing increments that differ from one direction to the other can now be used (enter "help smoothn" for details).

There was a non negligible bug in the new SMOOTHN function:
d = ndims(y) => d = ndims(y{1})
Many thanks to Gianni Pedrizzetti.

Update of the help text

A minor bug in the "Initial Guess" criterion has been removed

A bug was present when dealing with complex numbers

A small bug was present in the subfunction InitialGuess (Thank you Jonathan!)

One bug has been fixed.

SMOOTHN now works with multicomponent data (e.g. 3D vector fields) by using cell arrays. See the help text for details.

DCTN and IDCTN are now included in SMOOTHN

some typos

3 optional weighting functions

3 optional weighting functions

minor modifications: mlint messages removed

Some options have been removed/added

fix a minor bug with the warning messages

Minor modification in the relaxation factor

A minor bug in error(nargchk(...))

Gamma was undefined when "isauto" variable was false.

The link to the manuscript has been modified.

A bug has been reported with a smoothness parameter input. Thank you B.S.

Very much faster now with weighted/missing data:
1) SOR
2) Initial guess from nearest-neighbor interpolation
3) GCV score is minimized every 2^k iterations (k = 0...)

The "upsample" option has been removed

An example has been added