0

프로젝트의 3D 위치를 감지하기 위해 작업 중입니다. 두 개의 카메라가 방의 두 구석에 설치되어 있고 그 사이에 기본 매트릭스를 얻었습니다. 이 카메라는 내부적으로 보정되어 있습니다. 내 이미지 2592 X 1944이다실제 스케일까지 3D 재구성

K = 0 1,228 3,267 1,221 0 538 0 0 1]

F = [-1.098e -7- 3.50715e-7 -0.000313 2.312e-7 2.72256e -7 4.629e-5 0.000234 -0.00129250 1]

이제 우주에서 3D 점이 주어진다면, 방안의 동일한 물체에 해당하는 점을 이미지에서 얻을 수 있어야합니다. . 올바른 투영 행렬 (올바른 축척으로)을 얻을 수 있다면 나중에 OpenCV의 traingulatePoints 함수에 입력으로 사용하여 객체의 위치를 ​​얻을 수 있습니다.

나는 오랫동안이 일에 매달 렸습니다. 그래서 제발 도와주세요.

감사합니다.

+0

카메라 교정 행렬이 줄을 써서 작성되면, 즉,'K = [1228 0 3267; 0 1221 538; 0 0 1]'Matlab 표기법에서, 나는 그것이 매우 어색하다고 생각한다. 여러분의 이미지 크기는'2592 x 1944'이고, 카메라 보정의 주요 포인트는 보통 이미지의 중간 지점 근처이며'(3267, 538)'위치에 있습니다. 제 카메라의 보정이 잘못된 것 같습니다. – who9vy

답변

0

죄송합니다. 의견의 크기가 나오지 않습니다. so @ user2167617 귀하의 의견에 대한 회신을 보내주십시오. 꽤 많이 있습니다. 그러나 몇 가지 지침 : 단수 값은 (s, s, 0)이어야하므로 (1.3, 1.05, 0)은 꽤 좋은 추측입니다. R에 관해서 : 기술적으로, 이것은 옳다. 그러나 징후는 무시한다. deteminant (R) = 1 제약 조건을 만족시키지 않고 대신 -1 인 회전 행렬을 얻는 것이 매우 좋습니다. 이 경우 -1로 곱할 수 있습니다. 일반적으로이 접근법에 문제가 생기면 5 포인트 알고리즘을 사용하여 필수 매트릭스를 결정하십시오 (OpenCV의 최신 버전으로 구현 됨, 직접 작성해야 함). 이러한 정보로는 실제로 규모를 얻을 수 없습니다. 그러나 모든 것이 확장됩니다. 예를 들어 카메라 간의 거리를 1 단위로 정의하면 모든 것이 해당 단위로 측정됩니다.

+0

답장. z가 카메라 중심에서 장면을 향하고 있다고 가정하고 회전 및 이동 행렬을 찾았습니다. 그런 다음 삼각형 포인트를 매칭 점에 사용했습니다. 실제 장면에서 두 점 사이의 거리를 찾고 삼각형 화 된 이미지에서 같은 점 사이의 거리와 비교할 때 그 점을 찾을 수있었습니다. 이런 방식으로 얻은 거리에는 약간의 오차가 있습니다. 나는 이미지 정류없이 수행 한 간단한 선형 삼각 측량 때문이라고 가정합니다. 더 나은 삼각 측량으로 좋은 결과를 얻을 수 있기를 바랍니다. – amoghesturi

+0

답변을 수락하여 질문을 종료하는 것보다 완료된 경우. –

0

cv::reprojectImageTo3D 기능을 더 간단하게 사용할 수 있습니까? 3D 좌표를 알려줍니다.

+0

제 관심은 프로젝션 매트릭스 P1과 P2를 얻는 것이 었습니다. 근본적인 행렬 F의 도움을 받아 표준 투영 행렬 만 구할 수 있지만 이러한 것은 실제 규모가 아닙니다. 실제 규모에 맞는 P1과 P2를 얻을 수있는 방법을 안내해 주시겠습니까? – amoghesturi

+0

여기에 3D 재건에 대한 강의가 있습니다. (http://www.umiacs.umd.edu/~ramani/cmsc828d/lecture28.pdf), 2에서 규모를 계산할 수 없다는 것을 알려주는 "Reconstruction Ambiguities"장이 있습니다 조회수. –

2

내가 수집 한 것부터 당신은 교정 수단을 통해 기본 매트릭스를 얻었습니까? 어느 쪽이든, 기본 매트릭스 (또는 교정 장비 자체)를 사용하면 Essential 매트릭스의 분해를 통해 포즈 차이를 얻을 수 있습니다. 일단 당신이 그것을 가지고 있다면, 한 이미지에서 어떤 점이 다른 이미지의 다른 특징 점과 같은 물체 점에 속하는지를 식별하기 위해 일치하는 특징 점을 사용할 수 있습니다 (SURF, BRISK 등과 같은 특징 추출기 및 설명자를 사용). 그 정보를 사용하면 삼각 측량 할 수 있어야합니다.

+0

그래서 Fundamental Matrix에서 E = K2 '* F * K1을 사용하여 필수 매트릭스를 계산했습니다. 그런 다음 내 SVD는 (s, s, 1)과 같은 대각선 행렬이 필요하지만 대각 행렬은 diag (1.3, 1.05, 0)입니다. 나는 그것이 충분하다고 가정하고 T = U와 R의 마지막 열은 U * D * V '또는 U * D'* V '가 될 수 있습니다.올바른 조합이 무엇인지 알아 내면 P1 = [I | 0]과 P2 = [R | T]가됩니다. 그래서, 나는 결코 결정될 수없는 애매 모호함을 읽었습니다. 나는 물체의 정확한 3D 좌표를 추정하려고하므로 스케일을 알아야합니다. 나는 올바른 방향으로 나아가고 있는가? – amoghesturi

+0

SVD의 대각 행렬이'diag (1,1,0)'이라는 제약 조건을 적용 할 수 있습니다. 즉, 필수 행렬의 SVD가'E = U * D * V '이면, http://en.wikipedia.org/wiki/Eight-point_algorithm 3 단계에서 주어진대로 필수 행렬 'E'에서 'E'= U * diag (1,1,0) * V''로 변경하십시오. – who9vy