Можно ли рассчитать расстояние объекта до камеры с двумя снимками, которые сделаны на расстоянии нескольких см друг от друга?
Это зависит. Вам нужно знать что-то больше, чем просто две фотографии. Примеры полезной информации включают информацию о камере и объективе, такую как размер датчика и фокусное расстояние, а также, как именно положение камеры изменилось между двумя фотографиями. Как далеко переместилась камера? Сохранял ли он точно ту же ориентацию, или камера была немного повернута, чтобы рассматриваемый объект находился в одинаковом положении на обеих фотографиях? Это также поможет узнать о других объектах на фотографиях, таких как размер и расстояние от камеры.
Мы можем оценить расстояние нашими глазами. Но возможно ли сделать это математически, ничего не зная о высоте объекта?
В человеческом зрении происходит гораздо больше, чем просто сравнение ментального эквивалента двух фотографий. То, что делает ваш мозг, больше похоже на сравнение двух живых видеопотоков, дополненных огромной базой знаний об объектах сцены и прошлом опыте. И даже со всей этой дополнительной информацией (или частично из-за нее) нас легко одурачить, когда реальность не соответствует нашим предположениям. Например, комната Эймса использует принудительную перспективу для
заставьте свой мозг думать, что человек, идущий вокруг, растет и сжимается, а не двигается ближе или дальше.
Фотография - это двумерная проекция трехмерной сцены, и при создании этого изображения теряется много информации, включая размер и расстояние. Другими словами, для любого данного изображения существует множество сцен, которые могут создать это изображение. * Рассмотрим фотографию мини-фигуры Lego:
![Boba Fett](https://i.stack.imgur.com/uXXZt.jpg)
Если вы когда-либо видели мини-фигуру Lego, вы знаете, что она, вероятно, около 4 см в высоту. Но так ли это на самом деле? Может быть, это больше 4 фута. Наличие второй фотографии в несколько ином ракурсе не даст вам никакой дополнительной информации об истинной высоте этой мини (или макси) фигуры, если вы не знаете, как далеко переместилась камера и т. Д. Другими словами, вам нужно некоторый фрагмент данных , позволяющий установить шкалу .
Хорошо, давайте предположим, что я знаю, как далеко перемещается камера и нет вращения. Также рядом с камерой есть линейка на заданном расстоянии.
Подумайте о том, как все меняется, когда вы смотрите через боковое окно автомобиля, движущегося со скоростью шоссе: объекты на обочине дороги проносятся мимо, в то время как далекие объекты, кажется, двигаются (относительно вас) гораздо медленнее, и объекты очень далеко (например, звезды) вообще не двигаются. Вы можете использовать тот же принцип. В настоящее время у меня нет времени, чтобы разработать формулу для вас, но я не думаю, что это будет трудно решить с помощью диаграммы и небольшой геометрии. И имейте в виду, что все становится намного сложнее, если вам приходится учитывать искажения, вносимые объективом; Например, объектив «рыбий глаз» увеличивает центр и сжимает края.
Если вы пишете код для этого, библиотека OpenCV имеет функции, которые помогут, и она может даже справиться с искажениями объектива, упомянутыми выше. Взгляните на вопрос переполнения стека: Расстояние до объекта с помощью стереокамеры
* Скульптор Сьюард Джонсон пользуется этим преимуществом. Если смотреть с правильного места, его скульптуры в натуральную величину "За рамкой" выглядят как знаменитые картины, но вы можете обойти их и посмотреть на них под другими углами, и они часто содержат забавные детали, не видимые в оригинальных картинах.