问题标签 [chromaticity]

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 投票
2 回答
1079 浏览

colors - 为什么 1931 CIE xyY 色度图中的颜色是白色的?

当我们查看 1931 CIE 色度图时,它表示在 xyY 空间的 xy 平面内,它在亮度点处呈现白色(或接近白色),例如此处用E突出显示的 D65 点。

1931 cie色度图

但是为什么会这样呢?D65 的点应该表示为x = 0.33, y = 0.33。给定公式Y = 1 - x - y,这不是意味着 Y 是 0.34 吗?

sRGB 相关或 xyY 取决于我找到0.33,0.33,0.34每个转换器158.4182, 155.5676, 176.8565。这是浅棕色,而不是在 1931 年的每个色度图中看到的近白色。

似乎我需要缩放 Y 以获得每个通道的正确亮度值。

使用Y = 1 - x - y公式,我的图表看起来像这样,一个无声的图表:

色度图错误

我不明白什么?

编辑

设置 Y = 1,图表如下所示,效果更好。

在此处输入图像描述

编辑

现在看起来像下面这样。

在此处输入图像描述

0 投票
0 回答
423 浏览

matlab - matlab中如何计算cieplot 1931色度图?

我对matlab中的色度图计算完全感到困惑。

在这里找到代码在这里找到

xyz 到 srgb 的转换是标准的。虽然它似乎缺少光源适应。

对我来说没有意义的是 xyY 到 xyz 的转换。它在下面看到并逐步穿过可见光谱。我还没有找到像这样的任何其他实现.. 这似乎是 matlab 中的 patch 函数所独有的:

0 投票
1 回答
369 浏览

ios - 我无法让 vImage(加速框架)将 420Yp8_Cb8_Cr8(平面)转换为 ARGB8888

我正在尝试将 Planar YpCbCr 转换为 RGBA,但失败并出现错误 kvImageRoiLargerThanInputBuffer。我尝试了两种不同的方法。这是一些代码片段。注意“thumbnail_buffers + 1”和“thumbnail_buffers + 2”的宽度和高度是“thumbnail_buffers + 0”的一半,因为我正在处理 4:2:0 并且具有 (1/2)*(1/2) 一样多的色度每个样本作为亮度样本。这静默失败(即使我要求解释(kvImagePrintDiagnosticsToConsole)。

所以我再次尝试使用 vImageConvert_AnyToAny:

我得到了同样的错误,但这次我将以下消息打印到控制台。

但这对我来说没有任何意义。当我有 4:2:0 数据时,我的 Cb 高度怎么可能是 Yp 高度的一半(与我的 dest RGB 高度相同)?(宽度也是如此?)我到底做错了什么?我还将进行其他转换(4:4:4、4:2:2 等),因此我们将不胜感激任何对这些 API 的澄清。此外,我的站点应该用于这些转换吗?上面我使用了 kCVImageBufferChromaLocation_Center。那是对的吗?

一些新信息: 自从发布此信息后,我看到了一个明显的错误,但修复它并没有帮助。请注意,在上面的 vImageConvert_AnyToAny 案例中,我只使用图像宽度而不是 4*width 来初始化目标缓冲区,以便为 RGBA 腾出空间。应该是这个问题吧?没有。

进一步注意,在 vImageConvert_* 案例中,我根本没有初始化目标缓冲区。也解决了这个问题,但没有帮助。

到目前为止,我已经尝试了六种不同的转换方式,从 (vImageConvert_* | vImageConvert_AnyToAny) 中选择一种,从 (kvImage420Yp8_Cb8_Cr8 | kvImage420Yp8_CbCr8 | kvImage444CrYpCb8) 中选择一种,每次都输入适当数量的输入缓冲区——仔细检查缓冲区是否考虑在内每个平面每个像素的样本数。每次我得到:

这对我来说毫无意义。如果我的亮度平面是 100 宽,我的 RGBA 缓冲区应该是 400 宽。请从 YCC 到 RGBA 的任何指导或工作代码将不胜感激。