Image processing 在Python中实现Gimp的亮度层模式
Gimp在图层设置中具有亮度模式: 我用它把高分辨率的灰度图像叠加在放大的低分辨率彩色图像上,使彩色图像更清晰。例如,给定灰度图像和彩色图像 , 将灰度图像用作模糊彩色图像上的亮度遮罩的结果将创建一个锐利的彩色图像:Image processing 在Python中实现Gimp的亮度层模式,image-processing,python-imaging-library,gimp,Image Processing,Python Imaging Library,Gimp,Gimp在图层设置中具有亮度模式: 我用它把高分辨率的灰度图像叠加在放大的低分辨率彩色图像上,使彩色图像更清晰。例如,给定灰度图像和彩色图像 , 将灰度图像用作模糊彩色图像上的亮度遮罩的结果将创建一个锐利的彩色图像: 亮度过滤器是如何工作的,我将如何在Python中实现这一点?例如,使用枕头?实验性地使用以下图像: from PIL import Image # Load low quality colour image and convert to HSV lowQualColour = I
亮度过滤器是如何工作的,我将如何在Python中实现这一点?例如,使用枕头?实验性地使用以下图像:
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')
在白色上,处于亮度模式的层渲染自身的副本,因此合成图像的底部与顶层具有完全相同的亮度
例如,如果使用辅助线沿垂直方向从一个半部分移动到另一个半部分,并查看xyY模型的指针值,其中Y是亮度,则会发现亮度值变化不大,因此总体上,可以假设亮度混合模式:
将底部图像转换为具有亮度组件xyY的某种颜色模型
将顶部图像转换为相同的颜色模型
使用顶部的亮度分量和底部的其他两个分量创建像素值
将像素值转换回RGB
这也与LCh亮度的工作原理一致,在指针对话框中检查CIE LCh值。实验性地使用如下图像:
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')
在白色上,处于亮度模式的层渲染自身的副本,因此合成图像的底部与顶层具有完全相同的亮度
例如,如果使用辅助线沿垂直方向从一个半部分移动到另一个半部分,并查看xyY模型的指针值,其中Y是亮度,则会发现亮度值变化不大,因此总体上,可以假设亮度混合模式:
将底部图像转换为具有亮度组件xyY的某种颜色模型
将顶部图像转换为相同的颜色模型
使用顶部的亮度分量和底部的其他两个分量创建像素值
将像素值转换回RGB
这也与LCh亮度的工作原理一致,在指针对话框中检查CIE LCh值。简单来说,人眼对亮度的微小变化比颜色的微小变化更敏感。顺便说一句,这就是为什么JPEG会保留完整的亮度数据 所以,基本上,你需要你的低分辨率彩色图像,并将其转换为一个色彩空间,如实验室或HSV或任何包含L或V成分。然后用高质量/高分辨率亮度数据替换该组件,并转换回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')
简单来说,人眼对亮度的微小变化比颜色的微小变化更敏感。顺便说一句,这就是为什么JPEG会保留完整的亮度数据 所以,基本上,你需要你的低分辨率彩色图像,并将其转换为一个色彩空间,如实验室或HSV或任何包含L或V成分。然后用高质量/高分辨率亮度数据替换该组件,并转换回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')