我正在寻找解决以下问题的算法:

我有两组向量,我想找到最接近从输入向量到输出向量的变换的矩阵。

向量是 3x1,所以矩阵是 3x3。

这是普遍的问题。我的特殊问题是我有一组 RGB 颜色,以及另一组包含所需颜色的颜色。我正在尝试找到一种 RGB 到 RGB 的转换,使我的颜色更接近所需的颜色。

输入和输出向量之间存在对应关系,因此计算应最小化的误差函数是容易的部分。但我怎样才能最小化这个功能呢?

有帮助吗?

解决方案

您没有指定语言,但以下是我在 Matlab 中解决该问题的方法。

  • v1 是一个 3xn 矩阵,包含垂直向量中的输入颜色
  • v2 也是一个包含输出颜色的 3xn 矩阵

你想解决系统问题

M*v1 = v2
M = v2*inv(v1)

然而,v1 不能直接可逆,因为它不是方阵。Matlab 将使用 mrdivide 运算自动求解该问题 (M = v2/v1),其中 M 是最佳拟合解。

eg: 
>> v1 = rand(3,10);
>> M = rand(3,3);
>> v2 = M * v1;
>> v2/v1 - M

ans =

   1.0e-15 *

    0.4510    0.4441   -0.5551
    0.2220    0.1388   -0.3331
    0.4441    0.2220   -0.4441

>> (v2 + randn(size(v2))*0.1)/v1 - M
ans =

    0.0598   -0.1961    0.0931
   -0.1684    0.0509    0.1465
   -0.0931   -0.0009    0.0213

给出了一个与语言无关的解决方案来解决问题。

其他提示

这是一个典型的线性代数问题,关键短语搜索上“多元线性回归”。

我已经在过去几年编写过很多次的一些变化。例如,代码以校准数字化纸簿或触笔触摸屏使用相同的数学。


下面的计算方法如下:

让的 P 是输入矢量和相应的输出矢量。

要的变换是3×3矩阵;称它为的 A

有关单个的输入和输出向量的 P 下,存在一个误差向量的ë

<强>电子 = - 的 A X <强> P

的误差的大小的平方是标量值:

<强>电子ŤX的ë =( - 的 A X <强> P ) ŤX( - 的 A X <强> p

(其中T接线员是转置)。

你真的希望尽量减少什么是总和的电子在组值:

<强>电子 =总和(的ë

此最小满足矩阵方程的 d = 0,其中

<强>ð(I,J)= <强>电子相对于为 A (I,J)

的偏导数

假设有N个输入和输出向量。

您输入的3矢量的集合是一个3×N个矩阵;调用此矩阵的 P 即可。 的第i列的 P 是第i个输入矢量。

那么,该组输出3-向量;调用此矩阵

当你磨通所有的代数的,解决的办法是

<强> A = X <强> P ŤX(的 P X <强> P Ť )^ -1

(其中^ -1是逆算子 - 约没有标或下标对不起)


这里的算法:

从输入矢量集的创建3×N个矩阵的 P

从该组输出向量的创建3×N个矩阵

矩阵乘法的 - [R = <强> P X的转置(的 P

计算所述inverseof的 - [R

矩阵乘法的 A = X的转置(的 P )X逆(的 - [R

使用矩阵乘法和你选择的线性代数库矩阵求逆例程


<强>然而下,3×3的仿射变换矩阵能够缩放和旋转的输入向量,但<强>不做任何翻译!这可能不是一般的足够您的问题。它通常是在每一个3-矢量,使然后4矢量的端追加了“1”,并寻找最好3×4变换矩阵,该误差最小的好主意。这不能伤害;它只能导致更好的拟合数据。

一些线性代数应该足够:

写输入和输出之间的平均平方差(每个输入和输出值之间的每个差值的平方和)。我认为这作为定义“最好的近似”

这是您的9未知矩阵系数的二次函数。

要最小化,对于它们中的每导出它。

您会得到你必须解决,以获得溶液(唯一的或依赖于输入设定的空间品种)9个方程的线性系统

当差函数没有平方,可以执行相同的,但必须使用迭代方法来求解方程系统。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top