【问题标题】:Alter image luminance without changing colors在不改变颜色的情况下改变图像亮度
【发布时间】:2016-08-20 15:16:59
【问题描述】:

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

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

由于第一种方法行不通,我尝试以相对成功的方式执行以下操作。对于每个像素,如果 Y' 是均衡后的亮度级别,Y 是原始亮度值,我考虑由 R' = (Y'/Y) R, G' = (Y'/Y) G 和B' = (Y'/Y) B。也就是说,我在RGB分量的分布中升级了亮度级别保持比例。

即使第二种方法有效,但我的问题是原始图像中的某些颜色在均衡后看起来不同。根据原始图像,这种效果或多或少是可感知的。我的问题是,有什么好的保色方法可以将原始 RGB 图像转换为亮度值已校正的新图像?

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

【问题讨论】:

  • 我没有完全理解为什么第一种方法不起作用?均衡后的 Y 值介于 [0,1] 之间,并且在将新 Y 与旧 I 和 Q 一起使用后,您得到的 RGB 值大于 1?
  • @AmitayNachmani 是,或低于零。但如果你仔细想想,它确实是有道理的。这三个值 RGB 用于计算每个 YIQ 值。如果您修改 Y 以获得 Y',您将能够返回到有效的 RGB 坐标,只要这个新值 Y' 使得 Y'IQ 可以由一些有效的 RGB 坐标生成。
  • 是的,你是对的,我的错。

标签: image-processing


【解决方案1】:

您没有提及您的操作系统、您的软件环境,也没有提供任何图像,所以我建议在命令行中使用 ImageMagick 的选项。它安装在大多数 Linux 发行版上,也可用于带有 Python、PHP、Perl、Java、C/C++ 绑定的 OSX 和 Windows。

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

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

也就是说... “将图像input.jpg 转换为 YIQ 颜色空间,然后仅在第一个通道(此处为 Y 通道的 R 通道)上运行,均衡该通道。现在恢复使用所有 3 个通道并继续返回 RGB 色彩空间并保存为 result.jpg"

【讨论】:

  • 我在 Fedora 上使用 Python 和 SciPy。我非常感谢您的回答,事实上,我将使用它与我的算法获得的结果进行比较。但是,我必须自己做,了解转换中发生了什么。我只需要一些聪明的方法来返回,同时保持相同的 rgb 相对水平或类似的东西。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多