DLT(Direct Linear Transform)算法

1、DLT定义

           DLT是一个 用于解决包含尺度问题的最小二乘问题 的算法。

          DLT解决问题的标准形式为:

                               {x_k}{propto}A{y_k}       (1)

         另一种表现形式为:

                         {x_k}={alpha}A{y_k}   或者 {alpha}{x_k}=A{y_k}    (2)

         这种模型在投影几何中会经常遇到。

         例如,针孔相机投影模型,3D点到图像平面的投影关系;

                 两视图几何中的单应性矩阵(Homography);

2、DLT求解

           因为尺度alpha的存在,因为不能用线性齐次最小二乘法直接求解。

         由(1)(2)式子可知:x_kAy_k的方向是相同的,即叉乘结果为0:

                                  {x_k}{	imes}A{y_k}=0       (3)

            对(3)用叉乘矩阵来表示:

                           {left[{{x_k}}
ight]_	imes}A{y_k}=0      (4)

          对于(4)式,可参考:向量叉乘与叉乘矩阵

          对(4)式进行变型就可以得到一个线性齐次最小二乘求解问题。可以参考:最小二乘法

3、举例

                          {alpha}{x_k}=A{y_k}

                       {x_k}=left[{egin{array}{*{20}{c}}
{{x_{1k}}}\
{{x_{2k}}}
end{array}}
ight]      {y_k}=left[{egin{array}{*{20}{c}}
{{y_{1k}}}\
{{y_{2k}}}\
{{y_{3k}}}
end{array}}
ight]     

           由公式(4):

                      

           展开:

                       egin{array}{l}
{left[{{x_k}}
ight]_	imes}A{y_k}=;{a_{11}}{x_{2k}}{y_{1k}}-{a_{21}}{x_{1k}}{y_{1k}}+{a_{12}}{x_{2k}}{y_{2k}}\
;;;;;;;;;;;;;;;;;-{a_{22}}{x_{1k}}{y_{2k}}+{a_{13}}{x_{2k}}{y_{3k}}-{a_{23}}{x_{1k}}{y_{3k}}
end{array}

           写成矩阵的形式:

                                 {left[{{x_k}}
ight]_	imes}A{y_k}={b_k}a=0

           其中:

                      {b_k}=left[{egin{array}{*{20}{c}}
{{x_{2k}}{y_{1k}}}\
{-{x_{1k}}{y_{1k}}}\
{{x_{2k}}{y_{2k}}}\
{-{x_{1k}}{y_{2k}}}\
{{x_{2k}}{y_{3k}}}\
{-{x_{1k}}{y_{3k}}}
end{array}}
ight]         a=left[{egin{array}{*{20}{c}}
{{a_{11}}}\
{{a_{21}}}\
{{a_{12}}}\
{{a_{22}}}\
{{a_{13}}}\
{{a_{23}}}
end{array}}
ight]

原文地址:https://www.cnblogs.com/monoSLAM/p/5349962.html