hel*_*ker 11 python image-processing brightness contrast python-imaging-library
我有一个脚本,它使用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
此代码对每个图像独立工作.我想知道首先分析所有图像然后"标准化"它们的视觉特性(对比度,亮度,伽玛等)会更好.
另外,我认为有必要在图像中进行一些分析(直方图?),以便根据每个图像应用自定义校正,而不是对所有图像进行相等的校正(尽管任何"增强"函数都隐含地考虑初始合同).
有没有人有这样的问题和/或知道用彩色图像(没有灰度)做这个的好方法?
任何帮助将不胜感激,感谢阅读!
您可能正在寻找的是一个执行"直方图拉伸"的实用程序. 这是一个实现.我相信还有其他人.我想你想要保留原始色调并在所有色带上均匀地应用这个功能.
当然,很有可能一些瓷砖在它们加入的水平上会有明显的不连续性.然而,避免这种情况将涉及"拉伸"参数的空间插值,并且是更复杂的解决方案.(......但如果有需要,这将是一个很好的练习.)
编辑:
这是一个保留图像色调的调整:
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)
| 归档时间: | 
 | 
| 查看次数: | 22293 次 | 
| 最近记录: |