改变图像亮度而不改变颜色

时间:2016-08-20 15:16:59

标签: image-processing

我对均衡彩色图像感兴趣。我正在做的是从RGB图像开始并根据this文章将其转换为YIQ值。之后,我可以通过考虑Y给出的亮度级别来获得图像的灰度版本。将算法应用于该灰度图像,我可以获得或多或少的原始版本的灰度版本图片。我想制作一个新的RGB图像,保留原始图像的颜色并校正亮度值,以获得原始图像的亮度均衡RGB版本。

首先,我尝试将YIQ值转换回RGB,但在均衡后考虑Y的修改值。通过这种方法,我得到了[0,1]中的RGB值。

因为第一种方法不起作用,所以我尝试以相对成功的水平进行以下操作。对于每个像素,如果Y'是均衡后的亮度级别,Y是原始亮度值,我认为由R'=(Y'/ Y)R,G'=(Y'/ Y)G给出的新RGB值和B'=(Y'/ Y)B。也就是说,我升级了亮度等级,保留了RGB分量分布的比例。

即使第二种方法有效,但我还有一个问题,即均衡后原始图像中的某些颜色会有所不同。根据原始图像,这种效果或多或少是可以实现的。我的问题是,在校正亮度值的情况下,将原始RGB图像转换为新图像有什么好的保色方法?

请注意,在第二种方法(顺便说一句,唯一有效的方法)中,我必须用公式(Y'/ Y)和最大值(1 /)之间的最小值替换公式中的(Y'/ Y)。 R),(1 / G)和(1 / B),所以我在任何组件中都不会超过1。当然,这是另一个缺点,因为对于某些像素,我无法获得在灰度均衡步骤中计算的亮度级别。

2 个答案:

答案 0 :(得分:0)

您不需要操作系统,软件环境或提供任何图像,因此我建议您在命令行中使用 ImageMagick 进行选项。它安装在大多数Linux发行版上,也可用于OSX和Windows,包括Python,PHP,Perl,Java,C / C ++绑定。

所以,我认为你想要这样的东西:

convert input.jpg -colorspace YIQ -channel R -equalize +channel -colorspace RGB result.jpg

那说...... "将图像input.jpg转换为YIQ色彩空间,然后仅在第一个通道(此处为Y通道的R通道)上操作,均衡该通道。现在恢复使用所有3个频道并返回RGB色彩空间并另存为result.jpg"

答案 1 :(得分:0)

您可以从当前范围到[0,1]范围进行线性变换。 让我们说现在你的绿色通道在转换回Y' IQ是[gMin,gMax]然后使用以下线性映射将所有值映射回[0,1]范围(基于此答案answer ):

NewValue = ((OldValue - gMin) / (gMax - gMin))

对所有通道R,G,B执行此操作。