Как получить реальный размер объекта от изображения, если не знать расстояние между объектом и камерой? - PullRequest
26 голосов
/ 30 марта 2012

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

Я провел некоторое исследование по этому вопросу и нашел полезным [вопрос]: Как бы вы нашли высоту объектов по изображению?

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

distance to object (mm) = focal length (mm) * real height of the object (mm) * image height (pixels)
                          ---------------------------------------------------------------------------
                          object height (pixels) * sensor height (mm)

Но как получить значение реальной высоты объекта, если расстояние не известно?

Имеют ли инструменты, которые создают 3d модели из изображений, реальные размеры?

1 Ответ

31 голосов
/ 30 марта 2012

Простой ответ: Вы не можете .

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

Более сложный ответ - , есть способы обойти это , например:

  1. Чит, используя известную ссылку:

    Например, если у вас есть объект известного размера, вы можете определить расстояние. Это похоже на то, что НАСА делает, например, для калибровки своих камер.

    Вы можете сделать безопасные предположения, если имеете дело с общими объектами, такими как высота одного этажа, при анализе изображения здания.

  2. Переместите камеру:

    Это позволяет вам получить более одной контрольной точки с одной и той же камерой.

    Полагаю, вы могли бы использовать акселерометр для точного измерения позиционного соотношения между изображением, снятым в точке T1 во времени и в точке T2. Это даст вам два изображения одного и того же объекта с известным расстоянием между ними. Это позволяет вам триангулировать, как если бы у вас было два глаза.

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

  3. Предположим расстояние:

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

Как вы упоминаете в своем вопросе, есть целое подполе , посвященное этому вопросу, и это область активных исследований .

...