gpt4 book ai didi

python - 使用 Python 图像库 (PIL) 标准化一组图像的直方图(亮度和对比度)

转载 作者:太空狗 更新时间:2023-10-29 18:30:55 24 4
gpt4 key购买 nike

我有一个脚本,它使用 Google Maps API 下载一系列大小相等的方形卫星图像并生成 PDF。图像需要事先旋转,我已经使用 PIL 这样做了。

我注意到,由于光线和地形条件不同,有些图像太亮,有些太暗,生成的 pdf 最终有点难看,“现场”阅读条件不太理想(这是野外山地自行车,我想要打印特定十字路口的缩略图)。

(编辑)然后的目标是使所有图像最终具有相似的表观亮度和对比度。因此,太亮的图像必须变暗,而暗的图像必须变亮。 (顺便说一句,我曾经用过imagemagick autocontrast,或者auto-gamma,或者equalize,或者autolevel,或类似的东西,在医学图像中有有趣的结果,但不知道如何在 PIL 中执行这些操作)。

我已经在转换为灰度后使用了一些图像校正(之前有一台灰度打印机),但结果也不是很好。这是我的灰度代码:

#!/usr/bin/python

def myEqualize(im)
im=im.convert('L')
contr = ImageEnhance.Contrast(im)
im = contr.enhance(0.3)
bright = ImageEnhance.Brightness(im)
im = bright.enhance(2)
#im.show()
return im

此代码对每个图像独立工作。我想知道是否先分析所有图像然后“标准化”它们的视觉属性(对比度、亮度、 Gamma 等)会更好。

此外,我认为有必要对图像(直方图?)进行一些分析,以便根据每个图像应用自定义校正,而不是对所有图像进行相同的校正(尽管任何“增强”函数隐含地考虑初始条件)。

有没有人遇到这样的问题和/或知道用彩色图像(无灰度)执行此操作的好方法?

任何帮助将不胜感激,感谢阅读!

最佳答案

您可能正在寻找的是执行“直方图拉伸(stretch)”的实用程序。 Here is one implementation .我相信还有其他人。我认为您想保留原始色调并在所有色带上统一应用此功能。

当然,很有可能有些瓷砖在它们连接的水平上有明显的不连续性。然而,避免这种情况将涉及“拉伸(stretch)”参数的空间插值,并且是一个复杂得多的解决方案。 (...但如果有需要,这将是一个很好的练习。)

编辑:

这里有一个保留图像色调的调整:

import operator

def equalize(im):
h = im.convert("L").histogram()
lut = []
for b in range(0, len(h), 256):
# step size
step = reduce(operator.add, h[b:b+256]) / 255
# create equalization lookup table
n = 0
for i in range(256):
lut.append(n / step)
n = n + h[i+b]
# map image through lookup table
return im.point(lut*im.layers)

关于python - 使用 Python 图像库 (PIL) 标准化一组图像的直方图(亮度和对比度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7116113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com