[SciPy-User] one-sided gauss fit -- or: how to estimate backgound noise ?

Christoph Deil Deil.Christoph@googlemail....
Thu Jul 15 18:04:34 CDT 2010


Hi Sebastian,

in astronomy a method called kappa-sigma-clipping is sometimes used
to estimate the background level by clipping away most of the signal:
http://idlastro.gsfc.nasa.gov/ftp/pro/math/meanclip.pro
I am not aware of a python implementation, but it's just a few lines of code.

If you can identify the background level approximately by eye,
e.g. by plotting a histogram of your data, you should be able to
just fit the tail of the Gaussian that only contains background.

Here is my attempt at doing such a fit using scipy.stats.rv_continous.fit(),
similar to but not exactly what you want:

from scipy.stats import norm, halfnorm, uniform
signal = - uniform.rvs(0, 3, size=10000)
background = norm.rvs(size=10000)
data = hstack((signal, background))
hist(data, bins=30)
selection = data[data>0]
halfnorm.fit(selection)
x = linspace(-3, 3, 100)
y = selection.sum() * halfnorm.pdf(x)/3
plot(x,y)

Good luck!
Christoph

On Jul 15, 2010, at 10:39 PM, Sebastian Haase wrote:

> Hi,
> In image analysis one is often faced with (often unknown) background
> levels (offset) + (Gaussian) background noise.
> The overall intensity histogram of the image is in fact often Gaussian
> (Bell shaped), but depending on how many (foreground) objects are
> present the histogram shows a positive tail of some sort.
> 
> So, I just got the idea if there was a function (i.e. mathematical
> algorithm) that would allow to fit only the left half of a Gaussian
> bell curve to data points !?
> This would have to be done in a way that the center, the variance (or
> sigma) and the peak height are free fitting parameters.
> 
> Any help or ideas are appreciated,
> thanks
> Sebastian Haase
> _______________________________________________
> SciPy-User mailing list
> SciPy-User@scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user



More information about the SciPy-User mailing list