SFM总结(二)

现在把以前做的一些项目整理一下,算法代码巩固一下,想交流技术的朋友,qq:861045644,人在北京,欢迎骚扰。

这一部分是,已知:1.两张照片的同名点对;2.两个相机的P矩阵。

核心思想:两张照片上的同名点(图像上的点),共同描述实际物体一点(世界坐标系同一个点)

故:首先,我们分别在一幅照片找构建空间点与照片点的关系

        其次,用空间点为同一点连接两个方程

即可求出空间点坐标。

算法:

一。获得AX=0

x=PX     (x是图像中一点,X是空间一点,P矩阵是相机内参和外参构成3X4)

x`=PX`(第二张照片)

x(x,y,1)与PX叉乘 ---->

x(P3 tX)-P1 tX=0(1)

y(P3 tX)-P2tX=0(2)

x(P2 tX)- yP1tX=0 (3) 


三个方程,方程(1)(2)是独立的。



提出X得到------>AX=0,

              x(P3 t)- P1t

A=           y(P3 t)- P2t

                      x`(P`2 t)- y`P`1t

                    y`(P`3 t)- P`2t


二。求解X

容易知道,X是(X,Y,Z,1),并且A是4X4矩阵,现在面临方程数比未知数多一个的局面。

现在有两种方法来应对这种情况

(1)SVD分解

SVD(Singular Value Decomposition)

我们在线性代数中学习过,对方阵进行分解,那就是对角化,对称阵更加特殊(特征向量的特征值正交),但是书里面没讲面对非方阵该怎么办。

SVD 就是解决非方阵矩阵的。

SVD分解过程,多视图几何和网上有些博客对于U是mXm 还是mXn不一样,我也没有弄明白。

但是SVD分解的结果,是x的值等于v的最后一列的值(不要忘了第四个数要为1)

math::Matrix<double,4,4> V;

math::matrix_svd<double,4,4>(A,nullptr,nullptr,&V);

math::Vector<double,4> x=V.col(3);

x[0]/=x[3];

x[1]/=x[3];

x[2]/=x[3];

x[1],x[2],x[3]就是空间的坐标。


  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值