Как я могу рассчитать фокусное расстояние по фотографии? - Фотопедия
5 голосов
/ 23 марта 2012

Я разместил этот вопрос в Переполнении стека, но кто-то предположил, что этот сайт может мне помочь.

Я делаю проект колледжа, в котором пытаюсь вычислить фокусное расстояние камеры по фотографии. Этот проект является частью моего последнего курса по вычислительной технике (поэтому я предположил, что Stack Overflow будет лучшим местом для обсуждения)

Я использую исчезающие линии, определенные пользователем, чтобы попытаться вычислить фокусное расстояние. скажем, у вас есть куб, пользователь может выбрать 3 стороны, чтобы пересечь. Для каждой стороны 2 линии нарисованы до бесконечности. Где 2 линии пересекаются = точка пересечения. Это делается для всех трех сторон, давая 3 точки пересечения. Затем эти точки используются для рисования нового треугольника, и от этого треугольника до фокусного расстояния можно рассчитать, как показано в этом исследовании Research. Но мои ценности далеко. Для этого изображения фокусное расстояние известно как 18 мм, но полученное значение равно 478,634 ....

enter image description here

Есть ли у кого-нибудь опыт решения подобных проблем?

Я также сталкивался с этой формулой на этом веб-сайте. Кто-нибудь знает, что

alphaX (fx = (imageWidth) 2 * tan ( alphaX ))

будет представлять.

Любая помощь будет оценена

UPDATE:.

Я сделал несколько снимков, чтобы показать, как я вычисляю фокусное расстояние (изображения не в масштабе или размере). Начиная с фотографии куба Cube, я вытягиваю каждую из трех сторон, пока они не пересекаются (показано зелеными точками). Затем, используя эти точки пересечения, я строю прямоугольник, как показано здесь Intersecting points. Затем я вычисляю орто-центр треугольника. Затем, используя формулу здесь , я рассчитываю фокусное расстояние, как показано здесь enter image description here. В моем приложении фокусное расстояние - это просто значение (целое число), которое вычисляется из квадратного корня из длины пересекающихся точек (IP1) до центра, умноженной на длину от центра до противоположной средней точки (MP2)

Ответы [ 2 ]

8 голосов
/ 23 марта 2012

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

Точки схода, которые вы вычислили в пространстве изображения, не имеют единиц измерения, если вы не знаете размер датчика камеры. Таким образом, из формулы без единиц вы не можете применить мм к ответу и ожидать, что это имеет смысл!

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

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

7 голосов
/ 23 марта 2012

(1) При осмотре становится «ясно», что используется относительно широкоугольный объектив. В 35-миллиметровой полнокадровой системе будет получено предположение, гораздо более близкое к 18 мм, чем к 480 мм.

(2) Не имея моего мозга полностью вокруг метода тройной точки схода, описанного в ссылке, я бы подумал, что для того, чтобы точки схода были релевантными, вам нужно было бы иметь дело с линиями, которые были параллельны в реальности, но отображались явно не так в перспективе ИЛИ, может быть, с острыми линиями, чей фактический угол вставки был известен и которые были представлены под другим видимым углом на изображении. Тем не менее, в приведенной фотографии, приведенной в качестве примера, фактический угол между двумя стенами по обе стороны острова кажется произвольным и неизвестным (кроме их строителей), и что изменение этого угла изменит ответ, который вы получите. ОДНАКО, я могу просто упустить момент: -).

(3) Я вполне уверен, что формула, приведенная оригинальным постером в вашей ссылке как

  • fx = (imageWidth) 2 * tan (alphaX))

предназначен для чтения

  • fx = (imageWidth) / (2 * tan (alphaX))

Где:

FX = фокусное расстояние
ширина изображения = ширина датчика
alphaX = ПОЛОВИННЫЙ угол обзора

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

enter image description here

ПОЛОВИНА угол обзора = альфа имеет загар (альфа) = Y / X = высота / расстояние.
Одинаковый загар достигается половиной высоты изображения на датчике / фокусном расстоянии.
Так
(sensor_height / 2) / focal_length = высота / расстояние = загар (альфа) * ​​1034 * так
(IW / 2) / fx = tan_alpha
инвертировать
fx / (Iw / 2) = 1 / tan_alpha
fx = Iw / (2 x tan_alpha)

Добро пожаловать на сайт Фотопедия, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...