Облако точек генерируются с использованием равномерной случайной функции для (x,y,z)
. Как показано на следующем рисунке, исследуется плоская пересекающаяся плоскость ( профиль ), которая соответствует как лучшему (даже если не точному) целевому профилю, т.е. заданному в левом нижнем углу. Итак, вопрос :
1- Как найти такой матч дается
target 2D point map
черезpoint cloud
учитывая следующие указания / условия?
2- Каковы тогда координаты / ориентации / степень сходства и т. Д.?
Примечание 1: Интересующий профиль может находиться в любом месте с любым поворотом вдоль осей, а также может иметь различную форму, например треугольник, прямоугольник, четырехугольник и т. Д., В зависимости от его местоположения и ориентации. На следующей демонстрации показан только простой прямоугольник.
Примечание 2. Значение допуска можно рассматривать как расстояние между точками и профилем. Чтобы продемонстрировать это на следующем рисунке предположим допуск 0.01
раз наименьший размер (~1)
так tol=0.01
. Поэтому, если мы удалим оставшуюся часть и спроецируем все оставшиеся точки на плоскости исследуемого профиля, мы сможем проверить его сходство с целевым профилем.
Примечание 3: Соответствующую тему можно найти в разделе « Распознавание точечных паттернов» .
Python
+,MatPlotLib
чтобы делать свои исследования и создавать графики и т. Д.P:{x,y,z}
. Это действительно безразмерные точки. Однако в некотором приближении они могут быть дискретизированы до однопиксельного измерения как трехмерные массивы. Они могут включать в себя также другие атрибуты (например, веса и т. Д.) По координатам.Ответы:
Это всегда потребует больших вычислений, особенно если вы хотите обработать до 2000 точек. Я уверен, что уже есть высокооптимизированные решения для такого типа сопоставления с образцом, но вы должны выяснить, как это называется, чтобы найти их.
Поскольку вы говорите о облаке точек (разреженных данных) вместо изображения, мой метод взаимной корреляции на самом деле не применяется (и будет еще хуже в вычислительном отношении). Что-то вроде RANSAC, вероятно, быстро находит совпадение, но я мало что знаю об этом.
Моя попытка решения:
Предположения:
Таким образом, вы должны быть в состоянии использовать много ярлыков, дисквалифицируя вещи и уменьшая время вычислений. Короче говоря:
Более подробный:
Какая конфигурация имеет наименьшую квадратичную ошибку для всех остальных точек, это лучшее совпадение
Поскольку мы работаем с 3 ближайшими соседними контрольными точками, сопоставление целевых точек можно упростить, проверив, находятся ли они в некотором радиусе. Например, при поиске радиуса 1 из (0, 0) мы можем дисквалифицировать (2, 0) на основе x1 - x2, не вычисляя фактическое евклидово расстояние, чтобы немного его ускорить. Это предполагает, что вычитание происходит быстрее, чем умножение. Есть оптимизированный поиск, основанный на большем произвольном фиксированном радиусе .
На самом деле, поскольку вам все равно придется вычислять все эти значения, находите ли вы совпадения или нет, и поскольку для этого шага вас интересуют только ближайшие соседи, если у вас есть память, вероятно, лучше предварительно рассчитать эти значения с использованием оптимизированного алгоритма. , Что-то вроде триангуляции Делоне или Питтеуэя , где каждая точка в цели связана с ее ближайшими соседями. Сохраните их в таблице, затем найдите их для каждой точки, пытаясь подогнать исходный треугольник к одному из целевых треугольников.
Требуется много вычислений, но они должны быть относительно быстрыми, так как они работают только с данными, которые являются редкими, вместо умножения большого количества бессмысленных нулей вместе, как может потребоваться взаимная корреляция объемных данных. Эта же идея будет работать для 2D-случая, если вы сначала нашли центры точек и сохранили их как набор координат.
источник
Fortran
чисел, превышающих500
баллы, невозможно иметь опыт работы с ПК.Я бы добавил @ mirror2image описание альтернативного решения, кроме RANSAC, вы можете рассмотреть алгоритм ICP (итеративная ближайшая точка), описание можно найти здесь !
Я думаю, что следующая проблема в использовании этого ICP состоит в том, чтобы определить вашу собственную функцию стоимости и начальную позу целевой плоскости относительно данных трехмерной точки облачности. Некоторый практический подход заключается во введении некоторого случайного шума в данные во время итерации, чтобы избежать сближения с ложными минимумами. Это эвристическая часть, я думаю, вам нужно разработать.
Обновить:
Этапы в упрощенном виде это:
Повторите шаг 1-4.
Есть доступная библиотека, которую вы можете рассмотреть здесь ! (Я еще не пробовал), есть один раздел по части регистрации (включая другие методы).
источник