Масштаб Python imshow для нормального распределения данных двумерного массива

1

Я хочу масштабировать показанные данные из массива numpy с нормальным распределением. В этом учебном пособии предлагается использование клипа, но в примере ограничения жестко запрограммированы на clim=(0.0, 0.7). Получение этих значений из предыдущей гистограммы в учебнике:

Изображение 174551

Итак, мне нужен хороший способ получить значения высоты (без жесткого кодирования), возможно, используя стандартное отклонение (1 сигма, 2 сигма, 3 сигма), чтобы получить основные значения:

Изображение 174551

Как я могу это сделать?

Теги:
numpy
statistics
imshow

1 ответ

0

Чтобы получить нормальное распределение, вы можете использовать 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)

Изображение 174551

Затем вы можете использовать параметры подгонки для clim. Во-первых, здесь исходное изображение:

plt.imshow(img)

Изображение 174551

Здесь ограничение цвета пикселей в пределах 3-сигма:

plt.imshow(img, clim=(mu-3*sigma, mu+3*sigma))

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню