Ответ 1
Простой ответ вы не можете.
Кстати, вот почему у людей есть два глаза. Если вы хотите судить о размере без известного расстояния, вам понадобятся по крайней мере две контрольные точки. Это позволяет вам триангулировать положение объекта, получить расстояние до него и использовать ваше известное фокусное расстояние для расчета размера.
Более сложный ответ есть способы вокруг этого:
-
Обмануть, используя известную ссылку:
Например, если у вас есть объект известного размера, вы можете сделать вывод о расстоянии. Это похоже на то, что NASA делает для калибровки своих камер, например.
Вы можете сделать безопасные предположения, если вы имеете дело с общими объектами, такими как высота одного этажа при анализе изображения здания.
-
Переместите камеру вокруг:
Это позволяет получить более одной контрольной точки с той же камерой.
Я полагаю, вы могли бы использовать акселерометр, чтобы точно измерить позиционную связь между изображением, захваченным в точке T1 во времени и в точке T2. Это даст вам два изображения одного и того же предмета с известным расстоянием между ними. Это позволяет вам триангулировать, как будто у вас два глаза.
Являются ли обычные ручные дрожания камеры достаточными для триангуляции или насколько акселерометр будет достаточно точным, чтобы инерциально позиционировать телефон, я не знаю.
-
Предположим, что расстояние:
Если ваше приложение предназначено для сравнения чего-либо в масштабе человеческой руки (или другой части человеческой анатомии), вы, вероятно, можете смело предположить расстояние, основанное на том, что люди, естественно, сделают. Пределы фокусировки самой камеры также дадут верхний и нижний пределы того, насколько далеко объект может быть и все еще находится в фокусе. Вероятно, это будет допустимым пределом погрешности.
Как вы упомянули в своем вопросе, существует целая подполе, посвященная этому вопросу, и это активное исследование область.