help-octave
[Top][All Lists]

## Re: Average contents of a matrix

 From: Søren Hauberg Subject: Re: Average contents of a matrix Date: Tue, 03 Mar 2009 07:53:31 +0100

```tir, 03 03 2009 kl. 03:27 +0100, skrev Martin Helm:
> > I want to average the contents of a matrix so that each value is the
> > average of all immediately adjacent values and itself: for example if I
> > have a simple 4 by 4 matrix e.g. a[ 1 2 3 4
> >                      5 6 7 8
> >                      9 10 11 12
> >                     13 14 15 16]
> >
> > I would like to create a 4 by 4 matrix av[] so that av[1,1] is the average
> > of a[1,1], a[1,2], a[2,1] and a[2,2];
> > av[3,2] is the average of a[2,1], a[2,2], a[2,3], a[3,1], a[3,2], a[3,3],
> > a[4,1], a[4,2] and a[4,3]  etc...
> > giving a value for av[1,1] of 3.5 and av[3,2] a value of 10
> >
> > Is there a function that can do this or will I have to loop through doing
> > the calculations or otherwise code it?
> >
> > The purpose of this is to smooth a surface plot of a[] or create a surface
> > plot of the smoothed version of a[], i.e. av[].
>
> If you want to smooth the matrix, may be convolution is what you want.
> The conv2 function does nearly (but not exactly) what you describe. The
> difference is the handling at the edges of the matrix.
>
> a = some matrix
>
> b = [1 1 1;1 1 1; 1 1 1] / 9;
> a_smoothed = conv2(a, b,'same');
>
> a_smoothed is then the same size as a.
>
> b defines the "filter".
>
> Or you can look at the filter functions in "Signal processing".

Or take a look at the 'imsmooth' function in the 'image' package. I
provides several different ways of smoothing.

Søren

```