开发者

Histogram Equalization of matplotlib color tables

开发者 https://www.devze.com 2023-03-01 21:56 出处:网络
I\'m new to python and matplotlib and I was wondering whether anyone knew if there were any utilities available to do the equavalent of histogram equalization but to a matplotlib color table? There is

I'm new to python and matplotlib and I was wondering whether anyone knew if there were any utilities available to do the equavalent of histogram equalization but to a matplotlib color table? There is a function called matplotlib.colors.Normalize which, if given a image array, will automatically set the bottom and top levels but I want something more intelligent that this. I could开发者_StackOverflow中文版 always just apply histogram equalization to the data itself but I would rather not touch the data. Any thoughts?


You have to create your own image-specific colormap, but it's not too tricky:

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()


Histogram equalization can be applied by modifying the palette (or LUT) of your image, so it would the definition of a palette that is equalized.

I searched a bit and couldn't find source code for computing an equalized palette, so unless something exitss you would have to code it yourself.

You should be started with the description of the algorithm on the Wikipedia article.

You could also ask for help on the matplotlib lists.

0

精彩评论

暂无评论...
验证码 换一张
取 消