Я новичок в python и matplotlib, и мне было интересно, знает ли кто-нибудь, есть ли какие-либо утилиты для эквавалента выравнивания гистограммы, но для таблицы цветов matplotlib? Существует функция matplotlib.colors.Normalize, которая при заданном массиве изображений автоматически устанавливает нижний и верхний уровни, но мне нужно что-то более интеллектуальное. Я всегда мог бы просто применить выравнивание гистограммы к самим данным, но я бы предпочел не касаться данных. Есть предположения?
Вам нужно создать свой собственный цветовой код для конкретного изображения, но это не слишком сложно:
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()
Коррекция гистограммы может быть применена путем изменения палитры (или LUT) вашего изображения, так что это будет определение выравниваемой палитры.
Я немного искал и не мог найти исходный код для вычисления сбалансированной палитры, поэтому, если что-то не выйдет, вам придется самому закодировать его.
Вам следует начать с описания алгоритма в статье Википедии.
Вы также можете обратиться за помощью к спискам matplotlib.