Панорамная камера и измерения длины - Фотопедия
1 голос
/ 19 ноября 2014

Прежде всего, у меня нет большого опыта в фотографии. Если я спрошу что-нибудь глупое, прими мои оправдания.

Я программист-самоучка OpenGL. В моей работе у нас есть панорамный просмотрщик на 360º, который отображает панораму в виде кубической карты, снятой камерой Ladybug (состоящей из 6 вспомогательных камер, каждая из которых будет создавать одну сторону куба).

Теперь меня попросили проверить, можем ли мы измерить реальные длины на панораме. Например, если в комнате у нас есть стол длиной 3 метра, то измерение таблицы на фотографии скажет нам, что она длиной 3 метра.

Я могу получить положение курсора мыши в координатах модели, но не могу связать их с реальными координатами. Используя мой предыдущий пример таблицы:

Table width goes from (0,0) to (3,0)    -> 3 meters
Model width goes from (0,0) to (0.356)  -> 0.356 unit-agnostic ( pixels? mm? )

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

Более того, для каждого выстрела Божья коровка (что переводится на 6 картинок) у меня есть информация о положении камеры:

Camera's Origin vector at the time of the shot (in UTM coords).
Camera's Direction vector at the time of the shot.
Camera's Up vector at the time of the shot (in UTM coords).
Camera's Roll, Pitch and Yaw values at the time of the shot.

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

Итак:

  • Можно ли измерить длины на снимке / панораме?

  • Если это возможно, где я могу найти больше информации об этом процессе? Я не спрашиваю о готовом решении, а о руководстве в этой теме, так как мне не хватает надлежащего фона для связи одной переменной с другой.

1 Ответ

2 голосов
/ 19 ноября 2014

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

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


Обновление:

Вам нужна какая-то ссылка на ваши измерения. Если вы хотите измерить размер изолированного объекта, тогда требуется расстояние от камеры и поля зрения. Например, если ваш FoV 90 degrees, размер изображения 1000 pixels и размер объекта 100 pixels, тогда вы можете рассчитать угол обзора объекта Am. Как только вы знаете это, и расстояние Dm метров, фактический размер Sm будет:

Am = 90 * 100 / 1000 = 9 deg    -- Angle of View
(Sm / 2) / Dm = tan(Am / 2)     -- the trigonometric equation
Sm = 2 * Dm * tan(Am / 2)       -- object's size

Как вы можете видеть, одно измерение, которое у вас есть на вашем изображении, - это угол обзора (Am) объекта, который вы измеряете. Легко видеть, что объект размером 1 метр на расстоянии 3 метра имеет то же изображение, что и объект размером 2 метра на расстоянии 6 метров. Вот почему расстояние до камеры имеет решающее значение.

Обратите внимание, что рассчитанный размер составляет только перпендикулярный размер !. Мы не можем измерить радиальный размер , если не будет предоставлена ​​дополнительная информация .

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

Например, таблица имеет ширину Ht = 3 meters, размер St = 3 pixels. Модель Sm = 0.356 pixels, расположена dDm = 2 meters за столом. Затем вы можете сделать:

At = 90 * 3 / 1000             -- table's angle of view
Dt = (Ht / 2) / tan(At / 2)    -- table's distance
Dm = Dt + dDm                  -- model's distance
Hm = Dm / Dt * Ht              -- model's size

Если модель не находится на том же LoS, что и эталонный объект, тогда dDm должно быть радиальной разницей на расстоянии от камеры.

Это все очень базовая тригонометрия, поэтому, если вы незнакомы с полем, вы можете начать там читать.

Я могу себе представить, что в какой-то исследовательской литературе вы обнаружите, что кто-то разработал эзотерический метод оценки расстояния на основе «размытости» объекта на изображении, вызванной ограниченной глубиной резкости камеры (DoF) или чем-то еще как это. Обычно эти случаи работают для очень специфического и специализированного оборудования, которое было точно откалибровано для проведения измерений.

Наконец - если вы можете использовать две близлежащие камеры или делать два последовательных снимка из близлежащих мест, вы можете создать стереоизображение, которое позволит вам оценить расстояние до объекта от несоответствия изображений объекта (поиск «создание поля глубины из стереоизображение ").

...