matplotlib颜色表的直方图均衡化

1 投票
2 回答
2560 浏览
提问于 2025-04-16 16:49

我刚开始学习Python和matplotlib,想问一下有没有工具可以对matplotlib的颜色表进行类似于直方图均衡化的处理?有一个叫做matplotlib.colors.Normalize的函数,如果给它一个图像数组,它会自动设置最小值和最大值,但我想要的功能比这个更智能。我当然可以直接对数据进行直方图均衡化,但我更希望不去动数据。大家有什么想法吗?

2 个回答

0

直方图均衡化可以通过修改你图像的调色板(或者叫查找表)来实现,也就是说,你需要对调色板进行均衡化处理。

我查了一下,没找到计算均衡化调色板的源代码,所以如果没有现成的,你就得自己写代码了。

你可以先看看维基百科上的算法描述,这样可以帮助你入门。

你也可以在matplotlib的讨论组里寻求帮助。

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

撰写回答