2D 카메라를 사용한 3D 위치 추정


9

나는 카메라 (아이폰)를 가지고 있으며, 그 속성을 잘 알고있는 이미지에 3D 제어 객체가 있습니다. (내 컨트롤 개체). 움직이는 보조 객체도 있습니다. 궁극적 인 목표는 주어진 시간 동안 움직이는 물체의 3D 궤도를 설정하는 것입니다. (추적)

물어보고 싶습니다. 알 수 있습니까?

  • 제어 물체까지의 전화 거리

  • 각 후속 프레임에서 객체를 찾을 수있는 보조 객체입니다. 내 목표는 위에서 지적한대로 3D 궤적을 추정하는 것입니다.

보너스 질문, 우리는 제어 객체까지의 전화 거리를 설정할 수 있도록 시스템을 만들 수 있습니다 (선호하지는 않지만).


이 분야의 문헌에 익숙하십니까? 그렇지 않다면 몇 가지 논문을 추천 할 수는 있지만 경고가 있습니다.
Emre

@emre 포인터를 제공 할 수 있다면 좋을 것입니다. 수학은 문제가되지 않습니다. 우리는 수학을 좋아합니다.
Ktuncer


@emre 나는 리뷰지를 훑어 보았다. 이것은 추적을위한 것이지, 나는 쉽게 문제를 추적 할 수있다. 객체가 어느 픽셀인지 알려줄 수 있습니다. 문제는 객체가 3D 공간에있는 것입니다. 이것이 가능한가? 기본적으로 3D 공간에는 참조 프레임으로 사용할 수있는 속성을 알고 있지만 바로 다른 객체가 있습니다.
Ktuncer

죄송합니다. 잘못된 용지입니다. 미지의 환경에 대한 비전 기반 3D 궤적 추적 [PDF]를 적용 할 수 있습니까? 그들은 스테레오 카메라를 사용합니다. 그게 당신에게 가능성이 있습니까?
Emre

답변:


15

물체에 6 개의 알려진 점 (알려진 3D 좌표)이 있으면 X,YZ) 객체 좌표계와 관련된 카메라의 위치를 ​​계산할 수 있습니다.

먼저 몇 가지 기본 사항.

균질 좌표는 유클리드 좌표의 벡터 표현입니다 (X,Y,Z) 스케일 팩터를 추가 한 ω 균질 좌표가 X=ω[XYZ1]T. 자신의 계산에서 유지하려고ω=1 가능한 한 자주 (동일한 좌표를 마지막 요소로 나누어서 "정규화"한다는 것을 의미합니다. XXω). 또한 2D 포인트에 대해 동종 프리젠 테이션을 사용할 수 있습니다.x=ω[XY1] (그것을 기억하십시오 ω,X,YZ2D 또는 3D 포인트인지에 따라 각 포인트마다 다릅니다. 균일 한 좌표 표현으로 수학이 더 쉬워집니다.

카메라 매트릭스 3×4 3D 세계에서 이미지 센서로의 투영 매트릭스 :

x=PX

어디 x 이미지 센서의 포인트 (픽셀 단위) X 투영 된 3D 점입니다 (단위는 밀리미터라고합니다).

두 개의 3- 벡터 사이의 교차 곱은 다음과 같이 행렬-벡터 곱셈으로 정의 될 수 있습니다.

V×=(V)엑스=[0VV2V0V1V2V10]

교차 생산에 주목하는 것도 유용합니다 V×V=0.

이제 투영 행렬을 해결해 봅시다 이전 방정식에서. 왼쪽의 투영 방정식에엑스교차 곱 행렬 :

(엑스)엑스엑스=(엑스)엑스엑스=0

아하! 결과는 제로 벡터 여야합니다. 이제 방정식을 열면 다음과 같은 결과가 나타납니다.

[0wyw0xyx0][P1,1P1,2P1,3P1,4P2,1P2,2P2,3P2,4P3,1P3,2P3,3P3,4]X=[P3,4WyP2,1XwP2,2YwP2,4Ww+P3,1XyP2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1XwP3,4Wx+P1,2YwP3,1Xx+P1,3ZwP3,2YxP3,3ZxP2,4Wx+P2,1XxP1,4W와이1,1엑스와이+2,2와이엑스1,2와이와이+2,엑스1,와이]=0

약간의 리팩토링으로 프로젝션 매트릭스를 얻을 수 있습니다 매트릭스 외부 :

[0000XwYwZwWwXyYyZyWyXwYwZwWw0000XxYxZxWxXyYyZyWyXxYxZxWx0000][P1P2P3]=0

어디 Pn 의 전치 n카메라 매트릭스의 : 행 P. 이전 (큰) 행렬 방정식의 마지막 행은 처음 두 행의 선형 조합이므로 추가 정보를 얻지 않고 생략 할 수 있습니다.

우리는 힘든 일을 할 수 있도록 노력합니다. 이전의 행렬 방정식은 알려진 각 3D-> 2D 대응에 대해 형성되어야합니다 (적어도 6 개 이상이어야 함).

이제 각 점 대응에 대해 위의 행렬의 처음 두 행을 계산하고 2×12 서로의 매트릭스와 새로운 매트릭스를 얻을 A 어떤

A[P1P2P3]=0

우리는 12 개의 미지수와 (적어도) 12 개의 방정식을 가지므로 이것을 해결할 수 있습니다. 유일한 문제는 우리가 사소한 대답을하고 싶지 않다는 것입니다.

[P1P2P3]=0

다행히도 단일 값 분해 (SVD)를 사용하여

[P1P2P3]=1

방정식을 풀기 위해 행렬의 SVD를 계산하십시오. A가장 작은 고유 값에 해당하는 특이 벡터를 선택합니다. 이 벡터는 행렬 A의 널 벡터이며 카메라 행렬에 대한 솔루션입니다.P. 그냥 언 스택[P1P2P3]T 그리고 형태 P.

이제 물체까지의 거리를 알고 싶었습니다. P 다음과 같이 정의됩니다.

P=K[RRC]

어디 C오브젝트 원점을 기준으로 한 카메라 위치입니다. 에서 해결할 수 있습니다P 계산하여 Pnull 벡터

(Hartley, Zisserman-컴퓨터 비전의 다중 뷰 형상)

마지막으로 두 프레임에 대한 카메라 위치를 계산할 때 다음 두 방정식을 풀어 미지의 객체 위치 (또는 객체의 일부 점 위치)를 계산할 수 있습니다. X:

x1=P1Xx2=P2X

카메라 행렬을 해결하는 방법과 거의 같은 방식으로 진행됩니다.

(x1)xP1X=0(x2)xP2X=0

등등.


카메라의 3D 위치를 계산하는 방법이 OpenCV solvePnp와 동일하다고 말하는 것이 맞습니까? docs.opencv.org/2.4/modules/calib3d/doc/… (페이지에서 solvePnP를 ​​검색하십시오. URL을 #으로 붙여 넣을 수 없습니다)
gregoiregentil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.