2012-07-20 2 views
2

도움을 주시면 카메라 포즈를 추정하는 데 CvPosit을 사용할 수있게되었습니다 (이 링크 http://www.aforgenet.com/articles/posit/ 사용). MATLAB 코드를 사용하고 있습니다.포즈 추정

이제 이미지 좌표에 3D 점을 투영하여 자세를 확인하려고합니다.

  1. 이의이 큐브에 대한 이미지 포인트 및 세계 포인트를 가정 해 봅시다 있습니다 : 다음과 같이 세부 사항은 얻어진

    World Points=[28 28 -28;-28 28 -28;28 -28 -28, 28 28 28] 
    Image_Points=[-4 29;-180 86;-5 -102;76 137]; 
    
  2. 포즈 것은 :

    Pose =[0.896 0.0101 0.4439 -13.9708;-0.3031 0.7127 0.6326 13.7039;-0.3100 -0.701 0.6416 164.5663;0 0 0 1]; 
    

    나는 640을 사용했다 초점 거리. 이제이 포즈에서 3D 점을 사용하여 2D 이미지 점을 얻으려고합니다. 이상적으로 나는 같은 점을 얻어야한다. 그러나 나는 그것을 얻을 수 없다. 내가 MATLAB에서 다음과 같은 방법을 사용하고 있습니다 :

  3. 는 이제 P = [28;28;28;28;1] % 4 X 1 matrix for a 3D point

    P_Camera= Pose * P; 
    
    Calibration Matrix (K)=[640 0 0 0;0 640 0 0;0 0 1 0;0 0 0 1]; 
    
    Image Points= P_Camera*K;   
    

    내가 x = 15251y = 27447를 얻을 수 있다고 가정 해 봅시다. 내가 여기서 뭘 잘못하고 있는지 모르겠다. 제발 도와주세요 !!

답변

1

카메라 포즈 또는 카메라 외부 매개 변수는 회전 R과 변환 t로 구성됩니다. 나는 당신의 포즈 매트릭스가 실제로 [R t; [0 0 0 1]]이라고 믿습니다. 카메라 좌표에 3D 균일 포인트 (4 × 1)을 변환하기 위해 당신이 필요합니다 :

K 카메라 내장 (내부) 매개 변수를 포함하는 3 × 3 camera matrix입니다
Xcam = K*[R t]*Xworld 

. 당신이 K를 설정한다면, 당신의 번호와 비트를 연주하여 등 :

K = 

3.3202   0 -0.0229 
    0 3.3202 0.0153 
    0   0 1.0000 

(이 K가 F = 640의 데이터와 맞지 않는 가까운 답변을 얻을 것이다, 그러나 그것은 LS 솔루션입니다 입력 포인트와 포즈로). 그래도 오류가 있습니다. 카메라를 보정하고 광학 왜곡을 고려하십시오 (Matlab here에 대한 좋은 카메라 보정 도구 상자가 있음

).