2012-06-25 9 views
3

Я хотел бы оценить позу знания 3D-объекта с помощью opencv. Я могу использовать solvePnP, если указаны точки 3D-модели и их соответствующие точки на изображении. Мой вопрос: как я могу найти соответствие между 3D-моделью и ее проекцией на изображение? Большое спасибоОценка позы на основе модели

+0

Что означают по переписке? Вы говорите об увеличенной реальности? –

+0

Я не говорю прямо о AR. AR может быть одним из тех случаев, когда вам нужна оценка позы. Под переписью я имею в виду, какая точка зрения 3D-модели проецируется в эту точку на изображение. Например, в этом блоге. http://www.morethantechnical.com/2010/03/19/quick-and-easy-head-pose-estimation-with-opencv-w-code/ Точки 3D-моделей известны и точки этой 3D-модели , которые проецируются на изображение, также известны. Надеюсь, я мог бы объяснить это хорошо. –

ответ

1

poseMatrix = solvePnP (objectPoints, imagePoints);

imagePoint_computed = objectPoints [я] * poseMatrix * cameraMatrix

найти J, при котором

imagePoints [J] ~ = imagePoint_computed.

objectPoints [j] и imagePoints [i] - соответствующие точки.

+0

, но не решаетPnP должны иметь объектные точки и точки изображения в соответствующем порядке? это проблема, он не знает, какая точка изображения соответствует той точке объекта. вы можете запустить какой-то цикл, пробирая разные соответствия, но это ненадежно. – hokiebird

3

Как только у вас есть несколько совпадений точек в 3d-модели и точек в сцене, вы должны применить cv :: findHomography(). Эта функция вычисляет матрицу, которая проецирует любую точку из 3D-модели в сцену. На самом деле для расчета гомографии требуется всего 4 матча.

1

Это продолжало прослушивать меня, поэтому я продолжал искать. алгоритм SoftPOSIT - это то, что вы хотите. http://www.cfar.umd.edu/~daniel/Site_2/Code.html имеет реализацию matlab, некоторые люди перевели на c/C++