3

카메라에 대한 객체의 좌표 X, Y, Z 및 방향 Rx, Ry, Rz가 있다고 가정합니다. 또한, 전 세계에서이 카메라의 좌표 U, V, W 및 방향 Ru, Rv, Rw를가집니다.3D 카메라가 세계 좌표와 일치 함 (기초 변경?)

개체의 위치 (위치 및 회전)를 세계에서의 위치로 변환하려면 어떻게해야합니까?

그것은 나에게 기초가 된 것처럼 들리지만 나는 아직 명확한 출처를 찾지 못했습니다.

답변

3

실제로 두 가지 기준이 있습니다. 하나는 카메라를 기준으로하고 다른 하나는 절대 (세계)입니다. 따라서 기본적으로 상대 데이터를 절대 데이터로 변환하려고합니다.

위치

이 가장 쉬운 일입니다. (X, Y, Z) 위치를 벡터 t (U, V, W)로 변환해야합니다. 그러므로 절대 위치는 (Ax, Ay, Az) = (X, Y, Z) + t = (X + U, Y + V, Z + W)입니다.

동향

이 약간 더 어렵다. 카메라를 회전시키는 회전 행렬 ((0,0,1)에서 (Ru, Rv, Rw)까지 찾아야합니다. (0,0,1)을 (Ru, Rv, Rw) (X 축에 따라 하나, 예를 들어 Z 축에 따라 하나)로 취하는 두 개의 회전을 분해하려면 Basic Rotation Matrices을 봐야합니다. 종이에 절대 기초와 벡터 (Ru, Rv, Rw)를 그릴 것을 권합니다. 올바른 결과를 얻는 가장 간단한 방법입니다.

그래서 기본 회전 행렬 r1과 r2가 있습니다. 결과 회전 행렬 r = r1 * r2 (또는 r2 * r1, 상관 없다). 따라서 객체의 절대 방향은 (ARx, ARy, ARz) = r * (Rx, Ry, Rz)입니다.

희망이 도움이됩니다.

2

이 주제가 상당히 명확한이 문서를 발견했습니다. http://www.cse.psu.edu/~rcollins/CSE486/lecture12.pdf

그것은 역 동작, 즉 세계에서 카메라의 3D 좌표로 이동합니다. Pw는 카메라 세계에서의 포인트이고, Pw는 정상 세계에서의 포인트이고, R은 회전 매트릭스이고, C는 카메라 변환이다.

유감스럽게도 라텍스 공식을 추가하는 것이 다소 번거롭기 때문에 대신 일부 MATLAB 코드를 제공 할 것입니다.

function lecture12_collins() 
% for plotting simplicity I choose my points on plane z=0 in this example 
% Point in the world 
Pw = [2 2.5 0 1]'; 
% rotation 
th = pi/3; 
% translation 
c = [1 2.5 0]'; 
% obtain world to camera coordinate matrix 
T = GetT(th, c); 
% calculate the camera coordinate 
Pc = T*Pw 
% get the camera to world coordinate 
T_ = GetT_(th, c) 
% Alternatively you could use the inverse matrix 
% T_ = inv(R*C) 

% calculate the worldcoordinate 
Pw_ = T_*Pc 

assert (all(eq(Pw_ ,Pw))) 


function T = GetT(th, c) 
% I have assumed rotation around the z axis only here. 
R = [cos(th) -sin(th) 0 0 
    sin(th) cos(th) 0 0 
      0  0 1 0 
      0  0 0 1]; 
C = [1 0 0 -c(1) 
    0 1 0 -c(2) 
    0 0 1 -c(3) 
    0 0 0 1]; 
T = R*C; 

function T_ = GetT_(th, c) 
% negate the angle 
R_ = [cos(-th) -sin(-th) 0 0 
    sin(-th) cos(-th) 0 0 
      0  0 1 0 
      0  0 0 1]; 
% negate the translation 
C_ = [1 0 0 c(1) 
    0 1 0 c(2) 
    0 0 1 c(3) 
    0 0 0 1]; 
T_ = C_*R_ 

지금까지는 위치 정보 만 제공합니다. 회전에 대한 지식을 사용하여 회전했습니다. 저는 카메라가 물체에 수직이고 회전이 z 축 주위에서만 일어난다는 것을 알고 있습니다. 카메라와 물체의 회전을 추가 할 수 있습니다.