【问题标题】:sRGB constant luminance stripesRGB 恒定亮度条纹
【发布时间】:2020-07-31 12:20:54
【问题描述】:

我想创建一个具有恒定感知亮度的色谱。

这是我目前的尝试 (here's the codesandbox):

代码

  • 通过 8 位 RGB 值增加色调和恒定(和不相关的)亮度,
  • 将三元组转换为相应的线性值(un-“gamma”,code for that taken from here),
  • 通过与 sRGB 亮度值形成标量积来计算亮度,
  • 通过除以亮度来归一化颜色,最后
  • 转换回 8 位 RGB(重新“伽玛”)。

正如我在图片中注释的那样,如果你问我,从底部算起的第二条条纹是相当亮的蓝色。现在这可能是因为

  • 我的屏幕不支持 sRGB(虽然我的手机支持),
  • 我的眼球与人类的平均水平不同,
  • sRGB 亮度值一开始并不反映亮度感知

我认为这更有可能是我犯了一些错误或没有理解这里的东西。

我稍微调整了 sRGB 亮度值,以得到接近我所期望的底部条纹(尽管蓝色可能仍然有点亮)。

所以我的问题:

  • 你们主观上在屏幕上看到了什么?您认为底部两条条纹中的哪一条更接近感知到的恒定亮度?
  • 假设我不是唯一的,这里有什么问题?

【问题讨论】:

  • 其他问题可能会被删除,所以我会在这里发表评论。关于采矿,这绝对是一个有趣的想法。我记得几年前thepiratebay曾经做过类似的事情来补充广告收入。我不知道结果如何,但我很想知道。它也可能存在缩放问题。客户端浏览器内的矿工在消耗能源方面效率极低。

标签: color-space gamma srgb


【解决方案1】:

RGB 颜色空间在感知上不是统一的空间。生成感知一致的色调条纹需要使用感知一致的色彩空间或颜色外观模型,例如 ICtCpCAM16

使用Colour可以实现如下:

import colour
import numpy as np


def colour_stripe(S=1, samples=360):
    H = np.linspace(0, 1, samples)

    HSV = colour.utilities.tstack([H, np.ones(samples) * S, np.ones(samples)])
    RGB = colour.HSV_to_RGB(HSV)
 
    return RGB[np.newaxis, ...]


RGB = np.resize(colour_stripe(), [36, 360, 3])

colour.plotting.plot_image(colour.cctf_encoding(RGB * 0.5));

CAM16 = colour.convert(RGB, 'RGB', 'CAM16')
CAM16_UL = colour.CAM16_Specification(
    np.full(CAM16.J.shape, 0.5), CAM16.C, CAM16.h)

RGB_PU = colour.convert(CAM16_UL, 'CAM16', 'RGB')

colour.plotting.plot_image(colour.cctf_encoding(RGB_PU));

请记住,这里的假设是 sRGB 显示器校准和观看条件。

【讨论】:

  • 嗯,我的问题是关于恒定的感知亮度,而不是均匀的色调条纹。不过,那个图书馆是一些我不知道的有趣资源。
  • 这正是正在发生的事情,这里的亮度保持不变:np.full(CAM16.J.shape, 0.5),您可以将其应用于任何图像,而不仅仅是色调条纹。
  • 你说得对,下面的条纹确实看起来有恒定的亮度。我仍然想了解为什么仅通过 sRGB 亮度值进行归一化是不够的(如果不是这样的话,它们是用来做什么的)。另外,你有很好的链接到软管 CAM16/CIECAM 的东西吗?通过谷歌搜索,我找不到任何特别容易获得的东西。我确实找到了一种替代方法,通过 chroma.js 家伙使用称为 HCL 或 HLC 的颜色空间的资源来实现这一点,但我不知道它为什么会起作用或与 CAM16 的关系可能是什么。
  • Mark D. Fairchild 的《颜色外观模型》是该主题的真正书籍。就链接而言,最容易掌握的方法是看这个:en.wikipedia.org/wiki/Color_difference#Tolerance,尤其是 MacAdam Ellipses,它显示了 CIE xyY 中的色调和色度是如何不均匀的。 RGB 直接建立在 CIE xyY 和 CIE XYZ 之上,因此继承了它们的缺陷。考虑到这一点,CIE 大致创建了 CIE Lab* 和 Luv*,还发现颜色外观取决于环绕声,因此 CAM设计的。
【解决方案2】:

这取决于您希望“感知亮度”建模的内容。当您考虑不是由 CAM02 建模的 Helmholtz-Kohlrausch 效应时,您应该看到您需要决定您希望模型适合的模型或一系列颜色外观效果。

https://en.wikipedia.org/wiki/Helmholtz%E2%80%93Kohlrausch_effect

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-02
    • 2013-08-28
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    相关资源
    最近更新 更多