4

OpenCV 카메라 자세 추정을위한 간단한 테스트를 실행합니다. 사진과 동일한 사진을 확대 (확대) 한 후 기능을 감지하고 필수 매트릭스를 계산하고 카메라 포즈를 복구하는 데 사용합니다.OpenCV의 recoverPose() 함수는 왼손잡이입니까?

그래서 원래 이미지를 첫 번째 이미지로 지정하고 확대 된 이미지를 두 번째 이미지로 지정하면 변환 T가 [0; 0; -1]. 그러나 두 번째 카메라 (줌)는 첫 번째 카메라보다 사실상 물체에 더 가깝습니다. 따라서 Z 축이 이미지 평면에서 장면으로 이동하면 두 번째 카메라는 Z 축을 따라 양의 오프셋을 가져야합니다. 내가 얻은 결과를 얻으려면 Z 축이 이미지면에서 다른 축 (X가 오른쪽, Y가 아래로)과 함께 왼쪽 방향 좌표계를 형성하는 카메라쪽으로 간다. 그게 사실이야? 이 결과가 here으로 표시된 좌표계와 다른 이유는 무엇입니까?

답변

3

OpenCV document에 따르면 recoverPose 함수의 알고리즘은 "Nistér, D. 5 점 상대 포즈 문제 CVPR 2003에 대한 효율적인 솔루션"이라는 논문을 기반으로합니다. 이 논문에서 제 2 방정식으로부터, 우리가 (도 here 참조) 기본 삼각형의 관계를 사용 알고

X2 = R의 * X1 내지 + t

그러므로을 번역 t는에서 CAM1하는 CAM2의 벡터이다 캠 2 프레임입니다. 이것은 왜 대답이 [0; 0; -1].

1

recoverPose() 함수는 첫 번째 카메라 변형을 두 번째 카메라 변형에 상대적으로 반환합니다 (직관적이지 않았고 문서에 명확하게 설명되어 있지 않음). 이 가정 테스트는 올바르게 작동합니다.