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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Более сложный ответ есть способы вокруг этого:

  • Обмануть, используя известную ссылку:

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

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

  • Переместите камеру вокруг:

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

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

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

  • Предположим, что расстояние:

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

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