Я не знаю, изменили ли вы свой вопрос в какой-то момент, но мой первый ответ довольно сложен для того, что вы хотите. Вы, вероятно, можете сделать что-то проще.
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-точечный алгоритм для определения положения камеры, Лихун Чжи и Цзяньлян Тан.
[3] http://gandalf-library.sourceforge.net/
person
ysdx
schedule
03.06.2011