시각적 추적 및 평면 마커에 대한 단계별 카메라 포즈 추정


21

증강 현실 및 시각적 추적 응용 프로그램에 대한 카메라 포즈 추정 주제를 한동안 연구 해 왔으며 작업에 대한 자세한 정보가 많이 있지만 여전히 많은 혼란과 오해가 있다고 생각합니다.

다음 질문에는 단계별 답변이 필요하다고 생각합니다.

  • 카메라 내장 기능이란 무엇입니까?
  • 카메라 외형이란 무엇입니까?
  • 평면 마커에서 호모 그래피를 어떻게 계산합니까?
  • 호모 그래피가있는 경우 카메라 자세를 어떻게 얻을 수 있습니까?

나는 당신이하는 정규화에 대해 애매 모호하다. 1. H는 몇 가지 절차 (SVD)를 사용하여 데이터에서 발견 된 호모 그래피이다. 2. inv (K) * H = A는 여기서 작업하는 것입니다. 그런 다음 q1 = a1 / norm (a1) 및 q2 = a2 / norm (a2)를 회전 행렬의 직교 열로 만들고 q3 = q1xq2 ...를 만든 다음 t / (something)을 취하여 변환 벡터를 얻습니다. q1과 q2를 다른 것들로 나누는 방법은 무엇이며 어떻게 t를 나눌지를 어떻게 선택합니까? 아니면 생각입니다 INV (K)주고 무언가에 의해 SVD 절차 및 곱셈 가까이 는 아니지만 꽤 직교 / 직교 회전 행렬, 일 때문에
user2600616

그러나 어떻게 3D 포인트 (X, Y, 1)를 얻을 수 있습니까?
waschbaer

답변:


19

여기서 유일한 문제는 외부 매개 변수를 얻는 것임을 이해하는 것이 중요합니다. 카메라 내장 기능은 오프라인에서 측정 할 수 있으며 그 목적을위한 많은 응용 프로그램이 있습니다.

카메라 내장 기능이란 무엇입니까?

카메라 내장 매개 변수를 일반적으로 카메라 보정 매트릭스 라고합니다 K. 우리는 쓸 수있다

K=[αusu00αvv0001]

어디에

  • α v u v 좌표 방향의 배율이며 카메라의 초점 길이 f 에비례합니다: α u = k u f α v = k v f . k u k v 는 단위 거리 당 u v 방향의 픽셀 수입니다.αuαvuvfαu=kufαv=kvfkukvuv

  • 를 기본 점, 일반적으로 이미지 중심 좌표라고합니다.c=[u0,v0]T

  • 는 왜곡이며, u v 가 수직이 아닌경우에만 0이 아닙니다.suv

내장 함수를 알면 카메라가 보정됩니다. 이것은 쉽게 할 수 있으므로 컴퓨터 비전의 목표는 아니지만 오프라인의 간단한 단계입니다.

카메라 외형이란 무엇입니까?

카메라 외부 또는 외부 매개 변수 는 월드 좌표계에서 카메라 좌표계로의 유클리드 변환에 해당 하는 3 × 4 행렬입니다. R3 × 3 회전 행렬을 나타내고, 변환은 t 이다.[R|t]3×4R3×3t

컴퓨터 비전 어플리케이션은이 매트릭스 추정에 중점을 둡니다.

[R|t]=[R11R12R13TxR21R22R23TyR31R32R33Tz]

평면 마커에서 호모 그래피를 어떻게 계산합니까?

호모 그래피는 3D 평면 및 이미지 투영과 관련된 동종 매트릭스입니다. 우리가있는 경우 평면 Z = 0 호모 그래피 H 점 매핑 M = ( X , Y , 0 ) T가 이 평면과 해당 2D 포인트에 m 돌기 아래 P = K [ R | t ]3×3Z=0HM=(X,Y,0)TmP=K[R|t]

m~=K[R1R2R3t][XY01]

=K[R1R2t][XY1]

H=K[R1R2t]

호모 그래피를 계산하려면 세계 카메라 포인트 쌍이 필요합니다. 평면 마커가있는 경우 이미지를 처리하여 피쳐를 추출한 다음 장면에서 해당 피쳐를 감지하여 일치하는 항목을 얻을 수 있습니다.

Direct Linear Transform을 사용하여 호모 그래피를 계산하려면 4 쌍만 있으면됩니다.

호모 그래피가있는 경우 카메라 자세를 어떻게 얻을 수 있습니까?

호모 그래피 와 카메라 포즈 K [ R | t ] 는 동일한 정보를 포함하며 서로 쉽게 전달됩니다. 둘 다의 마지막 열은 번역 벡터입니다. 호모 그래피의 열 1 H 1 및 2 H 2 또한 카메라 포즈 매트릭스의 열 1 R 1 및 2 R 2 입니다. 그것은 단지 열 세에게 남아 R 3[ R을 | t ] 이며 직교해야하므로 열 1과 2의 교차 곱으로 계산할 수 있습니다.HK[R|t]H1H2R1R2R3[R|t]

R3=R1R2

중복으로 인해 정규화해야합니다. 를 예를 들어 행렬의 요소 [3,4]로 나눕니다.[R|t]


4
교정이 "쉽고 CV의 목표가 아니라"고 말하는 것은 오해의 소지가 있다고 생각합니다. 일반적인 경우 왜곡 매개 변수도 추정해야합니다. 자체 보정 대신 별도의 보정 절차를 수행 할 수 있으면 평면 보정 (Zhang-카메라 보정을위한 유연한 새로운 기술)을 권장합니다. "호모 그래피가있는 경우 어떻게 카메라 포즈를 얻을 수 있습니까?"에 작은 오류가 있습니다. 교정을 고려하지 않기 때문에 (H_ {calib} = K ^ -1H).
buq2

3
호모 그래피의 카메라 포즈가 잘못되었습니다. 몇 가지 방법이 있습니다.
mirror2image

왜 그런지 모르겠습니다. 나는 이런 식으로 계산하고 작동합니다. 왜 그것이 틀렸다고 말합니까?
Jav_Rock

3
마지막 섹션에서 H ^ 1과 R ^ 1을 같고 같았지만 세 번째 섹션에서는 H = K [RT]라고되어 있는데 이는 R ^ 1이 실제로 K ^ -1H ^ 1임을 의미합니다. 그러나 방정식을 만족시키고 R ^ 1, R ^ 2 및 T (알 수없는 스케일)를 풀 때 문제를 일으킬 수있는 무한한 수의 H가 있기 때문에 이것은 사실이 아닙니다. 귀하의 답변은 강력한 고유 및 왜곡 보정을 무시하고 일부 방정식이 잘못되었으므로 질문에 대한 좋은 답변이 아닙니다.
buq2

예, 코드 에서이 코드를 가져 와서 코드의 다른 기능으로 K를 곱하면 3 단계에서 보정 행렬이 누락되었습니다.
Jav_Rock

3

2 차원 사례를 잘 설명하고 있지만 Jav_Rock이 제안한 답변은 3 차원 공간에서 카메라 포즈에 대한 유효한 솔루션을 제공하지 않습니다. 이 문제에 대해 여러 가지 가능한 솔루션이 존재합니다.

이 논문 은 호모 그래피를 분해하기위한 닫힌 공식을 제공하지만 공식은 다소 복잡합니다.

OpenCV 3은 이미이 분해 ( decomposeHomographyMat )를 정확하게 구현합니다 . 호모 그래피와 올바르게 스케일 된 내장 행렬이 주어지면이 함수는 4 가지 가능한 회전 및 변환 세트를 제공합니다.

이 경우 내장 행렬은 픽셀 단위로 제공되어야합니다. 즉, 주점이 보통 (imageWidth / 2, imageHeight / 2)이고 초점 거리가 보통 임을 의미합니다 focalLengthInMM / sensorWidthInMM * imageHeight.


올바르게 스케일 된 내장 행렬은 무엇입니까?
Guig

1
내 답변을 업데이트했습니다. 위를 참조하십시오.
Emiswelt

안녕하세요 @Emiswelt, 초점 거리가 focalLengthInMM / sensorWidthInMM * imageWidth아닌가요? 왜 대신 높이를 선택합니까?
El Marce
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.