2016-08-20 313 views
0

我对均衡彩色图像感兴趣。根据this的文章,我所做的是从RGB图像开始并将其转换为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图像转换为新图像的颜色保存方法是什么?请注意,在第二种方法(btw,唯一一个工作),我必须用公式中的(Y'/ Y)替换(Y'/ Y)和(1)中最大值之间的最小值/ R),(1/G)和(1/B),所以在任何组件中我都不会超过1。当然,这是另一个缺点,因为对于某些像素,我无法获得在灰度均衡步骤中计算的亮度级别。

+0

我没有完全理解为什么第一种方法不起作用?均衡的Y值在[0,1]之间,并且在使用新的Y和旧的I和Q之后,您获得的RGB磨砂值大于1? –

+0

@AmitayNachmani是或低于零。但是,如果你仔细想想,它确实有道理。三个值RGB用于计算每个YIQ值。如果修改Y得到Y',只要这个新值Y'是Y'IQ可能由某些有效的RGB坐标生成的,就可以返回有效的RGB坐标。 – ORerwannabe

+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色彩空间,那么只有第一个通道上运行(R声道其为Y这里) ,均衡该通道,现在恢复使用全部3个通道并返回RGB色彩空间并保存为result.jpg

+0

我在Fedora上使用Python与SciPy。我非常感谢你的回答,事实上,我将用它来比较我的算法得到的结果。但是,我必须自己做,理解转换过程中发生了什么。我只需要一些聪明的方法回去,同时保持rgb的相对等级或类似的东西。 – ORerwannabe

0

您可以执行从当前范围到[0,1]范围的线性转换。 比方说现在转换从Y'IQ回后的绿色通道是[GMIN,GMAX]然后所有值映射回[0,1]范围内使用以下线性映射(根据此答案answer):

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

对所有通道R,G,B都这样做。

相关问题