2014-07-15 6 views
1

컨텍스트 : 많은 포인트 쌍에서 삼각형을 수행합니다 (2 차원에서 3 차원으로). I는이 방정식은 다음Matlab : 효율적으로 SVD를 여러 번 수행 하시겠습니까? (3D 점 구름을 삼각형 화하기 위해)

Mv = 0 with M = [P1 -x1 0] (6x6 matrix)  v = [X, lambda1, lambda2]^T (6x1) 
         [P2 0 -x2] 

여기서 P1, P2가 3 × 투영 행렬, X1 및 X2는 3D 점 (X)의 2 차원 투영되어 있으며, 상기 람다 단지 선 평면 교차를 나타내는 파라미터들 (중요하지 않은). 이 모든 것은 동질적인 좌표로 이루어 지므로 M은 6x6입니다.

문제 : M에서 SVD를 수행하면 두 개의 2D 점 x1과 x2의 최소 제곱 삼각 분할을 통해 3D 점을 얻을 수 있습니다. 모든 점 쌍에 대해 이것을 반복하면 점 구름을 얻을 수 있습니다. 그러나 for 루프에서 여러 번 반복적으로 SVD를 계산하는 것은 극히 비효율적입니다. 주로, 포인트를 먼저 삽입 한 다음 SVD를 수행하여 각 매트릭스를 구성해야합니다. 포인트 쌍 목록에서 SVD 계산을 벡터화 할 수있는 방법이 있습니까?

의견을 보내 주시면 대단히 감사하겠습니다.

+0

오늘 어떻게 해결할 것인지 생각했습니다. 삼각 측량을위한 SVD가 어떻게 작동하는지에 따라, 삼각형을 그리는 1000 포인트의 경우 행렬 1000x1000에 대해 svd를 해결해야 할 것이라고 걱정합니다 (대단히 희소 할지라도 대각선에서는 4x4 블록). 그렇게하면 for 루프를 사용하는 것보다 더 효율적이지는 않을 것입니다. 그러나 어떤 증명도하지 않고 있습니다 ... –

+0

성능 향상 - 유클리드 점 (삼차원이 아닌)을 삼각형 화하면 점 당 하나의 좌표가 저장되므로 'M'이 4x4가되어 SVD가 훨씬 쉬워집니다. 알고리즘의 변화는 더 이상 균질 방정식 집합을 풀지는 않지만 비 균질 성 (Ax = 0 대신 Ax = b를 풀어 냄)입니다. –

답변

0

컴퓨터 비전 시스템 도구 상자에 이제 triangulate 기능이 있습니다.