【问题标题】:Implement Gimp's luminance layer mode in Python在 Python 中实现 Gimp 的亮度层模式
【发布时间】:2021-02-19 17:50:34
【问题描述】:

Gimp 在图层设置中有“亮度”模式:

我用它在放大的低分辨率彩色图像上叠加高分辨率灰度图像,以使彩色图像更清晰。例如,给定一张灰度图和一张彩色图

,

在模糊的彩色图像上应用灰度图像作为亮度“蒙版”的结果会创建清晰的彩色图像:

亮度过滤器是如何工作的,我将如何在 Python 中实现它(例如使用 Pillow)?

【问题讨论】:

    标签: image-processing python-imaging-library gimp


    【解决方案1】:

    简单来说,人眼对亮度(亮度)的微小变化比对颜色的微小变化更敏感。顺便说一句,这就是 JPEG 使用chroma-downsampling 但保留完整亮度数据的原因。

    因此,基本上,您将低分辨率彩色图像转换为色彩空间,例如 LabHSV 或任何包含 LV 组件的颜色空间。然后,您用(高质量/高分辨率)亮度数据替换该组件并转换回 RGB。这样,您可以保留质量较低的颜色数据,但将其与质量较高的亮度数据相结合。

    这里已经很晚了,所以我明天可能会写代码,但它看起来大致是这样的:

    from PIL import Image
    
    # Load low quality colour image and convert to HSV
    lowQualColour = Image.open('colour.png')
    HSV = lowQualColour.convert('HSV')
    # Split channels, discarding Luminance
    H, S, _ = HSV.split()
    
    # Load high quality luminance as single channel
    hiQualLuminance = Image.open('luminance.png').convert('L')
    
    # Merge with colour channels and revert to RGB
    result = Image.merge('HSV', (H,S,hiQualLuminance)).convert('RGB')
    

    【讨论】:

      【解决方案2】:

      在实验中,使用这样的图像:

      • 在白色上,亮度模式下的图层会渲染自身的副本,因此合成图像的底部与顶层具有完全相同的亮度。

      • 如果您沿着垂直方向(例如使用参考线)从一个半部移动到另一半,并查看 xyY 模型的指针值(其中 Y 是亮度),您会发现亮度值变化不大,所以总体上可以假设亮度混合模式:

      • 将底部图像转换为具有亮度分量的某种颜色模型(可能是xyY),

      • 将顶部图像转换为相同的颜色模型

      • 使用顶部的亮度分量和底部的其他两个分量创建像素值。

      • 将像素值转换回 RGB

      这也与LCh lightness 的工作方式一致,在“指针”对话框中检查CIE LCh 值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多