我正在为一个图像处理应用程序(娱乐)做一些工作,但是我还没有完全理解ColorMatrix变换的原理。我了解线性/仿射变换的基础知识,并且可以通过在线示例进行复制来完成工作,但我希望完全掌握为什么某些东西有效,而不仅仅满足于它的实现。
例如,对图像进行简单的转换以生成其反色(每种颜色都转换为其相应的互补色)使用以下矩阵:
[-1, 0, 0, 0, 0]
[0, -1, 0, 0, 0]
[0, 0, -1, 0, 0]
[0, 0, 0, 1, 0]
[1, 1, 1, 0, 1]
我知道-1是180度余弦值,这是将颜色“翻转”到其互补色所需的旋转,但我不明白的是,如何将颜色向量乘以上述矩阵并产生正确的互补向量。
例如,如果像素具有[247, 255, 0, 255, 1]的颜色向量(使用RGBAW空间),对上述矩阵执行乘法会产生[-247,-255,0,255,1],但那不正确,因为上述的真正互补颜色是[8,0,255,255,1]。
我在这里缺少一些显而易见的东西,并且很高兴承认我不完全确定自己在做什么 :)颜色向量被变换表示在其他坐标系中吗? (例如不是0-255)
如果有人能帮助提供我理解的“缺失链接”,我将非常感激。
编辑
我刚刚发现以下矩阵也有效,并且实际上在数学上很直观(它产生了正确的向量)。
-1 0 0 0 0
0 -1 0 0 0
0 0 -1 0 0
1 1 1 1 0
0 0 0 0 1
我的新问题是:为什么这两个矩阵都能起作用?后者提供了更令人满意的解决方案,因为我可以从代数的角度理解它为什么有效。四行是否用于缩放?如果是,为什么缩放会增加255?它从哪里获取该值?
如果这些问题很愚蠢,请原谅,我正在努力掌握它。