2016-09-15 7 views
0

Я знаю, что уже есть ответы на эту тему, но мне не очень понятно, как измерить расстояние между камерой и объектом.Расстояние между камерой и объектом?

Моя цель:

мне удалось отслеживать красный шар с обнаружения цвета, используя OpenCV. Теперь я пытаюсь указать лазер в середине красного шара. Лазер должен всегда следовать за красным шаром, когда он движется. Я использую небольшой сервомотор для поворота лазера.

Image

Я имею в виду, если я могу измерить расстояние между объектом и камерой, я буду в состоянии вычислить угол сервопривод нужно повернуть ...

Я пытался следовать Cameron Lowell Palmer's post.

Что я сделал:

Я откалиброван мой Pi камера V2

f_x: 463,64
f_y: 463,64
c_x: 319,50
C_y: 239,5

Собственное разрешение = 3280 x 2464 (я думаю? Я не уверен, как это найти ...)
Фокусное расстояние = 3,00 мм (я думаю? Я не уверен, как это найти ...)

Тогда я должен был бы измерить размер моего объекта в пикселях? Я не знаю, как ...

Может ли кто-нибудь помочь мне в этом?

+0

Публикация образцов изображений ... вы можете обнаружить красный цвет довольно хорошо с цветовым пространством HSV. Возможно, это поможет вам обнаружить красный шар. – Micka

+0

Обнаружение красного шара не является проблемой, оно измеряет расстояние между красным шаром и камерой ... –

+0

попробуйте решить проблему PnP, чтобы получить размещение объекта или использовать известный размер реального шара и измеренный размер в пикселях. – Micka

ответ

0

Мне удалось получить дистанцию, но это не совсем точно.

Что я сделал:

  • Я откалиброван камерой, как описан в официальном учебнике
  • Я искажаюсь мое изображение, используя cameraMatrix и distortionCoeff. с функцией undistort()
  • Я породил свое изображение, чтобы отфильтровать красный шар, как описано here.
  • Я подсчитал расстояние между камерой и красным шаром, используя формулу:

Расстояния = FocalLength в мм * (ширина Реального объекта в мм)/(ширина виртуального объекта в рх)

  • Чтобы получить ширину виртуального объекта, я нарисовал контур вокруг моего порогового изображения (я использовал minEnclosingCircle). Затем я вычислил ширину этого контура.
  • я восстановил мою focalLength из функции 'calibrationMatrixValues'

Результат изображения: Result

Расстояние таблица (пробег фрагмент кода):

<table border="1" style="text-align: center"> 
 
    <thead> 
 
     <tr> 
 
     <th>Real Distance (mm)</th> 
 
     <th>Calculated Distance (mm)</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody> 
 
     <tr> 
 
      <td>100</td> 
 
      <td>83</td> 
 
     </tr> 
 
     <tr> 
 
      <td>200</td> 
 
      <td>174</td> 
 
     </tr> 
 
     <tr> 
 
      <td>300</td> 
 
      <td>275</td> 
 
     </tr> 
 
     <tr> 
 
      <td>400</td> 
 
      <td>384</td> 
 
     </tr> 
 
     
 
    <tbody> 
 
    </table>

На данный момент я просто добавляю 20 мм к результату. Если кто-то может помочь мне получить более точное измерение, я буду очень благодарен :-).

0

Не могли бы вы вывести приблизительное расстояние, связав размер пикселя с размером объекта (красного шара)? Возвращаясь к элементарной алгебре, вы выводите высоту чего-то далекого, заданного известным расстоянием между ним и объектом. В этом случае вы знаете размер объекта, размер пикселя и фокусное расстояние.

+0

Да, я пытаюсь найти номера для этой формулы Расстояние (мм) = [фокусное расстояние (мм) * высота объекта (мм) * высота изображения (px)]/[(высота объекта (px) * высота датчика (ПВ)] 1) Я не уверен, что фокусное расстояние и датчик высота 2) следует рассматривать значения неточности моей калибровки Вот где я застрял ... –

+0

может быть, это может помочь вам: HTTP : //ksimek.github.io/2013/08/13/intrinsic/ В нем обсуждаются внутренние параметры модели камеры. У вас уже есть фокусное расстояние, а не вы: f_x и f_y. – jamalin

Смежные вопросы