首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sRGB恒定亮度条纹

sRGB恒定亮度条纹
EN

Stack Overflow用户
提问于 2020-07-31 12:20:54
回答 2查看 238关注 0票数 1

我想要创造一个恒定亮度的颜色光谱。

这是我目前为止的尝试(这是密码箱):

密码

  • 通过8位RGB值来增加色调和恒定(和无关)亮度,
  • 将三元组转换为相应的线性值(un-"gamma",从这里取下来的代码),
  • 通过使用sRGB亮度值形成标量乘积来计算亮度,
  • 用“卢马”将颜色归一化,最后
  • 转换回8位RGB (重新-“伽马”)。

正如我在图片中注释的那样,如果你问我的话,底部的第二条条纹有一个相当亮的蓝色。那可能是因为

  • 我的屏幕上没有sRGB (尽管我的手机同意),
  • 我的眼球和人类的平均水平不一样,
  • sRGB亮度值一开始并不反映亮度感知

我想更有可能是我犯了什么错,或者在这里什么都不懂。

我稍微调整了sRGB亮度值,以得到底部条纹,这是在我所期望的边缘(也许仍然有一点明亮的蓝色)。

所以我的问题是:

  • 你们在屏幕上主观地看到了什么?你认为下面两条条纹中哪一条更接近常量亮度?
  • 假设我不是唯一一个,这里怎么了?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-01 05:32:17

RGB颜色空间在感知上不是均匀的空间。生成明显一致的色调条纹需要使用感知一致的颜色空间或颜色外观模型,如ICtCp或CAM16。

使用颜色,它可以实现如下:

代码语言:javascript
复制
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显示、校准和查看条件。

票数 3
EN

Stack Overflow用户

发布于 2020-08-10 06:00:01

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

效果

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63191729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档