sho*_*nex 2 optimization linear-algebra blas colormatrix
我正在寻找算法来解决以下问题:
我有两组矢量,我想找到最接近从输入矢量到输出矢量的变换的矩阵.
向量是3x1,因此矩阵是3x3.
这是一般性问题.我特别的问题是我有一组RGB颜色,另一组包含所需的颜色.我试图找到RGB到RGB的变换,这将使我的颜色更接近所需的颜色.
输入和输出向量之间存在对应关系,因此计算应该最小化的误差函数是容易的部分.但是我怎样才能最小化这个功能呢?
这是一个经典的线性代数问题,搜索的关键词是"多元线性回归".
多年来,我不得不多次对这种变化进行编码.例如,校准数字转换器平板电脑或触控笔触摸屏的代码使用相同的数学运算.
这是数学:
设p为输入向量,q为对应的输出向量.
你想要的转换是3x3矩阵; 称之为一个.
对于单个输入和输出向量p和q,存在误差向量e
e = q - A x p
误差幅度的平方是标量值:
e T x e =(q - A x p)T x(q - A x p)
(T运算符是转置的).
你真正想要最小化的是集合上e值的总和:
E =总和(e)
该最小值满足矩阵方程D = 0其中
D(i,j)= E相对于A(i,j)的偏导数
假设您有N个输入和输出向量.
您的输入3向量集是3xN矩阵; 称此矩阵P.P的第i列是第i个输入向量.
输出3矢量集也是如此; 称此矩阵Q.
当你通过所有代数研磨时,解决方案就是
A = Q × P T x(P x P T)^ -1
(其中^ -1是逆运算符 - 抱歉没有上标或下标)
这是算法:
从输入向量集创建3xN矩阵P.
从输出向量集创建3xN矩阵Q.
矩阵乘法 R = P x转置(P)
计算R的反函数
矩阵乘A = Q x转置(P)x逆(R)
使用您选择的线性代数库的矩阵乘法和矩阵求逆例程.
但是,3x3仿射变换矩阵能够缩放和旋转输入矢量,但不进行任何平移!这可能不足以解决您的问题.通常最好在每个3向量的末尾附加"1"以生成4向量,并寻找最小化误差的最佳3x4变换矩阵.这不会伤害; 它只能导致更好的数据拟合.