Итак, у меня есть алгоритм итеративный ближайший пункт (ICP), который был написан и подгонит модель к облаку точек. В качестве краткого руководства для тех, кто не знает, ICP - это простой алгоритм, который соответствует точкам модели, в конечном счете обеспечивая однородную матрицу преобразований между моделью и точками.
Вот учебник по быстрой картине.
Шаг 1. Найдите ближайшую точку в наборе моделей к вашему набору данных:
Шаг 2: Используя кучу забавных математик (иногда на основе градиентного спуска или SVD), сближайте облака и повторяйте до тех пор, пока не сформируется поза:
! [Рисунок 2] [2]
Теперь, когда бит прост и работает, мне бы хотелось помочь: Как я могу сказать, хорошая ли позиция, которую у меня есть?
Итак, в настоящее время у меня есть две идеи, но они довольно хаки:
-
Сколько точек указано в алгоритме ICP. То есть, если я подхожу к почти никаким точкам, я полагаю, что поза будет плохой:
Но что, если поза на самом деле хорошая? Это может быть даже с небольшим количеством баллов. Я не хочу отклонять хорошие позы:
Итак, что мы видим здесь, это то, что низкие точки действительно могут сделать очень хорошую позицию, если они находятся в нужном месте.
Таким образом, другая исследованная метрика была отношением поставленных точек к используемым точкам. Вот пример
Теперь мы исключаем точки, которые находятся слишком далеко, потому что они будут выбросами, теперь это означает, что нам нужна хорошая стартовая позиция для работы ICP, но я в порядке с этим. Теперь в приведенном выше примере уверенность будет говорить "НЕТ", это плохая поза, и было бы правильно, потому что отношение точек к точкам включено:
2/11 < SOME_THRESHOLD
Итак, это хорошо, но в случае, показанном выше, он не сработает, где треугольник перевернут. Он скажет, что треугольник вверх тормашками хорош, потому что все точки используются ICP.
Вы не должны быть экспертом по ICP, чтобы ответить на этот вопрос, я ищу хорошие идеи. Используя знания о точках, как мы можем классифицировать, является ли это хорошим решением позы или нет?
Использование обоих этих решений вместе в тандеме является хорошим предложением, но его довольно хромым решением, если вы спросите меня, очень глупый, чтобы просто породить его.
Каковы некоторые хорошие идеи о том, как это сделать?
PS. Если вы хотите добавить какой-то код, пожалуйста, подойдите к нему. Я работаю в С++.
ПФС. Кто-то поможет мне с пометкой этого вопроса. Я не уверен, где он должен упасть.