SfM
给定一组随时间变化的运动相机的流场或位移矢量,确定:
• 相机位姿的序列
• 场景的三维结构
SFM “Killer App”
Match Move
通过一个视频帧序列跟踪一组特征点
推断相机的位置和被跟踪特征点的三维位置
根据场景/相机推导出的三维几何来渲染合成对象
因子分解Factorization
Tomasi and Kanade, “Shape and Motion from Image Streams under Orthography,” International Journal of Computer Vision (IJCV), Vol 9, pp.137-154, 1992.
目标:在多帧上从多个点中结合对应点信息,以解决场景结构和相机运动(运动中恢复结构)
方法:基于SVD对观测点位置矩阵进行“因子分解”的数值稳定方法。
历史意义:在那之前,大多数SfM工作只处理最小配置和无噪声数据。因子分解是最早的“实用SFM算法”之一
回忆:世界坐标到像极坐标的变换
透视投影
• 非线性方程
• 射线 OP 上的任何点都有成像点 p !!
透视投影:平行线似乎在灭点相交;更远的物体看起来更小
简化:弱透视
弱透视 = 平行投影(平行线保持平行)+ 缩放以模拟由于物体距离引起的尺寸变化。
更简单的:正投影
纯平行投影。高度简化的情况下,我们甚至忽略了由于距离进行的缩放。
透视矩阵方程(相机坐标系下)
弱透视近似
正投影
和外参结合
正投影:代数方程
多点,多帧
因子分解方法
N个点P1,P2,…,Pj,…,PN(我们希望恢复它们)
注意,点集的绝对位置是无法唯一恢复的,所以…
第一招:将世界坐标系的原点设为 N 个点的中心!
质心在 0 处:
意味着:
注:这是第 t 帧图像中 x 坐标的质心
然后可以得到
第二招:减去每帧中二维点的质心。(中心化)
1) 从方程中移除了未知的相机位置。
2) 更重要的是,我们现在可以把一切写成一个大矩阵方程…
形成中心图像点矩阵
在一帧图像中的所有 N 个点
在所有 F 帧图像中跟踪一个点
W:中心测量(观测)矩阵;
M:“运动”(相机的旋转)
S:结构(3D 场景点)
秩理论:
2F×N 中心观测矩阵的秩最多为3
证明:
使用性质:
• mxn 矩阵的秩最多为min(m,n)
• A*B 的秩最多为min(秩(A),秩(B))
一个矩阵的秩
一个矩阵的秩是多少,如何定?
线性独立的列(行)数。
如果将矩阵A看作线性映射,则秩就是被映射到的空间的内在维数。
因子分解秩理论
秩理论的重要性
• 表示视频数据高度冗余
• 精确量化冗余
• 提出求解SFM的算法
因子分解方法
测量矩阵 W 的SVD形式
D:特征值按降序排列的对角矩阵
另一个有用的秩性质:
矩阵的秩等于非零特征值的个数。
d11, d22, d33 是仅有的非零特征值(其他都为0)
特征值按降序排列
前面三个为非零特征值,其他都为0
在实际应用中,由于噪声的存在,可能存在3个以上的非零特征值,但秩定理告诉我们,除了最大的3个特征值外,其余的都要忽略。
W:被观测的图像点
M:相机运动
S:场景结构
烦人的细节
问题:
1) 这个分解不唯一
例:
2) 对(也就是矩阵 M 的行)不一定是正交的
解决烦人的细节
以上两个问题的解决方法:
求 Q,使 M 的行满足:
3N 个方程,9个未知数
但这是非线性方程:使用线性化和迭代 (GN方法)
因子分解总结
假设:
- 正投影相机
- 在 F(>=3) 个帧上进行 N 个非共面点的跟踪
形成中心测量矩阵
其中:
mxi和myj是第i帧中点的平均值
j的范围是一组图像点
秩理论:中心测量矩阵的秩至多为3
因子分解算法
1) 从F帧上跟踪的N个点中形成中心测量矩阵W。
2) 计算W的SVD
U: 2F×2F
D:2F×D
V:N×N
3)取最大的三个特征值,然后组成
D’ :33 最大特征值的对角矩阵
U‘ :2F3 U矩阵中对应的列向量
V’T:3*N VT矩阵中对应的对应的航向量
4)定义:
5)求解使矩阵 M 的某些行正交的矩阵 Q
6)最终解为: