zoukankan      html  css  js  c++  java
  • 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。也就是奇异向量矩阵的最有一个向量。

  • 相关阅读:
    2018年春季个人阅读计划
    软件需求我们需要做到什么
    开发日志03
    开发日志02
    开发日志01
    软件需求模式阅读笔记2
    2020/2/11-Python学习计划
    2020/2/10-Python学习计划
    2020/2/9-Python学习计划
    2020/2/8-Python学习计划
  • 原文地址:https://www.cnblogs.com/s--1/p/6621684.html
Copyright © 2011-2022 走看看