Ответ 1
Я не знаю, изменил ли вы свой вопрос в какой-то момент, но мой первый ответ довольно сложный для того, что вы хотите. Вероятно, вы можете сделать что-то более простое.
1) Длительное и сложное решение (более общие проблемы)
Сначала вам нужно знать размер объекта.
Вы можете посмотреть алгоритмы компьютерного зрения. Если вы знаете объект (его размеры и форму). Ваша основная проблема - проблема оценки позы (то есть найти положение объекта относительно камеры), из этого вы можете найти расстояние. Вы можете посмотреть [1] [2] (например, вы можете найти другие статьи на нем, если вам это интересно) или выполнить поиск ПОЗИТА, SoftPOSIT. Вы можете сформулировать проблему как проблему оптимизации: найти позу, чтобы свести к минимуму "разницу" между реальным изображением и ожидаемым изображением (проекция объекта с учетом оцененной позы). Это различие обычно представляет собой сумму квадратов расстояний между каждой точкой изображения Ni и проекцией P (Mi) соответствующей объектной (3D) точки Mi для текущих параметров.
Из этого вы можете извлечь расстояние.
Для этого вам необходимо выполнить калибровку камеры (грубо говоря, найти соотношение между положением пикселя и углом обзора).
Теперь вы можете не захотеть сделать все это самостоятельно, вы можете использовать библиотеки Computer Vision, такие как OpenCV, Gandalf [3]...
Теперь вы можете сделать что-то более простое (и приблизительное). Если вы можете найти расстояние изображения между двумя точками на одной и той же глубине (Z) от камеры, вы можете связать расстояние изображения d с реальным расстоянием D с: d = a D/Z (где a - параметр камера, связанная с фокусным расстоянием, количеством пикселей, которые вы можете найти с помощью калибровки камеры)
2) Краткое решение (для вас простая проблема)
Но вот (простой, короткий) ответ: если вы рисуете на плоскости, параллельной "плоскости камеры" (т.е. она идеально обращена к камере), вы можете использовать:
PH = a AH / Z
PW = a AW / Z
где Z - глубина плоскости изображения и a по внутреннему параметру камеры.
Для справки модель камеры обскуры связывает изображение, скоординированное m = (u, v), с мировым скоординированным M = (X, Y, Z) с:
m ~ K M
[u] [ au as u0 ] [X]
[v] ~ [ av v0 ] [Y]
[1] [ 1 ] [Z]
[u] = [ au as ] X/Z + u0
[v] [ av ] Y/Z + v0
где "~" означает "пропорционально", а K - матрица собственных параметров камеры. Вам нужно выполнить калибровку камеры, чтобы найти параметры K. Здесь я предположил, что au = av = a и as = 0.
Вы можете восстановить параметр Z из любого из этих уравнений (или взять среднее значение для обоих). Обратите внимание, что параметр Z не является расстоянием от объекта (который изменяется в разных точках объекта), а глубиной объекта (расстояние между плоскостью камеры и плоскостью объекта). но я думаю, это то, что вы хотите в любом случае.
[1] Определение положения неподвижной камеры N-Point, Long Quan и Zhongdan Lan
[2] Полный линейный 4-точечный алгоритм определения положения камеры, Lihong Zhi и Jianliang Tang