Как рассчитать расстояние до объекта на фотографии?

Если бы я сделал снимок ветряной мельницы на горизонте — учитывая размер сенсора, фокусное расстояние объектива и другие факторы, связанные со снимком, — мог бы я рассчитать, насколько далеко объект находится от фотографа?

Да, вы, вероятно, можете с небольшим количеством сложной математики, но это выше меня. Если он находится на горизонте, вы можете обойти все это и просто умножить высоту ваших глаз (в футах, включая высоту любой земли или здания, на котором вы находитесь) на 1,5, а затем найти квадратный корень из этого, что дает вам ( приблизительное) расстояние до горизонта в милях
Мой Canon 100mm f/2.8 IS USM (и, предположительно, некоторые другие объективы) записывают расстояние до объекта в данных EXIF, возможно, стоит выяснить, делает ли это ваше оборудование, прежде чем вдаваться в какие-либо сложные математические вычисления!
@ChrisFletcher - вау - я никогда не искал это в EXIF, это было бы круто
@Chris Дистанция фокусировки, вероятно, просто скажет «бесконечность», что не так уж и полезно!
@ Matt Grum Я не буду притворяться, что знаю, как это работает, я полагаю, что на достаточно больших расстояниях ему может быть трудно понять это. Но, по крайней мере, с этим объективом у меня есть множество снимков, в которых в данных EXIF ​​указаны расстояния с точностью до сантиметра: flickr.com/photos/cfletcher86/5744389335/meta/in/photostream .
@ Крис, камера «знает» расстояние от системы автофокусировки, и, как вы предполагаете, она становится очень неточной на больших расстояниях (но все же достаточно точной, чтобы изображение было в фокусе!). Кроме того, то, что EXIF ​​указывает расстояние до сантиметра, не означает, что цифра точна до сантиметра!
@ElendilTheTall рассчитать расстояние до горизонта на самом деле сложнее, чем рассчитать расстояние до объекта!
Мэтт: Насколько мне известно, информация отправляется обратно от объектива (который приблизительно знает расстояние фокусировки) для E-TTL2. Однако он работает только с объективами Canon с USM. Крис: Число в сантиметрах ничего не говорит о его точности.
Если вас интересует только результат, а не сама математика, некоторые камеры записывают расстояние до объекта в информации EXIF.

Ответы (5)

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

Математика на самом деле не такая уж сложная, соотношение размера объекта на сенсоре и размера объекта в реальной жизни такое же, как соотношение между фокусным расстоянием и расстоянием до объекта.

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

Итак, вся сумма:

Уравнение расстояния до объекта

Давайте проверим это уравнение на здравомыслие.

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

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

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

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

Наконец, если мы оставим все остальное неизменным и увеличим размер сенсора, то расстояние уменьшится: два объекта одинакового размера имеют одинаковую высоту в пикселях при съемке на компактную камеру (маленький сенсор, где 20 мм — длинный объектив) и на цифровую зеркальную камеру (большой сенсор). где 20 мм — широкоугольный объектив), то объект на изображении DSLR должен быть дальше (потому что он оказался такого же размера, но с широкоугольным объективом).

Итак, другими словами, «нет, не зная размера объекта в реальной жизни». В противном случае у вас есть два неизвестных фактора. Ветряная мельница может быть моделью, которая ближе, чем вы думаете.
@mattdm как раз собирался пояснить это в ответе. Вы также можете фотографировать фотографию ветряной мельницы и т. д.
@matt-grum Я хочу сказать, что нам нужно одно из следующего: 1) либо реальный размер объекта; 2) или два или более изображений.
@jetxee да, теперь я понимаю, из вашего комментария это неясно, так как я указал размер объекта как один из известных в своем ответе.
Напоминает мне классическую фразу отца Теда о том , что некоторые коровы маленькие, а другие далеко.
К вашему сведению: эта формула будет работать для ветряных мельниц и других относительно крупных объектов, но будет неточной для макросъемки. Более точной формулой будет (ObjectHeight + ProjectionHeight) * FocalLength / ProjectionHeight, где ProjectionHeight — это PixelObjectHeight * SensorHeight / PixelImageHeight. Это предполагает, что объект находится в фокусе, в противном случае он становится более сложным. Когда ObjectHeight намного больше, чем ProjectionHeight (другими словами, когда увеличение небольшое), вы можете игнорировать «+ Высота проекции» в скобках, и формула упрощается до той, что в ответе.

Как заметил @matt-grum, самой простой формулой для оценки расстояния до объекта является формула проекции обскуры :

х/ф = х/д

где x — размер объекта на сенсоре, f — фокусное расстояние объектива, X — размер объекта, d — расстояние от узловой точки до объекта. x и f , а X и d измеряются в одних и тех же единицах, например мм и м соответственно (для расчета x вам необходимо оценить размер пикселя для вашего сенсора; например, для Pentax K20D это 23,4 мм/4672 пикселя ≈ 5,008e-3 мм/пиксель, т.е. изображение длиной 100 пикселей соответствует x = 50,08e-3 мм).

Далее я предполагаю, что размер объекта ( X ) неизвестен, а единственными известными параметрами являются x (размер изображения) и f (фокусное расстояние).

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

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

Более простой подход — сделать две фотографии, которые остаются на одной линии с объектом, с объектом в центре изображения. Пусть расстояние до объекта на первой фотографии равно d₁ , а размер изображения — x₁ :

х_1/f = Х/d_1

Затем, если мы переместим камеру на метры прямо к объекту, то на второй фотографии мы получим размер изображения x₂ немного больше, чем x₁ :

( примечание : знаменатель в следующем выражении неверный, вместо "d1" должно быть "d2" или эквивалентно "d1-s")

x_2/f = X/(d_1 - s)

Что дает нам

d_1 = с x_2 / (x_2 - x_1)

Очевидно, что если s недостаточно велико, чтобы существенно повлиять на размер изображения, вы не можете надежно оценить расстояние и должны использовать более сложные методы. Чем больше разница x₂ - x₁ , тем лучше.

ааа, теперь я понимаю, что вы имели в виду под своим комментарием, я предполагал, что размер объекта известен, иначе все становится намного сложнее, так как вам нужны не только две камеры, но и камеры должны быть откалиброваны
@sastanin Я пробую вашу формулу, но не могу заставить ее работать. Я сделал здесь страницу photo.stackexchange.com/questions/80195/…

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

http://www.scantips.com/lights/subjectdistance.html

Вам все равно нужно будет знать свои значения, чтобы заставить его работать, одно из которых - приблизительная реальная высота объекта. Там обсуждалось.

Вместо того, чтобы пытаться использовать формулы, если вы исследуете морские методы оценки расстояний, которые включают некоторые основные «эмпирические правила», например, если вы стоите на высоте 1 фута над водой, вы находитесь в 3 морских милях от горизонта, если вы поднимете большой палец на длина руки до них объект, на который вы смотрите, покрыт, он имеет высоту 100 футов (я думаю), я забыл большинство из них, так как больше не использую их, но они работают, и после того, как их изучили и использовали регулярно, они удивительно точны.

Это не совсем морское правило. Горизонт находится на расстоянии 3 миль на высоте 6 футов над уровнем моря, а не 1 фут. Эмпирическое правило гласит: «Умножьте свой рост в футах на 1,5. Квадратный корень из этого числа — это расстояние до горизонта в милях». (т. е. (6 футов * 1,5) ^ 0,5 = 3 мили).

Простой ответ - нет. У вас есть две переменные и только одно уравнение.

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