Выравнивание гистограммы таблиц цветов matplotlib

1

Я новичок в python и matplotlib, и мне было интересно, знает ли кто-нибудь, есть ли какие-либо утилиты для эквавалента выравнивания гистограммы, но для таблицы цветов matplotlib? Существует функция matplotlib.colors.Normalize, которая при заданном массиве изображений автоматически устанавливает нижний и верхний уровни, но мне нужно что-то более интеллектуальное. Я всегда мог бы просто применить выравнивание гистограммы к самим данным, но я бы предпочел не касаться данных. Есть предположения?

Теги:
matplotlib

2 ответа

3
Лучший ответ

Вам нужно создать свой собственный цветовой код для конкретного изображения, но это не слишком сложно:

import pylab
import matplotlib.colors
import numpy

im = pylab.imread('lena.png').sum(axis=2) # make grayscale
pylab.imshow(im, cmap=pylab.cm.gray)
pylab.title('orig')
imvals = numpy.sort(im.flatten())
lo = imvals[0]
hi = imvals[-1]
steps = (imvals[::len(imvals)/256] - lo) / (hi - lo)
num_steps = float(len(steps))
interps = [(s, idx/num_steps, idx/num_steps) for idx, s in enumerate(steps)]
interps.append((1, 1, 1))
cdict = {'red' : interps,
         'green' : interps,
         'blue' : interps}
histeq_cmap = matplotlib.colors.LinearSegmentedColormap('HistEq', cdict)
pylab.figure()
pylab.imshow(im, cmap=histeq_cmap)
pylab.title('histeq')
pylab.show()
  • 0
    Вау! Спасибо вам за этот фрагмент кода. Это очень информативно. Я пойду дальше и попробую это. Я думаю, что это было бы здорово, чтобы включить в matplotlib.colors.Normalize. Возможно, я зайду на их форумы и посмотрю, не задумывался ли кто-нибудь об этом в будущем выпуске. Приветствия.
  • 1
    Вероятно, есть более простой способ сделать это с помощью np.lexsort () и просто обернуть ввод в imshow, а не создавать новую цветовую карту для каждого изображения. Это может быть причиной того, что они избежали реализации этого как части Normalize.
Показать ещё 1 комментарий
0

Коррекция гистограммы может быть применена путем изменения палитры (или LUT) вашего изображения, так что это будет определение выравниваемой палитры.

Я немного искал и не мог найти исходный код для вычисления сбалансированной палитры, поэтому, если что-то не выйдет, вам придется самому закодировать его.

Вам следует начать с описания алгоритма в статье Википедии.

Вы также можете обратиться за помощью к спискам matplotlib.

Ещё вопросы

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