No License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from

5.0 | 14 ratings Rate this file 80 Downloads (last 30 days) File Size: 2.53 KB File ID: #23287 Version: 1.0
image thumbnail




Smooths a 2D matrix using a mean filter over a user-defined rectangle. Ignores and preserves NaNs.

| Watch this File

File Information

Smooths 2D array data. Ignores NaN's.

function matrixOut = smooth2a(matrixIn,Nr,Nc)
This function smooths the data in matrixIn using a mean filter over a
rectangle of size (2*Nr+1)-by-(2*Nc+1). Basically, you end up replacing
element "i" by the mean of the rectange centered on "i". Any NaN
elements are ignored in the averaging. If element "i" is a NaN, then it
will be preserved as NaN in the output. At the edges of the matrix,
where you cannot build a full rectangle, as much of the rectangle that
fits on your matrix is used (similar to the default on Matlab's builtin
function "smooth").

"matrixIn": original matrix
"Nr": number of points used to smooth rows
"Nc": number of points to smooth columns. If not specified, Nc = Nr.

"matrixOut": smoothed version of original matrix


Explanation of screenshot:
The left plot is a pcolor (shading interp, axis equal) of a "jagged" 906x1024 matrix. Note that the edges have NaN values (white coloring). On the right, pcolor of output of smooth2a, with Nr = Nc = 50. NaN's are preserved, but do not affect the smoothing of adjacent elements.


Smooth2 inspired this file.

This file inspired Filt2 2 D Geospatial Data Filter.

MATLAB release MATLAB 7.4 (R2007a)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (18)
13 Dec 2016 Xiaolin

very good code for 2-D data smoothing

20 Sep 2016 Enrico Salvati

13 Jul 2016 William Yoshida

I had been searching for something that works like this for some time. Exactly what I had hoped for. Thank you!

22 Apr 2016 Beichuan Hong

The function works completely as advertised.

21 Dec 2015 David MERCIER

08 Jul 2015 Liem Nguyen

It works perfectly. Thank you!

15 Dec 2014 Peter

Peter (view profile)

The function works completely as advertised. Thank you.

In response to JEC PsiCom's comment from 2011 (since I stumbled across the same error)... Make sure your input matrix is of type "double". My problem was solved by casting the input as a double {eg, xs = smooth2a(double(x),1);}

Comment only
18 Oct 2013 Kiwi

Kiwi (view profile)

04 Sep 2013 Stephanie

24 Jan 2011 JEC PsiCom

I get this error trying to run the code on a 2-D matrix of type double:

"MTIMES is not supported for one sparse input and one single input."

What does this mean?

Comment only
02 Jan 2011 Nikola Toljic


07 Dec 2010 Mark Novak

Thank you... this is perfectly implemented.

Comment only
23 Aug 2010 Jakob

Jakob (view profile)

I experienced vertical and horizontal jumps when using the smooth2 procedure and spent quite a while tracking down something better when I stumbled across the list of work the smooth2 had inspired (yours being one of them). smooth2a completely resolved the issue. I thank you for this!

17 Aug 2010 Wuxing Gan

very useful, I specially like its way to handle the NaN points.

21 Jun 2010 Nathan

Nathan (view profile)

Very slick code. Runs fast. Works Great!

20 Mar 2009 Carlos Adrian Vargas Aguilera

Nice code, my codes moving_average.m and ndnanfilter.m do similar jobs but are written very different! Regards...

Comment only
17 Mar 2009 Adriano Azzarone

This function is what I have searched for months.
It's working great!!
My best congrats

17 Mar 2009 Adriano Azzarone

Contact us