直方图python中的非正态高斯拟合

2024-10-01 15:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张暗图像(raw格式),并绘制了图像和分布的图像。如你所见,有一个峰值在16,请忽略它。我想通过这个直方图拟合高斯曲线。我用这个方法来拟合: Un-normalized Gaussian curve on histogram。然而,我的高斯拟合从来没有接近它应该是什么。我是否在将图像转换为正确的绘图格式时出错了,或者是其他问题? enter image description hereGaussian distribution of the image

这是我用来生成数据的当前代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def fitGaussian(x,a,mean,sigma):
    return (a*np.exp(-((x-mean)**2/(2*sigma))))

fname = 'filepath.raw'
im = np.fromfile(fname,np.int16)
im.resize([3056,4064])

plt.figure()
plt.set_cmap(viridis)
plt.imshow(im, interpolation='none', vmin=16, vmax=np.percentile(im.ravel(),99))
plt.colorbar()
print 'Saving: ' + fname[:-4] + '.pdf'
plt.savefig(fname[:-4]+'.pdf')

plt.figure()
data = plt.hist(im.ravel(), bins=4096, range=(0,4095))

x = [0.5 * (data[1][i] + data[1][i+1]) for i in xrange(len(data[1])-1)]
y = data[0]

popt, pcov = curve_fit(fitGaussian, x, y, [500000,80,10])
x_fit = py.linspace(x[0], x[-1], 1000)
y_fit = fitGaussian(x_fit, *popt)
plt.plot(x_fit, y_fit, lw=4, color="r")        

plt.xlim(0,300)
plt.ylim(0,1e6)
plt.show()   

编辑:(回复Reblochon Masque)

如果我在16岁的时候拆下垃圾箱,我还是会得到同样的效果: enter image description here


Tags: 图像importdatarawas格式npplt
1条回答
网友
1楼 · 发布于 2024-10-01 15:28:22

拟合的高斯函数看起来太低了,因为它适用于所有的料仓,其中大多数都是零。一个解决方案是只将高斯函数拟合到非零的库中。在

我用np.histogram代替plt.hist来获得bin vaules,但这只是一个口味问题。重点是xh和{}的定义

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# Generate example data
x = np.random.randn(100000) * 50 + 75
x = np.round(x / 10) * 10
x = x[x >= 20]

yhist, xhist = np.histogram(x, bins=np.arange(4096))

xh = np.where(yhist > 0)[0]
yh = yhist[xh]

def gaussian(x, a, mean, sigma):
    return a * np.exp(-((x - mean)**2 / (2 * sigma**2)))

popt, pcov = curve_fit(gaussian, xh, yh, [10000, 100, 10])

plt.plot(yhist)
i = np.linspace(0, 300, 301)
plt.plot(i, gaussian(i, *popt))
plt.xlim(0, 300)

enter image description here

p.S.西格玛通常表示标准差,而不是方差。这就是为什么我在gaussian函数中求平方。在

相关问题 更多 >

    热门问题