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