Обеспечение ПМС, внутренние показатели


Таким образом, у меня есть итерационный алгоритм ближайшей точки (ICP), который был написан и будет соответствовать модели в облаке точек. В качестве краткого руководства для тех, кто не в курсе ICP представляет собой простой алгоритм, который соответствует точкам в модели, в конечном счете обеспечивая однородную матрицу преобразования между моделью и точками.

Вот краткое руководство по изображению.

Шаг 1. Найдите ближайшую точку в наборе моделей к вашему набору данных:

Шаг 2: Использование нескольких забавных математических методов (иногда на основе градиентного спуска или SVD) подтяните облака ближе друг к другу и повторяйте до тех пор, пока не сформируется поза:

![Рисунок 2][2]

Теперь этот бит прост и работает, в чем я хотел бы помочь, так это: как мне определить, хороша ли моя поза?

Итак, в настоящее время у меня есть две идеи, но они довольно банальны:

  1. Сколько точек находится в алгоритме ICP. Т. е., если я подхожу почти без очков, я предполагаю, что поза будет плохо:

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

Рисунок 5

Таким образом, мы видим, что низкие точки могут действительно создать очень хорошую позицию, если они находятся в правильном месте. Таким образом, другой исследуемой метрикой было отношение поставляемых точек к используемым точкам. Вот пример

Рисунок 6

Теперь мы исключаем точки, которые находятся слишком далеко, потому что они будут выбросами., теперь это означает, что нам нужна хорошая стартовая позиция для работы ПМС, но я согласен с этим. Теперь в приведенном выше примере уверенность скажет "Нет", это плохая поза, и это будет правильно, потому что отношение точек к точкам включено:
2/11 < SOME_THRESHOLD

Так что это хорошо, но это не сработает в случае, показанном выше, где треугольник перевернут вверх ногами. Он скажет, что перевернутый треугольник хорош, потому что все точки используются ICP.

Вам не нужно быть экспертом по Чтобы ответить на этот вопрос, я ищу хорошие идеи. Используя знание точек, как мы можем классифицировать, является ли это хорошим решением позы или нет?

Использование обоих этих решений вместе в тандеме-хорошее предложение,но это довольно неудачное решение, если вы спросите меня, очень глупо просто порог его.

Какие есть хорошие идеи, как это сделать?

ПС. Если вы хотите добавить какой-то код, Пожалуйста, сделайте это. Я работаю в c++.

PPS. Кто-нибудь, помогите мне с метками на этот вопрос я не уверен, куда он должен упасть.

3 10

3 ответа:

Одним из возможных подходов может быть сравнение поз по их форме и ориентации.

Сравнение форм может быть выполнено с расстоянием Хаусдорфа до изометрии , то есть позы имеют одинаковую форму, если

d(I(actual_pose), calculated_pose) < d_threshold

Где d_threshold должно быть найдено из экспериментов. В качестве изометрических модификаций X я бы рассматривал вращения под разными углами-кажется, в этом случае достаточно.

То есть позы имеют одинаковую форму, мы должны сравнить их ориентацию. Сравнивать ориентация мы могли бы использовать несколько упрощеннуюмодель Фрекса . Для каждой позы мы должны вычислить значения
{x_y min, x_y max, x_z min, x_z max, y_z min, y_z max}

И затем убедитесь, что каждое различие между соответствующими значениями для поз не нарушает another_threshold, полученное также из экспериментов.

Надеюсь, это имеет какой-то смысл, или, по крайней мере, вы можете извлечь из этого что-то полезное для вашей цели.

ICP пытается минимизировать расстояние между облаком точек и моделью, да? Не будет ли самым разумным оценить его, основываясь на том, что это расстояние на самом деле после выполнения?

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

Похоже, что любое вычисление, которое вы можете придумать, которое дает больше понимания, чем то, что ICP минимизирует, было бы более полезным, включенным в сам алгоритм,поэтому он может минимизировать и это. =)

Обновить

Я думаю, что не совсем понял алгоритм. Похоже, что он итеративно выбирает подмножество точек, преобразует их, чтобы минимизировать ошибку, а затем повторяет эти два шага? В таком случае ваш идеальное решение выбирает как можно больше точек, сохраняя ошибку как можно меньше.

Вы сказали, что объединение двух терминов кажется слабым решением, но мне кажется, что это точное описание того, что вы хотите, и оно отражает две основные особенности алгоритма (да?). Оценка с использованием чего-то вроде error + B * (selected / total) кажется духовно похожей на то, как регуляризация используется для решения проблемы перенапряжения с градиентным спуском (и подобными) алгоритмами ML. Выбрав хорошее соотношение цены и качества для Б потребовались бы некоторые эксперименты.

Глядя на ваши примеры, кажется, что одна из вещей, которая определяет, является ли матч хорошим или нет, - это качество очков. Не могли бы вы использовать/рассчитать весовой коэффициент при расчете вашей метрики?

Например, вы можете утяжелить точки, которые являются ко-линейными / ко-планарными или пространственно близкими, поскольку они, вероятно, определяют один и тот же объект. Это, возможно, позволит вашему перевернутому треугольнику быть отвергнутым (так как точки находятся в линии, и это не очень хороший показатель общая поза), но угловой корпус был бы в порядке, так как они приблизительно определяют корпус.

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