프로그래밍 방식으로 카메라가 지시 할 위치를 어떻게 알 수 있습니까?


8

나는 지금 특정 카메라를 염두에두고 있지 않습니다. 프로그래밍 방식 / 수학적으로 어떻게 수행되는지 궁금합니다.

나는 3D 공간, 직사각형을 가지고 있으며, 한쪽 구석에 카메라가 위로 향하게되어 있습니다.
해당 사각형에 현재 위치의 (x, y, z) 좌표를 전송하는 움직이는 객체가 있습니다.
그 좌표를 가져 와서 카메라가 해당 위치를 가리 키도록 지시하는 지침으로 변환하고 싶습니다.
이 번역은 일반적으로 어떻게 이루어 집니까?


게임 개발자가 게임 내 카메라를 처리하는 방법을 살펴볼 수 있습니다. 그것은 같은 원칙이며 태양 아래서 모든 것을 다루어야했습니다.
Harabeck

객체가 3D 공간에서 좌표를 전송할 필요는 없지만 카메라의 FOV를 통해 전송할 수 있다는 점에 주목할 가치가 있습니다. 그런 다음 패턴 인식을 사용하여 프레임에서 오브젝트가있는 위치를 찾은 다음 카메라를 오브젝트 중심으로 이동하거나 여러 프레임에서 위치 변화를 추적하고 해당 방향으로 이동하여 2D에서 모션 벡터를 식별합니다. . 예를 들어, 현관의 PTZ 카메라는 패닝 동작이 아닌 움직임을 찾기 위해 현관을 스캔 한 다음 동작이 중지 될 때까지 움직이는 항목을 잠그고 따라갑니다.
dannysauer

내 유스 케이스는 스포츠 분석 시스템이며, 각 플레이어는 현재 위치, 속도 등을 경기장에서 전송하는 태그를 착용하고 있습니다. 그래서 우리는 이미 위치 정보를 가지고 있습니다. 그래도 패턴 인식을 살펴볼 것입니다. 유용하게 들립니다.
bot_bot

답변:


10

삼각법!

내 카메라는 DLink 5020-L이며 API를 통해 제공 될 수있는 이동 / 기울기 명령이 있습니다 . 또한 사전 정의 된 위치를 설정하고 API를 통해 트리거 할 수도 있습니다.

사전 초기화

  • 참조에서 카메라의 위치를 ​​0 ° 팬 및 0 ° 틸트로 정의 =>이 위치를 호출합니다 Position 1

초기화

  • 카메라를 Position 1
  • 0으로 초기화 된 변수 또는 API를 통해 카메라의 팬 / 틸트 어딘가에 저장

물체를 봐

  • X, Y 및 Y, Z 평면의 두 평면에서 물체를 찾습니다.
  • 그런 다음 팬 (왼쪽 / 오른쪽) 각도를 얻을 수 있습니다 (IoT SE의 omg 수학 공식!)

$$ \ arctan \ bigg (\ frac {y} {x} \ bigg) $$

  • 그런 다음 기울기 (위 / 아래) 각도를 얻을 수 있습니다

$$ \ arctan \ bigg (\ frac {z} {y} \ bigg) $$

  • 상대 이동으로 작업 할 수 있으므로 새 팬 / 틸트 값을 저장 / 업데이트하는 것을 잊지 마십시오.

카메라 배치 방법에 따라 이전 결과를 무시할 수 있습니다

(시간이 있으면 회로도를 추가하겠습니다)


2
@hardillb에 의해 구타;) 그리고 그는 더 나은 공식을 가지고 있습니다 ...
Goufalite

2
불행히도 LaTeX 지원은이 사이트에서 제공되지 않습니다. 원하는 경우 CodeCogs 와 같은 곳 에서 대신 이미지로 내보낼 수 있습니다 . (내가이 작업을 수행
했으므로

도와 주셔서 감사합니다. 이것이 바로 내가 찾던 것입니다.
bot_bot

기울기 각도의 아크 탄이 빗변에 대한 z 구성 요소와 관련되어야한다는 사실을 고려하지 않았다고 생각합니다 .y 구성 요소 위에 올려 놓으면 카메라가 제대로 작동하지 않기 때문에 카메라가 불충분하게 증가 / 감소 할 수 있습니다 y 축을 따라가 아니라 y 구성 요소와 x 구성 요소 사이의 직각 삼각형을 빗변으로 표시합니다. 틀 렸으면 말해줘. :) 좋은 대답입니다.
anonymous2

내 생각이기도 한 @ anonymous2. 나는 아직 제시 된 답변 중 어느 것도 맞지 않다고 생각하지만 실제로 그것을 실제로 보여줄 대역폭이 없습니다. 변수 (팬 또는 틸트)를 얻으려면 두 개의 삼각형과 세 개의 좌표가 모두 필요한 것 같습니다. x, y, z 1,1,999는 두 가지 극단적 인 예를 시각화하여 스스로 증명할 수 있습니다. 1,1,999의 x, y, z는 1,1,1보다 훨씬 다른 팬과 기울기를 줄 것입니다. Goufalite의 답변은 두 가지 모두에 동일한 팬을 제공합니다.
dwizum

6

이미 훌륭한 답변입니다. 고려해야 할 몇 가지 다른 사항을 추가하고 싶습니다. hardlib와 Goufalite가 이미 언급했듯이이를 수행하는 방법은 삼각법입니다. 카메라와 IoT 객체를 2 차원으로 묘사했습니다.

여기에 이미지 설명을 입력하십시오

보시다시피, 카메라의 시야는 물체가 멀어 질 때 근거리에 있지 않으면 물체보다 더 커집니다.

이제 카메라가 항상 물체의 중앙에 오도록 할 수 있습니다 . 이 경우 hardlib가 참조한 계산을 간단히 수행 할 수 있습니다.

ϴ = arctan(y/x)

... 이것은 컨벤션에 따라 x 축에서 시계 반대 방향 각도입니다. 또한 레벨에서 떨어진 각도가 필요합니다.

α = arctan(z / ((y^2+x^2)^1/2))

분명히 세 축 모두에서 원점에있는 카메라 위치를 기준으로 계산해야합니다.

다른 한편으로, 카메라가 필요 이상으로 움직이지 않도록하는 것, 즉 물체가 프레임 밖으로 이동하려고 할 때만 카메라를 움직이게하는 것을 선호 할 수 있습니다. 이 경우 객체가 프레임 가장자리에 얼마나 가까이 있는지에 따라 카메라가 각도를 변경할 가능성이 높은 "압력"변수가 필요할 것입니다.

해당 경로로 이동하면 두 시야 모두에서 카메라 시야각을 알아야 물체가 카메라 시야각과 비교되는 위치를 결정할 수 있습니다.


대단해! 고맙게도 현재 카메라의 시야 중심에 객체를 유지하고 싶습니다.
bot_bot

2
카메라를 이동 / 기울기 할 때마다 각 주문간에 약간의 대기 시간 (~ 0.5 초)이 있습니다. 카메라를 이동할 때주의하십시오
Goufalite

좋은 지적-확실히 고려해야 할 사항입니다.
anonymous2

5

이것은 보통 기본 삼각법 으로 수행 됩니다 .

카메라가 원점 (0,0)에 있고 객체가 (x, y)에있는 단일 2D 평면에서 작업하여 시작하십시오.

x 거리는 삼각형의 인접면이되고 y 거리는 반대 방향이됩니다.

tan (각도) = y / x

팬 각도는

각도 = invTan (y / x)

다음을 사용하여 카메라와 물체 사이의 직선 거리 (가설)를 계산할 수도 있습니다.

h ^ 2 = x ^ 2 + y ^ 2

기부:

h = sqrt (x ^ 2 + y ^ 2)

이제 h 거리와 z 높이를 사용하여 같은 방식으로 기울기 각도를 계산할 수 있습니다.

각도가 확보되면 카메라의 팬 / 틸트를 제어하는 ​​대상에이를 공급할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.