[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


Ben Marriage, ben@met.ed.ac.uk writes:

> I want to calculate the standard deviation of a 3x3
> pixel area for each element of a satellite image
> Does anyone know of a simple and elegant (read "quick")
> method of doing this without using loops?

    You can use a box smooth to do the local averaging and
renormalisation, with variable widths if needed.  If you use the fact
that the s.d. is the square root of the local variance, you'll need to
smooth twice: once when calulating a local mean, and again when
creating the s.d. array.   

function imageSD, image
   localmean = smooth(float(image), 3, /edge_truncate)
   localsd = sqrt((float(image)-temporary(localmean))^^2)
   localsd = smooth(temporary(localsd), 3, /edge_truncate)
   return, localsd

    You can set different edge-effects and averaging widths by passing
different parameters to the box smooth function.  The box smooth
normalises by the square of the smoothing width, so if you want to
treat the image as a estimate of a population you'll have to
renormalise - but this is pretty unlikely with image data.