programing

비디오에서 물체와의 거리를 어떻게 확인할 수 있습니까?

projobs 2021. 1. 14. 08:03
반응형

비디오에서 물체와의 거리를 어떻게 확인할 수 있습니까?


움직이는 차량 앞에서 녹화 된 동영상 파일이 있습니다. 객체 감지 및 인식을 위해 OpenCV를 사용할 예정이지만 한 가지 측면에 갇혀 있습니다. 인식 된 물체와의 거리를 어떻게 확인할 수 있습니까?

현재 속도와 실제 GPS 위치를 알 수 있지만 그게 다입니다. 추적중인 물체에 대해 어떤 가정도 할 수 없습니다. 나는 이것을 사용하여 물체와 충돌하지 않고 물체를 추적하고 추적 할 계획입니다. 이상적으로는이 데이터를 사용하여 물체의 실제 위치를 도출하고 싶습니다. 카메라에서 물체까지의 거리를 결정할 수 있다면 할 수 있습니다.


움직이는 비디오가있을 때 시간 시차 를 사용하여 물체의 상대적 거리를 결정할 있습니다 . Parallax : ( 정의 ).

그 효과는 우리가 눈으로 얻는 것과 같을 것이고 약간 다른 각도에서 같은 물체를 바라 봄으로써 깊이 지각을 얻을 수 있습니다. 움직이기 때문에 두 개의 연속적인 비디오 프레임을 사용하여 약간 다른 각도를 얻을 수 있습니다.

시차 계산을 사용하여 객체 상대적인 크기와 거리를 결정할 수 있습니다 (서로 상대적). 그러나 절대 크기와 거리 를 원한다면 알려진 참조 지점이 필요합니다.

또한 계산을 수행하려면 이동하는 속도와 방향 (비디오 프레임 속도 포함)을 알아야합니다. 당신은 수있는 시각적 데이터를 사용하여 차량의 속도를 도출 할 수 있지만, 그 복잡성의 또 다른 차원을 추가합니다.

기술은 이미 존재합니다. 위성 은 짧은 시간 동안 촬영 한 여러 이미지를 비교하여 지형적 돌출도 (높이)를 결정 합니다. 우리는 태양 주위를 도는 지구 궤도의 여러 지점에서 밤하늘을 사진으로 찍어 별의 거리를 결정하기 위해 시차를 사용합니다. 짧은 시간 내에 두 장의 사진을 찍어 비행기 창 밖으로 3D 이미지를 만들 수있었습니다.

(난 내 머리 위로 떨어져 그들을 알고 있었다하더라도) 정확한 기술과 계산은 방법이 여기에 논의의 범위를 벗어난다. 괜찮은 참조를 찾을 수 있으면 여기에 게시하겠습니다.


귀하의 문제는 현장에서 상당히 표준입니다.

첫째,

카메라를 보정해야합니다. 이것은 오프라인 (삶을 훨씬 더 간단하게 함) 또는 자가 교정을 통해 온라인 으로 수행 할 수 있습니다 .

오프라인으로 보정 하십시오.

둘째,

카메라 K 의 보정 행렬이 있으면 연속 장면에서 카메라의 투영 행렬을 결정합니다 (다른 사람이 언급 한대로 시차를 사용해야 함). 이것은이 OpenCV 튜토리얼 에서 잘 설명되어 있습니다 .

연속적인 장면 (대부분의 GPS 장치에 내재 된 노이즈로 인해 문제가 될 수 있음)에서 카메라 간의 상대적인 방향을 찾으려면 GPS 정보를 사용해야합니다. 즉 , 자습서에서 언급 한 Rt 또는 회전 및 변환 두 카메라 사이.

이 모든 것을 해결하면 연속적인 장면에서 카메라를 표현한 두 개의 투영 행렬이 생깁니다. 소위 카메라 매트릭스 중 하나를 사용 하여 장면 의 3D 점 M 을 픽셀 좌표 m 에있는 카메라의 2D 이미지에 "투영"할 수 있습니다 (자습서에서와 같이).

이를 사용하여 비디오에서 찾은 2D 포인트에서 실제 3D 포인트를 삼각 측량합니다.

셋째,

관심 지점 감지기를 사용하여 관심 대상에있는 동영상에서 동일한 지점을 추적합니다. 내가 추천, 여러 가지 감지기를 사용할 수있다 SURF를 당신은 또한 같은 여러 가지 다른 감지기가 OpenCV의이 있기 때문에 시 - 토마시 코너 , 해리스 , .

넷째,

시퀀스에서 객체의 포인트를 추적하고 해당 2D 픽셀 좌표를 얻은 후에는 투영 행렬과 2D 포인트가 주어지면 가장 적합한 3D 포인트를 위해 삼각 측량 해야합니다 .삼각 측량

위의 이미지는 불확실성과 가장 적합한 3D 포인트가 계산되는 방법을 잘 보여줍니다. 물론 귀하의 경우에는 카메라가 서로 앞에있을 것입니다!

드디어,

물체에서 3D 점을 얻은 후에는 카메라 중심 (대부분의 경우 원점)과 점 사이의 유클리드 거리를 쉽게 계산할 수 있습니다.

노트

이것은 분명히 쉬운 일이 아니지만 그렇게 어렵지는 않습니다. 저는 Hartley와 Zisserman의 훌륭한 저서 Multiple View Geometry추천합니다. 위의 모든 것을 MATLAB 코드로 명시 적으로 자세히 설명했습니다.

재미있게 즐기고 계속 질문하세요!


알려진 거리만큼 떨어진 두 개의 서로 다른 프레임에서 동일한 개체의 동일한 지점을 식별해야합니다. 각 프레임에서 카메라의 위치를 ​​알고 있기 때문에 기준선 (두 카메라 위치 사이의 벡터. 알려진 기준선과 식별 된 지점까지의 각도에서 삼각형을 구성합니다. 삼각법은 알 수없는 변의 길이를 제공합니다. 베이스 라인의 알려진 길이와베이스 라인과 미지의 변 사이의 알려진 각도에 대한 학습.

두 대의 카메라를 사용하거나 한 대의 카메라를 사용하여 연속 촬영할 수 있습니다. 따라서 차량이 1m / s로 움직이고 매초마다 명성을 얻으면 연속 프레임은 최대 5m 떨어진 물체의 거리를 측정하는 데 좋은 1m 기준선을 제공합니다. 사용 된 프레임보다 더 멀리 떨어져있는 물체의 범위를 지정해야하는 경우 더 멀리 떨어져 있어야하지만 더 먼 물체가 더 오래 시야에 표시됩니다.

F1의 관찰자는 속도 벡터에 대한 각도 a1로 T에서 목표를 봅니다. 관찰자는 거리 b를 F2로 이동합니다. 각도 a2로 T에서 대상을 봅니다.

r1을 찾는 데 필요합니다. F1의 대상에서 범위

코사인에 대한 삼각 동일성은 다음과 같습니다.

Cos (90 – a1) = x / r1 = c1

Cos (90-a2) = x / r2 = c2

Cos (a1) = (b + z) / r1 = c3

Cos (a2) = z / r2 = c4

x는 관찰자의 속도 벡터에 직교하는 대상까지의 거리입니다.

z는 F2에서 x와의 교차점까지의 거리입니다.

r1 구하기

r1 = b / (c3 – c1. c4 / c2)


시차를 감지 할 수있는 두 대의 카메라. 인간이하는 일입니다.

편집하다

자세한 내용은 ravenspoint의 답변을 참조하십시오. 또한 스플리터가있는 단일 카메라로 충분할 것입니다.


스테레오 디스 패리티 맵을 사용하십시오. 많은 구현이 떠돌고 있으며 여기에 몇 가지 링크가 있습니다. http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/OWENS/LECT11/node4.html

http://www.ece.ucsb.edu/~manj/ece181bS04/L14(morestereo).pdf

스테레오 카메라가없는 경우 http://www.springerlink.com/content/g0n11713444148l2/ 비디오를 사용하여 깊이를 평가할 수 있습니다 .

위의 내용이 가장 도움이 될 것이라고 생각합니다.

research has progressed so far that depth can be evaluated ( though not to a satisfactory extend) from a single monocular image http://www.cs.cornell.edu/~asaxena/learningdepth/


Someone please correct me if I'm wrong, but it seems to me that if you're going to simply use a single camera and simply relying on a software solution, any processing you might do would be prone to false positives. I highly doubt that there is any processing that could tell the difference between objects that really are at the perceived distance and those which only appear to be at that distance (like the "forced perspective") in movies.

Any chance you could add an ultrasonic sensor?


Put and object of known size in the cameras field of view. That way you can have a more objective metric to measure angular distances. Without a second viewpoint/camera you'll be limited to estimating size/distance but at least it won't be a complete guess.


first you should calibrate your camera so you can get the relation between the objects positions in the camera plan and their positions in teh real world plan, if you are using one camera so may you will use the "optical flow technique" if you are using two cameras you just use a simple triangulatio to find the real position (it will be easy to find the distance of the objects) but the probem with this second methose is the matching which means how can you find the position of an object 'x' in camera2 if you already knoz it`s position in camera1 and here you can use the 'SIFT' algorithme. i just gave you some keywords wish it could help you.

ReferenceURL : https://stackoverflow.com/questions/2135116/how-can-i-determine-distance-from-an-object-in-a-video

반응형