0

3D 공간의 점을 2D 이미지 좌표로 투영하려고합니다. 나는 교정 된 내장 함수와 내가 사용하고있는 카메라의 외인성을 가지고있다. 저는 카메라 행렬 K와 왜곡 계수 D를 가지고 있습니다. 그러나, 나는 투영 된 이미지 좌표를 왜곡되지 않은 이미지로 만들고 싶습니다.왜곡되지 않은 이미지에 투영 점의 일관성

제 연구에서이 작업을 수행하는 방법이 두 가지 발견되었습니다.

  1. 사용을 OpenCV의 getOptimalNewCameraMatrix 기능은 새로운 왜곡되지 않은 이미지의 카메라 행렬 K '를 계산합니다. 그리고 프로젝션 포인트를 얻으려면 왜곡 파라미터를 0으로 설정하고 opencv의 projectPoints 함수에서이 K '를 사용하십시오.

  2. 이 함수의 왜곡 계수 D와 함께 원시 카메라 행렬 K를 사용하여 projectPoints 함수를 사용하고 투영 된 점을 얻습니다.

두 방법의 출력이 일치해야합니까?

+0

새로운 기능이 있습니까? 도움이 되니? – nkint

답변

2

당신의 생각에 뭔가 빠져 있다고 생각합니다.

카메라 매트릭스 K 및 dist. coefficent D는 undistortion을 만들기위한 매개 변수입니다 (렌즈가 어안과 같이 이미지를 왜곡하는 경우). 그것들은 내장 카메라 매개 변수라고 불리는 것입니다.

컴퓨터 비전에서 컴퓨터 그래픽으로 용어를 변경하면 뷰의 절두체를 정의하는 데 사용되는 매개 변수가 사용되며, 예를 들어 카메라의 초점 길이를 가져 오는 데 사용됩니다.

하지만 프로젝션 작업에는 충분하지 않습니다.

투영의 경우 컴퓨터 그래픽 용어 (예 : OpenGL)에서 생각하면 모델 뷰 투영 행렬이 필요합니다. 모델 행렬은 세계에서 객체의 위치를 ​​지정하는 행렬입니다. 뷰 행렬은 카메라의 위치를 ​​지정하고 투영 행렬은 절두체 (초점 각, 원근 왜곡 등)를 지정합니다.

모델 포인트를 3d에서 2d (또는 viceversa)로 변환하는 방법을 알고 싶다면 프로젝션과 뷰 매트릭스가 필요합니다 (모델 매트릭스가 있어야합니다. 스타트). 그리고 컴퓨터 비전에서 뷰 매트릭스는 estrinsic 매개 변수라고합니다.

그래서 세계에서 카메라의 위치 인 estrinsic 매개 변수도 필요합니다. 예를 들어, 해당 매개 변수는 rvec이고 tveccv:: projectPoints입니다.

계산하려는 경우 정확히 카메라의 화면에 알려진 2 차원 투영과 결합 된 일부 알려진 3d 점에서이 기능은 원하는 것의 반대가되는 cv::solvePnP의 결과입니다. 당신은 estrinsic 매개 변수 (어떤 opengl-opencv-augmented-reality- 어떤 응용 프로그램이든 cv::Rodrigues을 통해보기 매트릭스를 얻을 수 있습니다).

마지막주의 사항 : 카메라로 촬영 한 모든 사진에 내재적 매개 변수가 고정되어 있지만 (초점 길이는 변경하지 않은 상태에서) 신진 촬영을 위해 카메라를 움직일 때마다 estrinisc 매개 변수가 변경됩니다 다른 시점에서 그림을 볼 수 있습니다 (즉, 이것은 관점을 변경하므로 3D-2D 투영을 찾으려고합니다)

희망이 도움이 될 수 있습니다!