gpt4 book ai didi

colors - sRGB->CIEXYZ->丢弃亮度的结果是否可以转换回 sRGB?

转载 作者:行者123 更新时间:2023-12-02 01:48:54 28 4
gpt4 key购买 nike

我正在为我的 pony detector 编写阴影去除功能。在我converted a PNG image from sRGB to CIE XYZ之后我删除了亮度as per instructions :


当我尝试将图像转换回 sRGB 进行显示时,我得到的 RGB 值超出 sRGB gamut 范围。 (我得到的值大于 255)。 这是正常现象吗?还是我应该继续寻找错误?注意:在不进行修改的情况下转换为 XYZ 并返回,不会产生任何故障。

插图(左上:original,左下:红色和蓝色色调的字节值包装):

为了完整起见:右上角:颜色比例,右下角:转换为 HSV 并均衡值。

最佳答案

最终的变换不会删除亮度,而是创建两个新值,xy,它们一起定义色度,而 Y 包含亮度。这是您的 instructions link 中的关键段落(就在您链接的公式之前):

The CIE XYZ color space was deliberately designed so that the Y parameter was a measure of the brightness or luminance of a color. The chromaticity of a color was then specified by the two derived parameters x and y, two of the three normalized values which are functions of all three tristimulus values X, Y, and Z:

这意味着,如果您有一个具有单一颜色的表面图像,但该表面的一部分位于阴影中,那么在 xyY 空间中,x 和 y 值应该相同(或者非常接近)。类似)对于表面上的所有像素,无论它们是否在阴影中。

从最终转换中获得的 xyz 值无法像 XYZ 值一样直接转换回 RGB(注意大写)。因此,要回答您的实际问题:如果您将 xyz 值视为 XYZ 值,那么您的代码中就没有错误。使用您链接的公式不能将其转换为 RGB。

现在,如果您想真正删除整个图像中的阴影,您要做的是:

  • 通过将每个值除以 255(假设为 24 位 RGB),将 RGB 值缩放为 [0-1] 范围内的浮点值。转换为 float 对准确性有很大帮助!
  • 将图像转换为 xyY
  • 将所有 Y 值替换为一个值,例如 0.5,但请进行实验。
  • 反转转换,从 xyY 到 XYZ:

X from xyY

Z from xyY

  • 然后到 RGB:

XYZ to RGB

  • 然后按 [0..255] 间隔重新调整 RGB 值。

这将为您提供原始图像的非常无聊但无阴影的版本。当然,如果您的目标是检测单色区域,您也可以只对 xyY 图像中的 xy 值执行此操作,并使用您在原始图像上检测到的区域。

关于colors - sRGB->CIEXYZ->丢弃亮度的结果是否可以转换回 sRGB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6191377/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com