2009. 9. 15. 15:42 Programming/Computer Vision
8 point 알고리즘
3 x 3 matrix인 Fundamenta matrix F는 8개의 corresponding point가 주어질 경우, unique하게 결정될 수 있다.
라고 하자. 위 식을 이용하여, 두 점과 f는 아래와 같이 나타낼 수 있다.
위 식을 사용하여 아래의 식을 생성한다.(마지막 항인 1은 생략이 가능하다.)
이 때, A는 8개의 corresponding point pair를 이용하여 만든 matrix이다.
위 식에 의해, f는 A를 Singular Value Decomposition(SVD)를 통해서 계산될 수 있다.
A matrix는 SVD에 의해서 USVT로 decompose되고, f는 V matrix의 last column이 된다.
출처 : http://www.cs.unc.edu/~marc/tutorial/node54.html
아래는 위의 내용을 OpenCV로 작성해본 코드이다.
F33은 1이므로, 위 식의 A matrix에서 마지막 column은 제거하였다.
CvMat* A = cvCreateMat(8, 8, CV_32FC1);
CvMat* S = cvCreateMat(8, 1, CV_32FC1);
CvMat* U = cvCreateMat(8, 8, CV_32FC1);
CvMat* V = cvCreateMat(8, 8, CV_32FC1);
// assign A matrix
float* pA = A->data.fl;
// point assign code here
// pA[i * 8 + j] = x;
cvSVD(A, S, U, V);
// f is a vector containing the elements of fundamenta matrix F
// float* pV = V->data.fl;
// pV[i * 8 + 7] ...
cvReleaseMat(&U);
cvReleaseMat(&S);
cvReleaseMat(&V);
cvReleaseMat(&A);
'Programming > Computer Vision' 카테고리의 다른 글
AutoAlbum (0) | 2009.05.02 |
---|---|
Computer Vision at MSR Cambridge (0) | 2009.05.02 |