레이블이 cholesky decompostion인 게시물을 표시합니다. 모든 게시물 표시
레이블이 cholesky decompostion인 게시물을 표시합니다. 모든 게시물 표시

2009년 1월 7일 수요일

cholesky 분해를 이용한 카메라 내부 파라미터 계산

책에 있는 내용을 참고해서 직접 작성한 코드입니다.


직교성을 가진 소실점(vanishing point)이 주어졌을 때 cholesky 분해를 이용하여 카메라 내부 파라미터 K를 계산하는 코드입니다.

여기서 가정은 square pixel이라는 것과 초점거리 fx = fy 가 같다는 것입니다.

cholesky 분해를 위해서는 Omega 행렬이 positive definite 해야만 합니다. 소실점의 값이 제대로 계산되어 입력되지 않으면 cholesky 분해에서 positive definite이 아니라는 에러가 나올 것입니다.


function K = sky_K_from_IAC(v1, v2)
% function K = sky_K_from_IAC(v1, v2)
% Input : v1, v2 -> vanishing points
% Output : K -> internal parameters
%
% Reference : Multiple view geometry in computer vision, second edition(p.226)
% Assumption : w11 = w22, w12 = w21 = 0
% w = [w1 0 w2;
% 0 w1 w3;
% w2 w3 w4];
%
% Shin, Ki-Young
% Biomedical Engineering Lab.
% Sungkyunkwan univ.
% Data : 2008/12/4


for i=1:length(v1)
A(i,:) = [ v1(i,1) * v2(i,1) + v1(i,2) * v2(i,2) v1(i,3) * v2(i,1) + v1(i,1) * v2(i,3) v1(i,3) * v2(i,2) + v1(i,2) * v2(i,3) v1(i,3) * v2(i,3)];
end

[U, S, V] = svd(A);
W = V(:,end);

% Omega must be positive definite
Omega = [W(1) 0 W(2);
0 W(1) W(3);
W(2) W(3) W(4)];

tmp_K = inv(chol(Omega));

K = tmp_K / tmp_K(3,3);


---------------------------------------------------------------------------------

주의 : 아직 위 코드가 완벽하게 검증되었다고 할 수는 없습니다.

그리고 혹시 cholesky decomposition을 할 때 positive definite가 아니라고 나오면 그 데이터 세트는 일찌감치 포기하고 다른 데이터 세트를 선택하는 것이 좋다.