* http://www.cse.iitd.ernet.in/~suban/vision/geometry/node45.html에 가면 The image of the absolute conic에 대한 내용이 있다.
----------------------------------------------------------------------------------
Cholesky decomposition을 이용하여 카메라의 내부파라미터 K(위 자료에서는 C)를 구하려고 시도했던적이 있었다. 내부파라미터를 계산하기 위해서 positive definite matrix가 되어야 한다.
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가 아니라고 나오면 그 데이터 세트는 일찌감치 포기하고 다른 데이터 세트를 선택하는 것이 좋다.
직교성을 가진 소실점(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가 아니라고 나오면 그 데이터 세트는 일찌감치 포기하고 다른 데이터 세트를 선택하는 것이 좋다.
피드 구독하기:
글 (Atom)