图像直方图的核密度估计

Kernel density estimation of the histogram of an image

我正在尝试对通过图像计算的直方图执行核密度估计:

我使用 scikit learn 来计算使用高斯核的核密度估计:

histogram = np.histogram(img, bins=256, range=(0,255), normed=False)
X = histogram[0][:, np.newaxis]
X_plot = np.linspace(0,255,256,)[:, np.newaxis]
kde = KernelDensity(kernel='gaussian', bandwidth=0.5).fit(X)
log_dens = kde.score_samples(X_plot)
res = np.exp(log_dens)

但是,当我绘制 'res' 时,我只得到它的前 3/4 个值,它们不同于 0。我不明白为什么我在按照此处给出的说明进行操作时没有得到很好的估计:

http://scikit-learn.org/stable/auto_examples/neighbors/plot_kde_1d.html

如您所述,您不需要执行直方图步骤。给定一组样本,KernelDensity.fit 估计密度。然后,您只需在预定义的网格上绘制密度估计值。

plt.figure()
X_plot = np.arange(255)[:, None]  # predefined grid
# estimate density on samples
kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(X.ravel()[:, None])
log_dens = kde.score_samples(X_plot)  # evaluate the density model on the data.
plt.plot(np.exp(log_dens))
plt.show()