Да, это возможно. Я уверен, что будет подход к тому, чтобы сделать это в общем, используя геометрию перспективы, но вот пример того, как это сделать, в примере с игрушкой, чтобы показать, что это можно сделать. Представьте, что у вас есть что-то вроде этого:
![diagram of positions of things](https://i.stack.imgur.com/4M5Ji.png)
Здесь камера находится на уровне земли слева, и есть две точки на равной высоте, h, разделенные s, причем камера находится на расстоянии D от ближайшей, и все находится на одной линии (давайте не обращайте внимания на проблему, заключающуюся в том, что ближайший объект затемнит более отдаленный объект: в реальной жизни вещи не будут находиться в такой линии, а математика будет сложнее).
Вы знаете h и s, как вы знаете, что находится в городе, и вы хотите понять D, глядя на фотографию: вы можете? Да, вот как.
Давайте представим, что фотография, сделанная камерой, проецируется на экран на расстоянии d перед камерой таким образом, что изображения двух точек совпадают с их реальными положениями, видимыми с камеры. По простой геометрии высоты на изображениях двух точек равны
- h1 = HD / D (ближайший)
- h2 = hd / (D + s) (далее один)
Итак, теперь мы знаем s, h (из геометрии города), h1 и h2 (из измерения фотографии), и мы не знаем d (и на самом деле нам все равно) и мы не знаем D, но все равно.
Так что теперь мы можем сделать немного алгебры:
h1 / h2 = hd (D + s) / (hdD) = (D + s) / D
So
D = s / (h1 / h2 - 1)
Итак, здесь произошло две вещи, одна всегда будет происходить, а другая потому, что я выбрал игрушечный пример.
- d исчезло, и все, что имеет значение, это соотношение h1 и h2: это должно быть очевидно, потому что, очевидно, мы можем увеличить фотографию до любого размера, который нам нравится, поэтому единственное, что может иметь значение это соотношение позиций на изображении.
- ч исчез. Это происходит только потому, что я выбрал обе точки на одной высоте: в общем случае не произойдет.
Наконец, вы можете убедить себя, что это выражение для D правильно: если h1 и h2 одинаковы, то D становится бесконечным, и это правильно, потому что вы увидите только две башни на одной высоте, если вы бесконечно далеко от них. Точно так же, если h1 / h2 становится очень большим, тогда D становится очень маленьким, и это правильно: если вы очень близки к одной башне, она будет выглядеть очень большой на изображении.
Теперь, как я уже сказал, это игрушечный пример: в реальной жизни ничего не будет выстроено в линию, все будет разной высоты и так далее. Но если у вас есть достаточно точек на изображении, для которых вы знаете, где находятся реальные точки, то вы можете сказать, откуда было сделано изображение (интересный вопрос: сколько точек вам нужно? Я подозреваю, что в целом это будет 3, хотя это может быть 4: я уверен, что это известно, однако).
Я уверен, что есть книги по математике перспективы, и у них будут общие решения, которые вы можете использовать: я бы порекомендовал сделать некоторые поиски по этому вопросу.
Примечания:
- Я предположил, что оптическая система камеры не вносит искажений - в реальной жизни они будут, но для большинства объективов они должны быть достаточно малы (не пытайтесь делать это с рыбьим глазом или объективами с очень широким углом обзора) );
- Я не думал о том, что может делать движение камеры (обычное для старых LF-изображений) - точнее, я думал , и я не сделал однозначного заключения, хотя я не думаю, что они будут иметь значение .