澄清ColorMatrix转换的工作原理

我正在做一些关于图像处理应用程序的工作(为了好玩),并且努力完全理解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? 它从哪里获得价值?

对不起,如果这些都是非常愚蠢的问题,我试图让这个下来拍。


你说的是翻译的底线是正确的。 汉斯在他的评论中说的是,有一个缩放因子255涉及到,这可能会让你感到困惑。 一种看待这种情况的方法是,首先将所有ARGB值除以255,然后应用矩阵乘法,然后将所有值乘以255以提供正确的ARGB值。 另一种看待它的方式是将翻译值视为255。 两种方式你都会得到相同的结果。

((247/255) * -1 + 1) * 255 = 8
or
247 * -1 + 255 = 8
链接地址: http://www.djcxy.com/p/4967.html

上一篇: Clarification about how ColorMatrix transformations work

下一篇: Is my approach to Winforms coding old