matplotlib颜色表的直方图均衡化

发布于 2024-11-04 09:17:57 字数 194 浏览 0 评论 0原文

我是 python 和 matplotlib 的新手,我想知道是否有人知道是否有任何实用程序可用于执行等效的直方图均衡,但对于 matplotlib 颜色表?有一个名为 matplotlib.colors.Normalize 的函数,如果给定图像数组,它将自动设置底部和顶部级别,但我想要更智能的东西。我总是可以将直方图均衡应用于数据本身,但我宁愿不接触数据。有什么想法吗?

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 always just apply histogram equalization to the data itself but I would rather not touch the data. Any thoughts?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

依 靠 2024-11-11 09:17:57

您必须创建自己的特定于图像的颜色图,但这并不太棘手:

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

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()
緦唸λ蓇 2024-11-11 09:17:57

直方图均衡可以通过修改图像的调色板(或 LUT)来应用,因此它会定义均衡的调色板。

我搜索了一下,找不到计算均衡调色板的源代码,因此除非存在某些内容,否则您必须自己编写代码。

您应该从维基百科文章上的算法描述开始。

您还可以在 matplotlib 列表上寻求帮助。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文