Алексей Бутырин (bootsector) wrote,
Алексей Бутырин
bootsector

Category:

Как вычислить расстояние до объекта по фотографии

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

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



Как известно, простейший объектив для фотоаппарата можно сделать из одной двояковыпуклой линзы. Конечно, существуют фотоаппараты вообще без объектива (так называемые пинхол-камеры, предок которых — камера-обскура), но в данном случае они нам не слишком интересны. Для начала мы рассмотрим, как строится изображение в простейшем однолинзовом объективе, а затем я покажу, что те же методы хорошо подходят и для сложных объективов, сочетающих в себе более десятка последовательно расположенных линз.

Напомню вам схему хода лучей в тонкой линзе из школьного курса геометрической оптики:



На этой схеме d — расстояние от линзы до объекта, D — расстояние от линзы до изображения объекта (на матрице или плёнке), а f — фокусное расстояние линзы.

Формула тонкой линзы из того же курса связывает эти три расстояния:

Теперь ещё раз посмотрим на оптическую схему: h — это линейный размер объекта съёмки, а H — размер его уменьшенного изображения. Нетрудно заметить, что h = d tan α, а H = D tan α (это следует из свойств прямоугольного треугольника). Подставив эти величины в формулу тонкой линзы, увидим, что tan α сокращается, и в результате получим следующее уравнение:

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

Ну а теперь давайте проверим её на практике.

Вот фотография, которую я сделал из своего окна:



На ней запечатлён дом 1 по 3-му Дорожному проезду, что в Москве. Это 22-этажная башня серии И-700А.

Какую полезную информацию можно извлечь из данной фотографии? Напомню, для расчёта нам нужны неизвестные пока величины h, H и f. h — это реальная высота дома (в метрах). Сходу я её не нагуглил, зато выяснил вот что: высота потолков в этом доме — 2,64 м, а толщина перекрытий — 0,22 м. Наверняка при измерении высоты потолков не учитывалась толщина напольного покрытия. Точно она мне не известна, так что, немного округлив, примем высоту одного этажа равной 2,9 м. Хорошо видны 23 панели, таким образом, высота видимого участка составляет примерно 66,7 м. Запомним эту величину и приступим к анализу фотографии.

H — это размер изображения дома на матрице фотоаппарата. По фотографии мы можем подсчитать его в пикселях, но, как известно, размер пикселя — это всё равно что размер ангела: точных данных ни у кого нет. Но здесь нужно вспомнить, что конкретные физические размеры имеет матрица фотоаппарата. Лезем в поисковик и узнаём, что для камеры Nikon D90 размер матрицы составляет 2,36 × 1,58 см, а разрешение — 4288 × 2848 пикс. Наша фотография не была кадрирована или повёрнута, поэтому мы можем узнать точный линейный размер изображения дома на матрице, составив пропорцию. Но чтобы делать это не вручную, воспользуемся программой Adobe Photoshop, где есть масса полезных инструментов.

По умолчанию Photoshop, конечно, не знает, какого размера должна быть наша фотография, и указывает ей разрешение 300 пикс./дюйм, или 118,11 пикс./см:



Но мы, зная физический размер матрицы и количество пикселей по длинной стороне снимка, делаем такой расчёт: 4288 / 2,36 (размер матрицы в сантиметрах), и получаем правильное разрешение — 1817 пикс./см. Вписываем его в соответствующее окошко и, чтобы не изменились реальные размеры фотографии, а лишь были пересчитаны её длина и ширина в см, указываем в верхних полях «100 проц»:



Как видите, при этом в поле «Размер печатного оттиска» появились уже известные нам размеры матрицы: 2,36 × 1,57 см. Точнее, в спецификации было указано 1,58 см, но это несущественная погрешность.

Теперь при помощи инструмента «Линейка» измерим высоту видимого участка дома (23 панели) на фотографии (смотрите в правый верхний угол):



Получается, что высота изображения дома на матрице составляет 1,92 см, или 0,0192 м.

Осталось только выяснить фокусное расстояние, но для этого, к счастью, ничего считать не нужно: оно сразу прописывается при съёмке в метаданных фотографии (EXIF). Открываем их в фоторедакторе и видим:



Фокусное расстояние при съёмке составляло 105 мм, или 0,105 м, то есть я снимал дом с максимально возможным для этого объектива приближением.

Ну что ж, теперь у нас есть все данные для расчёта. Подставляем их в формулу

и получаем: d = (0,105(0,0192 + 66,7)) / 0,0192 = 364,9 м. Внимательный читатель наверняка заметил, сколь ничтожно мала величина H в сравнении с h, поэтому нашу формулу смело можно упростить до вида

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

Ну а теперь самое интересное — нужно проверить, верна ли была использованная нами формула? Ведь в начале я говорил, что мы рассматриваем упрощённую конструкцию объектива, а не реальную. Может быть, наши расчёты не имеют ничего общего с действительностью? К счастью, это легко выяснить. Заходим на Яндекс.Карты и переходим в точку с координатами 55.604364, 37.611455. Затем активируем инструмент «Линейка» и ставим на карте две точки: одну — возле окна, из которого было сделано фото, а другую — возле стены дома, на которой мы считали панели:



Получаем 365 м. Ну не красота, а? Величины совпали с точностью до 0,1 м! Конечно, такая точность в известной мере является результатом везения, потому что и при измерении размеров изображения, и при подсчёте высоты этажей, и при расстановке точек на карте я вполне мог допускать погрешности в 1–3%. Но, как бы то ни было, в конечном итоге расчётная и измеренная величины сошлись.

Скептически настроенный читатель может подумать, что я подгонял цифры, и что для другой фотографии всё будет по-другому. Что ж, у меня есть ещё одно фото того же дома, сделанное с аналогичной точки, но совсем с другим фокусным расстоянием:



Проделаем для него те же измерения и расчёты. У меня получилось, что размер изображения дома составляет 0,39 см, а фокусное расстояние — 21 мм. Подставляем эти числа в упрощённую формулу и получаем d = (0,021 × 66,7) / 0,0039 = 359,2 м. Результат немного отличается, но всё равно в рамках погрешности совпадает с измеренным по карте. Расхождение несложно объяснить: камера указывает фокусное расстояние как целое число, то есть и 20,51, и 21,49 мм она покажет как 21 мм. А это уже даёт погрешность 2,4%.

Впрочем, самых въедливых скептиков наверняка не убедил и этот пример. Ведь в обоих случаях я использовал один и тот же объектив — а что, если формула работает для него чисто по совпадению? Справедливое замечание. Чтобы проверить, так ли это, я возьму кадр, сделанный не только другим объективом, но и другим фотоаппаратом, причём не цифровым, а плёночным.

Вот фотография, которую мы будем анализировать:



Её много лет назад сделал мой отец на свой «Зенит-Е» с объективом Гелиос-44-2. Фокусное расстояние этого объектива составляет 58 мм. Определить физический размер изображения дома очень просто: у меня есть слайд, который я оцифровал с определённым разрешением, и сканер прописал его в свойствах файла. Тут даже пересчитывать ничего не нужно, достаточно воспользоваться линейкой.



Участок из тех же 23-х панелей имеет на слайде высоту 1,06 см. Подставляем значения в формулу: d = (0,058 × 66,7) / 0,0106 = 365 м. Полное совпадение!

Что ж, мы получили интересные результаты: выходит, простая формула для тонкой линзы позволяет получать весьма точные (и легко проверяемые) результаты при анализе реальных фотографий, а не «сферических коней в вакууме». Почему же так происходит, если реальный объектив представляет собой не одну линзу, а целый бутерброд из линз? Ответ на этот вопрос поможет дать статья Википедии. Для сложного объектива при расчёте вводят не одну, а две главные плоскости. Фактически, расстояния d и D, которые вы видели на схеме в самом начале этого поста, в этом случае отсчитываются от разных (хотя и не слишком удалённых друг от друга) точек. Но расстояние D, даже небольшое изменение которого могло бы существенно повлиять на результат просто в силу небольших размеров этого плеча оптической системы, нам, к счастью, знать не нужно, потому что производитель объектива уже рассчитал и нанёс на его корпус фокусное расстояние, через которое величину D, как было показано выше, легко выразить. А что касается изменения расстояния от передней главной плоскости до объекта, то какими бы толстыми ни были линзы и каким бы длинным ни был объектив (мы, конечно, говорим о реальных конструкциях, а не воображаемых объективах размером с дом), при расстоянии до объекта съёмки в несколько сотен метров, как в нашем случае, величиной в десяток-другой сантиметров можно смело пренебречь.

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

Как видите, даже знаний из программы средней школы достаточно, чтобы убедиться в полной некомпетентности отдельных «экспертов». Любите математику и не давайте себя обмануть!
Tags: наука и техника, развенчание мифов
Subscribe

Recent Posts from This Journal

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 6 comments