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



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

完整性:右上角:颜色比,右下角:转换为HSV,并将值相等。
发布于 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不应该使用您链接的公式。
现在,如果您想真正地从整个图像中删除阴影,那么您所做的就是:



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