【发布时间】:2014-09-05 21:14:39
【问题描述】:
上下文:对许多点对执行三角测量,2d 到 3d。我的方程式是:
Mv = 0 with M = [P1 -x1 0] (6x6 matrix) v = [X, lambda1, lambda2]^T (6x1)
[P2 0 -x2]
其中 P1、P2 是 3x4 投影矩阵,x1 和 x2 是 3D 点 X 的 2D 投影,而 lambdas 只是表示线平面交点的参数(不重要)。所有这些都是在齐次坐标中完成的,所以 M 是 6x6。
问题:通过对 M 进行 SVD,我可以得到两个 2D 点 x1 和 x2 的最小二乘三角剖分,得到一个 3D 点。如果我在所有点对上重复此操作,我可以获得点云。但是,在 for 循环中多次重复计算 SVD 效率极低;主要是,我必须先插入点,然后进行 SVD 来构造每个矩阵。有没有办法可以在点对列表上矢量化 SVD 计算?
任何建议将不胜感激!
【问题讨论】:
-
今天想好了怎么解决。由于三角剖分的 SVD 是如何工作的,我担心要对 1000 个点进行三角剖分,您必须为 1000x1000 的矩阵求解 svd(尽管它会非常稀疏——对角线上只有 4x4 块)。这样,我认为你不会比使用 for 循环更有效率。但我没有给出任何证据......
-
只是一种性能改进——如果对欧几里得点进行三角剖分(不均匀),则每个点保存一个坐标,这意味着
M变为 4x4,因此更容易进行 SVD。算法的变化是您不再求解齐次方程组,而是求解非齐次方程(而不是 Ax=0,您求解 Ax=b)。
标签: matlab computer-vision matlab-cvst svd point-clouds