2012-08-22 1 views
2

도로 앞에서 두 개의 점 사이의 실제 거리를 측정하고 싶습니다. 나와 차량 사이의 거리는 얼마입니까? OpenCV의 두 점 사이의 거리

나는 다음과 같이 진행 :

1) 찾은 관점은 평면도를 얻을 변환.

2) 그런 다음 거리를 찾으려고 시도했습니다.

문제는 적절한 평면도를 얻을 수 없다는 것입니다.

다른 방법이 있으면 알려주십시오.

답변

5

두 3D 점 사이의 거리를 측정하려면 두 점의 3D 좌표를 찾아야합니다. (당신이 어디에 카메라, 기준 좌표, 알고 있기 때문에)

d(p1,p2)= sqrt{(p1_x - p2_x)^2+(p1_y - p2_y)^2+(p1_z - p2_z)^2} 

여기서 문제는 현장에서 개체의 3D 점을 찾을 수 있습니다 : 그런 다음 유클리드 거리를 계산하기 쉽습니다.

3D 위치를 찾으려면 호모 그래피 또는 카메라 포즈를 찾아야합니다. 이 목적을 위해 당신은 선험적으로 알고있는 알려진 모델이나 이미지의 4 포인트와 일치하는 장면에서 적어도 4 포인트를 탐지해야합니다. 예를 들어, 자동차의 3D 모델이 있고 3D 모델에 해당하는 장면에서 실제 자동차의 점을 감지 할 수있는 경우 동 변 환형 변환을 계산할 수 있으며 따라서 3D 위치를 계산할 수 있습니다. 그 점들.

어쨌든 문제는 복잡합니다. 탐지, 일치, 교정에 많은 알고리즘을 사용해야하며 탐지 할 개체를 알아야합니다.

+0

하지만 2D 이미지에서 3D 점을 어떻게 얻을 수 있습니까 ?? – Aizen

+5

호모 그래피 변형 : http://stackoverflow.com/a/10750648/744859 –

2

문제는 생각보다 어렵습니다. 일부 가정 하에서도 :

  1. 전체 도로는 평평합니다 (높이가 변경되지 않음).
  2. 차량의 픽셀 위치는 휠이지면에 닿는 지점에서 측정됩니다 (차량 루프가 아님). 지붕을 측정하면 거리가 무한대가 될 수 있습니다.
  3. 카메라가 일정한 줌 상태로 고정되어 있습니다.

이러한 가정 중 하나가 충족되지 않으면 거리를 측정하기가 매우 어려울 수 있습니다. (정의에 의해 perspectivity이 거리를 왜곡하기 때문에) 평면도에

  1. 관점 변환은 도움이되지 않습니다 : 그들이 보유 할 경우 는하지만 당신은 다음을 수행해야합니다. 탑 뷰에서도 광선이 원근감있게 이동합니다. 당신이 필요로하는 것은 '정사영'투사입니다. 카메라가 무한 높이 + 무한히 큰 줌에있을 때 윗면 뷰를 시뮬레이트합니다. 위성 이미지 나지도에서 보는 것과 같습니다.
  2. 왜 이상한 변환이 필요한지 묻습니다. 정사영과 원근법 변환의 차이점은 원근감에있어서 물체 간의 거리는 tan (a)과 sin (a)의 정사영에 달려 있다는 것입니다. a - 거리의 선 (2 점 사이의 선)이 차지하는 카메라 시야각. 'a'가 tan ('a') = sin ('a')보다 작은 각도 일 때 보호 변형을 사용할 수 있습니다. 그러나 귀하의 웹 캠은 ~ 50 - 70 도의 넓은 각도를 가지고 있기 때문에 이미지의 중심에서만 보호 변환을 사용하여 정확하게 거리를 계산할 수 있습니다.
  3. 거리를 계산하기 전에 카메라 렌즈 왜곡을 제거해야합니다.
  4. 첫 번째 단계는 카메라를 보정하고 cvUnDistort()를 사용하여 카메라의 뷰를 수정하는 것입니다.
  5. 내가 아는 한 openCV에서 정사각형 변형 기능이 내장되어 있지 않습니다. 따라서 보정 된 이미지에 탑 뷰 사영 변환을 사용할 수 있지만 두 차량이 이미지 가운데 근처에있을 때만 거리가 정확합니다.
  6. unDisrtort()를 사용하여 직교 변형을 구현할 수 있지만 카메라 모델 및 카메라 보정 수학에 익숙하지 않으므로 다소 시간이 걸릴 수 있습니다. unDistort()에서는 기본적으로 죄 ('A'를) 일치 테일러 전개 시리즈의 계수를 삽입해야한다, 즉, -a^2/2 ... 등 ...
  7. 어쨌든

, I 앞서 언급했듯이 측정 거리는 매우 어려운 문제입니다. 나는 다음과 같은 간단하지만 덜 정확한 솔루션을 제안한다

  1. 올바른 렌즈 왜곡
  2. 당신은 거리 측정 오류가 발생 볼 경우 차량이 추가 이미지 센터 시도에서 멀리 때 상위 뷰 투영 변환
  3. 적용 수동 보정. 여기에 필요한 것을 거의 제공하는 오픈 소스를 찾을 수 있습니다 : http://code.google.com/p/signfinder/wiki/HowSignfinderWorks 이 소프트웨어는 거리 이름 표지를 감지하고 텍스트를 읽을 수 있도록 투사 교정을 적용합니다. 도움이 되었으면한다