gpt4 book ai didi

c# - 澄清 ColorMatrix 转换的工作原理

转载 作者:太空狗 更新时间:2023-10-29 20:35:12 27 4
gpt4 key购买 nike

我正在做一些图像处理应用程序的工作(为了好玩),并且正在努力完全理解 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

关于c# - 澄清 ColorMatrix 转换的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5096285/

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