Моя общая цель — сделать оценку позы на основе маркера.
Для этого мне нужно соответствие между координатами изображения и координатами объекта.
Поэтому после обнаружения круговых маркеров мне нужно определить, что верхний левый маркер — это A, первый справа — B, затем C и D. Как в примере на рисунке ниже.
Теперь моей первой идеей было сделать это на основе расстояния.
Поскольку я знаю ширину моих маркеров в реальном мире, я могу легко вычислить евклидово расстояние, умноженное на реальный размер одного пикселя.
Example:
realMarkerWidth = 2,7
realWorldSizeOfOnePixel = MarkerWidth / RealMarkerWidth
distance = euclidiantDistance(P1,P2) * realWorldSizeOfOnePixel
Мой текущий подход:
С этой информацией алгоритм поиска соответствия идет следующим образом.
Обозначения:
Начальные измеренные расстояния сохраняются в наборе P = (dist (m1, m2), …, dist (mi, mi + 1)}
Обнаруженные маркеры будут в наборе D = {d1, d2 …, dn}
Изначально измерьте расстояние между всеми отмеченными маркерами. P =
{dist (A, B), dist (A, C), dist (A, D), dist (B, C), …, dist (D, C)
Примечание: это делается только один раз и до времени выполнения программы оценки позы.
Если | D | > = 3 тогда
dref = d1;
dj = d2;
в то время как < | D |)
измерить dist (dRef, dj) и сопоставить его со всеми записями в P.
Предположим, что текущий dist является тем, который имеет наибольшее сходство с одной записью в P. Увеличьте вхождение предполагаемых маркеров на один
3.dref = Маркер с самым высоким значением вхождения
4. Сделайте это для всех обнаружений в D
Пример:
dref = A, а другие обнаруженные маркеры — B и C.
Тогда программа будет считать 2 раза A один раз B и один раз C.
Наличие A выше, чем все остальные, поэтому dref должно быть A,
Проблема:
Этот подход работает только в 2D-пространстве. Пока все маркеры находятся в одной плоскости, расстояния корректируются. Но если некоторые маркеры не находятся в одной плоскости, расстояния неправильные, и поэтому расстояния больше не могут сравниваться. Смотрите изображение ниже для примера.
Вопрос
Я знаю, что есть такие вещи, как маркеры aruco, но мой вопрос нацелен на то, чтобы сделать распознавание только с помощью белых круглых маркеров.
Кто-нибудь знает подход, как я мог бы улучшить свою систему?
Как я уже говорил в начале, моя цель — сделать оценку позы с помощью белых круглых маркеров. Я открыт для любого решения, которое приближает меня к этой цели.
Задача ещё не решена.
Других решений пока нет …