Matlab:有效地多次执行SVD?(对三维点云进行三角剖分的步骤)

Matlab:有效地多次执行SVD?(对三维点云进行三角剖分的步骤),matlab,computer-vision,matlab-cvst,svd,point-clouds,Matlab,Computer Vision,Matlab Cvst,Svd,Point Clouds,上下文:对多个点对(从二维到三维)执行三角剖分。我得到的方程式是: 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投影,Lambda只是表示线平面交点的参数(不重要)。所有这些都是在齐次坐标系下完成的,所以M是6x6 问题:通过对M进行奇异值分解

上下文:对多个点对(从二维到三维)执行三角剖分。我得到的方程式是:

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投影,Lambda只是表示线平面交点的参数(不重要)。所有这些都是在齐次坐标系下完成的,所以M是6x6

问题:通过对M进行奇异值分解,我可以得到两个二维点x1和x2的最小二乘三角剖分,从而得到一个三维点。如果我在所有点对上重复这个步骤,我可以得到一个点云。然而,在for循环中多次重复计算SVD是非常低效的;主要是,我必须先插入点,然后进行奇异值分解来构造每个矩阵。有没有一种方法可以在点对列表上矢量化SVD计算


如有任何建议,将不胜感激

现在,计算机视觉系统工具箱中有一个函数。

今天我考虑了如何解决它。由于三角剖分的奇异值分解是如何工作的,我担心在对1000个点进行三角剖分时,必须求解矩阵1000x1000的奇异值分解(尽管它非常稀疏-对角线上只有4x4个块)。那样的话,我想你不会比使用for循环更有效。但我没有给出任何证明…只是性能改进-如果对欧几里德点(非齐次)进行三角化,则每个点可以保存一个坐标,这意味着
m
将变为4x4,从而更容易进行SVD。算法的变化是不再求解齐次方程组,而是求解非齐次方程组(而不是Ax=0,而是求解Ax=b)。