Я не знаю, изменил ли ты свой вопрос в какой-то момент, но мой первый ответ довольно сложный для того, что ты хочешь.Вы, вероятно, можете сделать что-то попроще.
1) Длинное и сложное решение (более общие проблемы)
Сначала вам нужно знать размер объекта.
Вы можетепосмотрите на алгоритмы компьютерного зрения.Если вы знаете объект (его размеры и форму).Ваша главная проблема - это проблема оценки позы (то есть, найти положение объекта относительно камеры), из которого вы можете найти расстояние.Вы можете посмотреть [1] [2] (например, вы можете найти другие статьи по нему, если вам интересно) или выполнить поиск POSIT, 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-точки камеры, Long Quan и Zhongdan Lan
[2] Полный линейный 4-точечный алгоритм для камерыОпределение позы, Lihong Zhi и Jianliang Tang
[3] http://gandalf -library.sourceforge.net /