问题标签 [srgb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1142 浏览

python-3.x - 在将 XYZ 转换为线性 sRGB 期间,答案超出范围 [0,1]

我的任务是将 RGB 图像转换为 LuvImage。在该域中执行线性拉伸。然后将其转换回 RGB 域。

原图:

[[ 0 0 0]

[255 0 0]

[100 100 100]

[0 100 100]]

Luv域中线性拉伸后的Luv图像

[[0, 0, 0],

[100, 175, 37.7],

[79.64, 0, 0],

[71.2 ,-29.29,-6.339]]

现在,我将其转换为XYZ 图像。答案是,

[[0,0, 0],

[1.5, 1, 0.53],

[0.533, 0.56, 0.61],

[0.344, 0.425, 0.523]]

现在,之后我通过将图像与矩阵相乘将其转换为线性 sRGB 图像:

[[3.240479,-1.53​​715,-0.498535],

[-0.969256, 1.875991, 0.041556],

[0.055648, -0.204043, 1.057311]]

这个转换的答案 -线性 sRGB 图像

[[0. 0. 0.],

[3.07132001 0.44046801 0.44082034],

[0.55904669 0.55972465 0.55993322],

[0.20106868 0.4850426 0.48520307]]

这里的问题是第二个像素的 sRGB 值不在 [0,1] 的范围内。对于所有其他像素,我得到了正确的值。

此转换的代码如上所示。有人可以指出我在第二个像素上做错了什么,以及如何解决它?

0 投票
3 回答
660 浏览

image - 导出到网络时是否需要 sRGB v4 或 sRGB v2?

在将我的图像导出到网络之前,我想将它们转换为 sRGB,然后从图像中删除 sRGB 配置文件(以减小它的大小,因为如果没有嵌入的 icc 配置文件,sRGB 是默认使用的配置文件)。我以为只有一个 sRGB icc 配置文件,但我发现有很多变体!例如在 color.org 上,有 sRGB v4(包含在 Imagemagick 的发行版中)和 sRGB v2。

那么对于 sRGB 配置文件,我需要选择正确的配置文件来转换我的图片以导出到网络吗?为什么有这么多不同的 sRGB 配置文件。(https://ninedegreesbelow.com/photography/srgb-profile-comparison.html)?

0 投票
1 回答
1535 浏览

video - 如何从 scRGB 颜色空间中的 HDR 视频中获取帧?

我想创建一个简单的视频播放器,可以在 HDR 电视上显示 HDR 视频。例如,这个“ LG Chess HDR ”视频。它采用 HEVC 编码,位深为 10 位,像素格式为 YUV420P10LE,具有 BT2020 颜色空间和 PQ 传递函数的元数据。

这篇 NVIDIA 文章中,我发现了下一篇:

显示驱动程序获取 scRGB 后台缓冲区,并将其转换为当前连接的显示器所期望的标准。一般来说,这意味着将颜色空间从 sRGB 原色转换为 BT。2020 初选,缩放到适当的水平,并使用 PQ 等机制进行编码。此外,如果显示连接需要,可能执行 RGB 到 YCC 之类的转换。

这意味着我的播放器应该在scRGB 颜色空间中渲染像素(线性编码,sRGB 原色,全范围是 -0.5 到刚好小于 +7.5)。所以我需要以某种方式从这个颜色空间中的源视频中获取帧,最好是 FP16 像素格式(半浮点,每个颜色通道 16 位)。我来到以下简单的管道将视频渲染为 HDR:

我正在尝试使用 FFmpeg 作为这个库,但不明白如何从 scRGB 颜色空间中的源 HDR 视频中获取帧

我现在使用sws_scale FFmpeg 方法来获取帧并了解过滤器 API。但是我没有找到任何关于如何使用这些功能在不解析所有源视频的元数据并为它们创建自定义视频过滤器的情况下透明地获取 scRGB 帧的信息和帮助。

请告诉我如何使用 FFmpeg 在 scRGB 颜色空间中获取帧。有人可以告诉其他图书馆我可以做到吗?

0 投票
1 回答
134 浏览

colors - xyY 颜色轨迹看起来不正确

我刚刚完成了将 xyY 颜色转换为 RGB 的任务。我正在使用 sRGB 颜色空间。

当我遍历 x 和 y 坐标时,这是我得到的输出: 在此处输入图像描述

白点 (D65) 用黑色像素标记。

但是,这是我应该得到的: 在此处输入图像描述

我尽力裁剪色域(我生成了边界线,然后使用 Photoshop 删除了这些边界之外),但很明显白色区域太大,红色区域太小,等等。

我测试了几种不同的 XYZ 颜色,并用我的程序和这个网站将它们转换为 RGB,它们在误差范围内匹配 ( <0.1)。

关于什么可能导致这些问题的任何想法?

编辑

看来我的输出与如何判断 xyY 颜色是否在 CIE 1931 色域内完全相同?.

(如果我不剪辑它)

这让我相信也许我没有做错任何事,但仍然没有解释为什么维基百科的色域不同。

0 投票
2 回答
1032 浏览

google-chrome - Windows 上的 Chrome 65:某些颜色显示不正确

适用于 Windows 的 Chrome 65 在颜色方面存在无穷无尽的问题。它只是显示其中一些与 FF 和 IE 不同。甚至 MacOS 上的 Chrome 也没有这个问题。

在此处查看图片:左 Chrome,右 Firefox

左边是 Chrome 中显示的颜色,右边是 FF 中的颜色。颜色代码是 (0,187,187),透明度为 0.7 在 Paint 中,颜色看起来像 FF 的颜色。

我知道我可以将 chrome://flags/#force-color-profile 切换到 sRGB 以恢复正确的颜色,但我不能在客户的机器上这样做。

  1. 有没有办法更改 html 页面以强制 Chrome 正确显示我的颜色?
  2. 你们知道这是否被 Chrome 团队认为是一个错误?因为他们似乎不太关心自 Chrome 61 以来一直存在的这么大的问题。

谢谢你的帮助。

0 投票
2 回答
324 浏览

post-processing - 如何更改 sRGB 图像的曝光?

我希望在进行进一步处理之前“标准化”一组图像的曝光。我尝试了以下方法:1)将 sRGB 转换为 sRGB 上每个维基百科页面的 CIE_XYZ;2) 将“Y”乘以或除以 2 以实现 1 档 EV 变化;3) 将 CIE_XYZ 转换回 sRGB。问题是步骤 3 经常产生负值(它们出现在矩阵乘法转换回线性 rgb 之后)。特别是,我的 sRGB 值测试集具有 (n,n,n) 形式,其中 0<=n<=255。我希望这些靠近色域的中心,并且 1 档的变化不会将我推出色域。这种方法有什么问题?

0 投票
2 回答
4616 浏览

opencv - opencv sRGB 到 RGB 转换

我有非线性 sRGB 格式的 iphone 照片。我需要线性RGB。我在 opencv(python) 中找不到将它们转换为线性 RGB 的方法。

还尝试了 ImageMagick convert :

还是一样的sRGB没有效果。

有任何想法吗 ?

0 投票
1 回答
2539 浏览

python-3.x - 当imdecode图像Python时OpenCV剥离sRGB配置文件

我正在阅读从互联网上获取的图像,然后立即在 python 中读入 OpenCV,如下所示:

我收到了 libpng 警告:

如何在读取之前剥离 sRGB 配置文件?人们建议在阅读它们之前通过 png 文件上的 imagemagick 来执行此操作,但这对我来说是不可能的。有没有办法直接在python中做到这一点?

编辑:

如果我使用https://uploadfiles.io/m1w2l上的文件运行它并使用代码,我无法在下面的答案中获得代码来解决我的问题:

我得到同样的警告

0 投票
0 回答
495 浏览

opengl - 使用 GL_FRAMEBUFFER_SRGB 进行 OpenGL 伽马校正

我正在编写 Blinn Phong(LearnOpenGL 教程)照明并尝试将经过伽马校正的颜色作为最终结果。

在我开始研究伽玛校正之前,我的照明看起来像这样:

图 1

然后我整天都在阅读有关 sRgb 颜色空间的内容,以及它的含义。我得出的结论是,经过伽马校正的颜色可以带来更好的照明质量。

我不想在片段着色器中手动调整伽玛。我可以通过启用 GL_FRAMEBUFFER_SRGB 并请求支持 sRgb 的帧缓冲区来让 opengl 做到这一点。(?)

这是启用 GL_FRAMEBUFFER_SRGB 和以 GL_RGB 格式加载的纹理:

图 2

这是预期的结果。颜色更亮,因为采样的纹理经过了两次颜色校正。(?)

这是启用 GL_FRAMEBUFFER_SRGB 和以 GL_SRGB 格式加载的纹理:

图 3 这是意想不到的结果。一切都太暗了,没有可见的漫反射颜色,只有镜面反射。

我的问题是:

为了让opengl自己做伽玛校正(根据LearnOpenGL教程),我需要:

• 具有支持 SRGB 的帧缓冲区;

• 加载带有 SRGB 标志的纹理;

我做错了什么,或者我错过了一些重要的事情?

更新:漫反射纹理以 GL_SRGB 格式加载,而镜面反射以 GL_RGB 格式加载。在上一张图像中,漫反射颜色似乎完全衰减(?),而镜面反射按预期采样。我的衰减函数是:

float attenuation = max(1.0 - distance / light.radius, 0.0);

0 投票
1 回答
493 浏览

python-3.x - skimage.color.rgb2lab 的输入应该是什么?

我一直在 rgb2lab 中使用线性 rgb(无伽马校正)。但是我刚刚注意到 rgb2lab 实际上是 rgb2xyz 后跟 xyz2lab,并且 rgb2xyz实际上需要 sRGB。因此,如果我有一个 RGB 为 (0,255) 的 sRGB 图像,我应该将 image/255 传递给 rgb2lab。那正确吗?