矩阵乘法用于色彩空间转换

时间:2019-07-19 06:15:57

标签: image-processing color-space

在原始图像处理中,通常使用两个3x3矩阵进行两个色彩空间转换:rgb2xyz和xyz2camera。

然后可以通过以下两个矩阵乘法之一获得rgb2camera: (1)rgb2camera =(rgb2xyz)(xyz2camera) 要么: (2)rgb2camera =(xyz2camera)(rgb2xyz)

然后通过反转rgb2camera矩阵来获取camera2rgb。

但是,矩阵乘法不是可交换的,因此(1)和(2)给出不同的结果。我在各种在线文章中都看到了这两种方法,但是哪个正确?对我来说,(1)在数学上看起来是正确的,但是(2)似乎在视觉上给出了我所拥有的示例图像的更正确的图像。

2 个答案:

答案 0 :(得分:2)

在数学上,如果先乘以A,然后乘以B,则正确的组合矩阵为BA,而不是AB。它们以相反的顺序进行。您可以考虑将向量始终放在最后,因此看起来很合逻辑。所以第二个应该是正确的。

答案 1 :(得分:0)

如果您更改 xyz2camera 的参数,则可以同时使用这两个顺序。另一方面,变量名也具有语义值,并且您的变量名看起来“奇怪”。通常,您可以将相机特定的色彩空间转换为众所周知的色彩空间,因此使用 camera2xyz 更为正常。

如果我们考虑语义有效的变量名称,情况2是正确的:

rgb2camera = (xyz2camera)(rgb2xyz)

让我们从右到左走。我们假设(从名称中)我们正在将RGB矢量(sRGB?)转换为RGB_camera,我们将其称为LMS只是出于娱乐目的(LMS实际上只是眼睛响应,而不是相机传感器),并且您想要RGB(未明确指定)。

  L                     R                              R
[ S ] =  rgb2camera * [ G ] = xyz2camera * rgb2xyz * [ G ]
  M                     B                              B

您的变量名暗示:

  X                  R
[ Y ] =  rgb2xyz * [ G ]
  Z                  B

所以你有

  L                    X
[ S ] = xyz2camera * [ Y ]
  M                    Z

因此您具有期望值:

  L                    R
[ S ] = rgb2camera * [ G ]
  M                    B

这意味着rgb2camera = (xyz2camera)(rgb2xyz)就像您的第二个方程式一样。

您应该始终从右向左解释这种乘法。 Add在末尾添加一个虚拟矢量,并在每个步骤上注释您拥有的色彩空间(它将作为下一个乘法的输入)。这样您将减少错误。

注意:相机传感器通常采用RGB形式(几乎每个传感器上方都有R,G,B滤镜)。但是,您需要先进行消马赛克,并将R,G,B线性化(它们没有经过伽马校正,但是它们具有自己的校正功能)。

注意:校准软件通常以LUT3D形式为您提供更好的功能,因此可以进行非线性转换(无法从矩阵获得)。