Чтобы получить нормальное распределение, вы можете использовать scipy.optimize.curve_fit
, чтобы подогнать гауссову функцию к гистограмме.Следуя инструкциям, чтобы прочитать изображение и получить гистограмму, вот как вы можете подогнать гистограмму:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
from scipy.optimize import curve_fit
# Read image
img=mpimg.imread('stinkbug.png')
# Get histogram
hist,bins,_ = plt.hist(img.ravel(), bins=256, range=(0.0, 1.0), fc='k', ec='k')
# Get centers of histogram bins
bin_centers = np.mean([bins[:-1],bins[1:]], axis=0)
# Define the Gaussian function
def gaussian(x, mu, sigma, amp):
return amp*np.exp( -(x - mu)**2 / (2.*sigma**2))
# Curve fit
p_opt,_ = curve_fit(gaussian, bin_centers, hist)
# Get the fit parameters
mu, sigma, amp = p_opt
Вы можете просмотреть подборку:
fit = gaussian(bin_centers, mu, sigma, amp)
plt.plot(bin_centers, hist)
plt.plot(bin_centers, fit)
Тогда вы можете использовать параметры подгонки для clim
.Во-первых, вот оригинальное изображение:
plt.imshow(img)
Здесь ограничение цвета пикселя не превышает 3 сигма:
plt.imshow(img, clim=(mu-3*sigma, mu+3*sigma))