我是python和matplotlib的新手,我想知道是否有人知道是否有任何实用程序可用于进行直方图均衡的等效但是对于matplotlib颜色表?有一个名为matplotlib.colors.Normalize的函数,如果给定一个图像数组,它将自动设置底部和顶部级别,但我想要更智能的东西。我总是可以直接对数据本身应用直方图均衡,但我宁愿不触摸数据。有什么想法吗?
答案 0 :(得分: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()
答案 1 :(得分:0)
可以通过修改图像的调色板(或LUT)来应用直方图均衡,这样就可以定义均衡的调色板。
我搜索了一下,找不到用于计算均衡调色板的源代码,所以除非有东西退出,否则你必须自己编写代码。
您应该从Wikipedia article上的算法说明开始。
您也可以在matplotlib列表上寻求帮助。