Я хочу построить гистограммы RGB изображения, используя numpy.histogram
.Как отображать значения диапазона на гистограмме изображения?
(См мою функцию draw_histogram
ниже)
Это хорошо работает для обычного диапазона [0, 255]:
import numpy as np
import matplotlib.pyplot as plt
im = plt.imread('Bulbasaur.jpeg')
draw_histogram(im, minimum=0., maximum=255.)
Что я хочу сделать:
Я ожидаю, что изображения, которые я использую, имеют вне диапазона значений. Иногда они будут вне пределов досягаемости, иногда нет. Я хочу использовать гистограмму RGB, чтобы проанализировать, насколько плохие значения вне диапазона.
Предположим, я ожидаю, что значения будут в худшем случае на интервале [-512, 512]. Я все еще хочу, чтобы гистограмма отображала интенсивность диапазона в нужном месте и оставила пустые незаселенные диапазоны. Например, если я снова нарисую гистограмму Bulbasaur.jpeg
, но с диапазоном [-512, 512], я ожидаю увидеть ту же самую гистограмму, но сократился вдоль оси «x» (между двумя пунктирными линиями на гистограмме ниже).
Проблема:
Когда я пытаюсь нарисовать гистограмму для нештатных диапазона, что-то идет не так:
import numpy as np
import matplotlib.pyplot as plt
im = plt.imread('Bulbasaur.jpeg')
draw_histogram(im, minimum=-512., maximum=512.)
Мой код draw_histogram()
:
def draw_histogram(im, minimum, maximum):
fig = plt.figure()
color = ('r','g','b')
for i, col in enumerate(color):
hist, bins = np.histogram(im[:, :, i], int(maximum-minimum), (minimum, maximum))
plt.plot(hist, color=col)
plt.xlim([int(minimum), int(maximum)])
# Draw vertical lines to easily locate the 'regular range'
plt.axvline(x=0, color='k', linestyle='dashed')
plt.axvline(x=255, color='k', linestyle='dashed')
plt.savefig('Histogram_Bulbasaur.png')
plt.close(fig)
return 0
Вопрос
Кто-нибудь знает способ правильно рисовать RGB гистограмму с нештатными диапазонами?
Удаляется комментарий, понял, что проблема была. –