Вычисление ориентации квадрата и отображение объекта с одинаковой ориентацией - PullRequest
3 голосов
/ 05 января 2011

Я написал приложение, которое обнаруживает квадрат на изображении.Чтобы дать вам хорошее представление о том, как такое изображение, содержащее такой квадрат, в данном случае маркер, может выглядеть так:

Что я получаю после обнаружения, этокоординаты четырех углов моего маркера.Теперь я не знаю, как отобразить объект на моем маркере.У объекта должен быть тот же угол поворота / угол / направление, что и у маркера.

Есть ли какие-либо документы о том, как этого добиться, какие-либо алгоритмы, которые я могу использовать, оказались достаточно надежными / работающими?1009 * Это не обязательно должно быть рабочее решение, это может быть простое описание того, как этого добиться, или что-то подобное.Если вы указываете мне на библиотеку или что-то еще, она должна работать под Linux, Windows не требуется, но было бы здорово, если в какой-то момент мне нужно портировать приложение.Я уже посмотрел на ARToolkit, но они представляют собой файлы параметров камеры и более сложные матрицы, в то время как я получил только четыре угловых точки и одно изображение вместо целого потока видео / камеры.

Ответы [ 3 ]

1 голос
/ 08 января 2011

Я полагаю, что вы можете использовать OpenCV cvGetPerspectiveTransform, чтобы найти преобразование, которое может деформировать квадрат в углы маркера, а затем cvWarpPerspective, чтобы деформировать изображение.

0 голосов
/ 08 января 2011

Это квадрат. Предполагается, что он лежит в плоскости, которая нормальна, и мы должны найти ее, потому что именно так мы должны разместить наш объект. Можно предположить, что все координаты y равны 0, и теперь мы имеем дело с аспектной проблемой. Может быть, мы могли бы начать с отображения его в диапазоне 0-1. Самая левая точка получает 0 на х, самая правая 1, то же самое будет на z - 0 ближайшего гетера и 1 дальнего. мы можем определить это, проверив длину диагоналей. короче один соединяет переднюю и заднюю точку, а затем другой 2. таким образом, мы получаем что-то вроде

       x z
left:  0 ?
right: 1 ?
front: ? 0
back:  ? 1

Я думаю, что это? мог быть вычислен аспектом сторон. Использование квадрата упрощает задачу. Если 2 линии, соединяющие передний правый и передний левый, совпадают, значения z слева и справа равны 0,5. Ну, и таким образом вы могли бы получить все 3 измерения и используя векторное кросс-произведение вычислить нормально. Затем вы можете взять ваши модели с осью y в качестве высоты, вычислить матрицу, используемую для поворота вектора 0,1,0 в нормаль, которую вы получите, а затем нарисовать 2D-изображение положения и масштабировать его должным образом. Ну, я не знаю, помог ли я вам, может быть, это не так, как это работает, но я надеюсь, что написал что-то полезное.

0 голосов
/ 05 января 2011

Я думаю, что некоторые ответы в этой теме могут указать вам правильное направление: Как преобразовать 2D-точки в 3D?

...