首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否应该将sRGB->CIEXYZ->丢弃亮度的结果转换回sRGB?

是否应该将sRGB->CIEXYZ->丢弃亮度的结果转换回sRGB?
EN

Stack Overflow用户
提问于 2011-05-31 17:42:36
回答 1查看 884关注 0票数 5

我正在为我的小马探测器写阴影删除。在我完成将PNG图像从sRGB转换为CIE之后,我删除亮度按照指示

当我试图将图像转换回sRGB以进行显示时,我会得到sRGB色域之外的RGB值(我得到的值大于255)。是正常的,还是应该继续寻找bug?注意:不经过修改就转换到XYZ并返回不会产生故障。

插图(左上角:原创,左下角:红色和蓝色的字节值环绕):

完整性:右上角:颜色比,右下角:转换为HSV,并将值相等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-01 15:29:34

最后的转换不移除亮度,它创建了两个新值,x,y,它们共同定义了色度,而Y包含亮度。这是指令链接中的关键段落(就在链接公式之前):

CIE XYZ颜色空间是故意设计的,因此Y参数是一种颜色亮度或亮度的度量。然后,由两个导出参数X和y指定颜色的色度,这两个参数是三个三刺激值X、Y和Z的函数,这是三个归一化值中的两个:

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

从最终转换中获得的xyz值不能直接转换回RGB,就好像它们是XYZ值一样(注大写)。因此,要回答您的实际问题:如果您将xyz值当作XYZ值使用,那么您的代码中就没有bug。从它转换到RGB不应该使用您链接的公式。

现在,如果您想真正地从整个图像中删除阴影,那么您所做的就是:

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

  • 然后转到RGB:

  • 然后在0.255间隔上重新分配RGB值。

这应该会给你一个非常无聊,但没有阴影的版本,你的原始形象。当然,如果您的目标是检测单个颜色区域,您也可以在xyY图像中的xy值上这样做,并使用原始图像上检测到的区域。

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

https://stackoverflow.com/questions/6191377

复制
相关文章

相似问题

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