Triangulation求解3D坐标-直接线性转换(Direct Linear Transformation-DLT)算法【转】

Triangulation求解3D坐标-直接线性转换(Direct Linear Transformation-DLT)算法

http://blog.csdn.net/zzzblog/article/details/17097377

在做多视觉的3D重建的时候,当找到多帧的匹配点和对应相机姿态时,我们需要求得的匹配点 x 和 x' 以及对应的 P 和 P’我

们得到 x = PX, x' = P’X。

    得到了上述的两个等式,我们如何求方程组求解呢?

    这里我们回到2D投影转换来说一说,对于2D平面上的两个对应点<x, x'>,我们可以找到一个单应矩阵H来建立二者的关系x'  =

 Hx。H是一个 3x3 的矩阵,所以 x 和 x‘ 是齐次坐标系下的2D坐标,他们的数量级不一样,那么 x'  = Hx 不一定成立,但满足

叉积关系 x' x Hx = 0。很显然,x 和 x'

    在同一个方向上,叉积为0)。此时,设

 
 
 
 

    于是, x' x Hx = 0满足

    

      由于 ,所以我们可以将上式写成 AX = 0 的形式

   如果我们用xi'乘以第一行,yi'乘以第二行并相加,就得到了第三行,所以只有前两行是线性独立的。那么最终的A为2X9的矩阵:

 

      齐次坐标系的第三维w可以设为1。那么一组匹配点可以得到两个等式。

      A的解有三种:

1. 给4个匹配点可以得到一个 8X9 公式,且 rank(A) = 8。那么A的null-space即为一个解。

2. 当多于4个点的时候,我们需要求解超定解。我们所要的解就是A的最小奇异值对应的奇异向量。

3. 由于h的解取决于一个系数scale,我们可以通过改变系数来约束h。如果我们令h3,3为1,那么我们得到

 

     对于n个点,我们的到一个 2nx9 的矩阵 A, h的解就是最小奇异值对应的奇异向量。

     那么回到我们的Triangulation问题上,发现两个公式 x' = PX 和 x‘ = Hx  是非常相似的。令 x x (PX) = 0,我们可以得到 AX=0 ,其中A为

     求解的方法就和上面一样啦。

     由于我也是初学者,所以对求解 AX = 0 比较有兴趣。上面说 X 的最小二乘的解为什么是SVD最小奇异值对应的奇异向量?

     对于 AX = 0 我们感兴趣的是 X 的非 0 解。如果 X 为解那么 kX 也是解。为了使解唯一化。我们加入约束 

 对A做SVD分解, 。我们的目标是最小化,即。由于U 和 V 里面都是单位向量,所以

 且 ,我们令,那么,我们最终优化。这里面D是对角矩阵,对角线上存放了奇异值且从上到下依次递减。那么这个解就是y = (0,0,...,1)';所以 x = Vy。也就是奇异向量矩阵的最有一个向量。

原文地址:https://www.cnblogs.com/s--1/p/6621684.html