如何用最小二乘法制作3x4色彩校正矩阵?

时间:2017-06-23 14:08:30

标签: matlab math image-processing matrix

我知道这个问题听起来很简单,但是,我想用这个数据得到一个3x4色彩校正矩阵(CCM)和最小二乘法b = M * A 其尺寸为b_3x10,M_3x4和A_4x10  这里的值是:

A =
0.0194 0.0193 0.0180 0.0167 0.0175 0.0183 0.0177 0.0172 0.0178 0.0185
0.0032 0.0099 0.0274 0.0089 0.0034 0.0070 0.0042 0.0079 0.0031 0.0037
0.0845 0.0579 0.0444 0.0407 0.0367 0.0481 0.0596 0.0484 0.0375 0.0394
0.0753 0.0814 0.0991 0.0922 0.0794 0.0785 0.0774 0.0759 0.0707 0.0640

b=
0.0111 0.0111 0.0110 0.0109 0.0111 0.0113 0.0112 0.0110 0.0108 0.0106
0.0017 0.0048 0.0013 0.0024 0.0008 0.0021 0.0012 0.0029 0.0006 0.0012
0.0887 0.0778 0.0739 0.0708 0.0677 0.0694 0.0711 0.0685 0.0660 0.0654

M =
m_11 m_12 m_13 m_14
m_21 m_22 m_23 m_24
m_31 m_32 m_33 m_34

Here matlab variables它们是RGB-NIR和RGB数据

我已阅读this article,但我不知道如何使用我的A和B尺寸。

-------------结果------------------- 第一个答案

M = 
    0.4272    0.0008    1.7853
   -0.0573    0.0212   -0.0913
   -0.0108    0.0222    0.3717
    0.0542    0.0077    0.2767

和b近似值是:

0.0113 0.0115 0.0110 0.0112 0.0112 0.0112 0.0109 0.0105 0.0108 0.0107
0.0025 0.0021 0.0023 0.0018 0.0015 0.0018 0.0020 0.0018 0.0015 0.0015
0.0865 0.0776 0.0736 0.0696 0.0666 0.0717 0.0747 0.0690 0.0649 0.0651

2 个答案:

答案 0 :(得分:1)

通常在最小二乘问题中,我们求解x*A = b,但在您的情况下,情况是您想要求解的系数出现在表达式的开头:x.' * A.' = b.'。请注意,我们可以通过转置mldivide将其重新制定为标准格式。之后你可以使用MATLAB的M = (A.' \ b.').'; 运算符,但是你必须把它放在上面的表格中,然后在你完成后调换结果:

x

通常在最小二乘问题中,bA是列向量,但您可以将它们作为矩阵。 MATLAB仍然可以为您完成工作,因为它将独立地求解矩阵M的每列的最小二乘解,但在您的情况下,它将是inv的每一行,因为它是换位。

以上优于使用mldivide,因为已知它在数值上不稳定,特别是对于较大尺寸的基质。 MATLAB的'Sensitivity'根据各种因素自动确定要使用的算法,例如条件数,系数矩阵的结构等。

答案 1 :(得分:1)

之前我没有使用色彩校正矩阵,所以我不太了解上下文,但从纯粹的数学角度来看,解决方案应该是:

M = (inv(A*A')*A*b')'

对于派生,让我们将b = M*A重写为规范形式A*x = b,其中x为未知,给我们M'*A' = b'A*x = b的最小二乘解是x = inv(A'*A)*A'*b,因此在我们的情况下它是M' = inv(A*A')*A*b'。通常,x被假定为向量而不是矩阵,尽管公式也适用于矩阵,因为它等同于为{{1}的每列求解单独的最小二乘问题。 }(即x行}。