Нахождение расстояния от камеры до объекта известного размера

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


person David Harbage    schedule 15.07.2011    source источник
comment
Вы пробовали калибровать систему? Я имею в виду, что вы можете измерить размер пикселя, когда сфера находится на расстоянии 50 см, 1 м, 2 м от веб-камеры, а затем сравнить измерение в реальном времени с данными калибровки?   -  person Matthieu Napoli    schedule 16.07.2011
comment
Это хорошая идея, но если я планирую создать кросс-платформенное приложение, которое будет работать на самых разных веб-камерах, потребуется ли для каждой отдельной камеры собственная калибровка? Или разные камеры одинакового качества (например, vga) будут видеть мяч с одинаковым количеством пикселей на каждом расстоянии?   -  person David Harbage    schedule 16.07.2011
comment
К сожалению, вам потребуется калибровка для каждой камеры, потому что очень немногие из них имеют одинаковый угол обзора. Некоторые из них имеют более широкий угол (увеличение), чем другие, см., например, здесь: tomshardware.com/reviews/. Я так понимаю это не лучшее решение.   -  person Matthieu Napoli    schedule 16.07.2011


Ответы (2)


Вы можете использовать сходство треугольников для калибровки угла камеры и определения расстояния.
Вы знаете размер своего мяча: D единиц (например, см). Поместите его на известное расстояние Z, скажем, 1 метр = 100 см, перед камерой и измерьте его видимую ширину в пикселях. Назовите эту ширину d.
Фокусное расстояние камеры f (которое немного отличается от камеры к камере) тогда равно f=d*Z/D.

Когда вы снова видите этот шар этой камерой, и его видимая ширина составляет d' пикселей, то по подобию треугольника вы знаете, что f/d'=Z'/D и, следовательно: Z'=D*f/d', где Z' — текущее расстояние мяча от камеры.

person Adi Shavit    schedule 25.07.2011
comment
Разве проблема не в том, чтобы получить фокусное расстояние камеры? Калибровка камеры вашего смартфона дает вам фокусное расстояние не в метрах, а в пикселях по осям x-y. Они были умножены на коэффициент масштабирования. - person Cameron Lowell Palmer; 12.12.2014
comment
В первом абзаце объясняется, как получить фокусное расстояние в пикселях. Подобие треугольника по существу находит коэффициент масштабирования преобразования из пикселей в метры. - person Adi Shavit; 12.12.2014
comment
Я вижу, что ты говоришь. Тем не менее, разве простое ведение базы данных размеров и калибровок фотосенсоров не представляет собой столько же хлопот? - person Cameron Lowell Palmer; 12.12.2014
comment
Два варианта дополняют друг друга. После калибровки вы можете сохранить БД. - person Adi Shavit; 12.12.2014
comment
Я считаю ваше решение работоспособным, поэтому я поставил ему +1. - person Cameron Lowell Palmer; 12.12.2014
comment
Я единственный, кто не умеет читать Ты знаешь размер своих яиц с невозмутимым лицом? - person A_P; 18.12.2020

На мой взгляд, вам понадобится модель камеры = калибровочная модель, если вы хотите измерить расстояние или другие вещи (в реальном мире). Модель камеры-обскуры проста, линейна и дает хорошие результаты (но не исправляет искажения (будь то радиальные или тангенциальные).

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

Поэтому я думаю, что ответ таков: вам нужно будет как-то откалибровать его, возможно, вы могли бы попросить пользователя приблизить сферу к камере, пока вся плоскость изображения не будет полностью заполнена шаром, и с заранее известными измерениями шара , тогда вы сможете вычислить расстояние....

Жюльен,

person jmartel    schedule 16.07.2011