Хорошо, следующий подход может быть полезен, но он зависит от конкретных ваших данных. Он основан на предположениях о том, что зазор между соседними позициями достаточно велик (вероятно, достаточно 20 градусов), а небольшое облако точек приближается к поверхности (последнее можно преодолеть). Я предлагаю использовать локальное сопоставление функций (популярная техника в компьютерном зрении).
Во-первых, для каждой точки большого облака вы должны вычислить локальные дескрипторы (например, SIFT или SURF для изображений). Наиболее популярным для облаков точек является spin image :
Джонсон А. и Хеберт М. (1999). Использование вращающихся изображений для эффективного распознавания объектов в загроможденных трехмерных сценах. IEEE Труды по анализу образов и машинному интеллекту, 21 (5), 433–449. Citeseer. Получено из http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.23.8816&rep=rep1&type=pdf.
Здесь используется расширенная модификация:
Endres, F., Plagemann, C., Stachniss, C. & Burgard, W. (2009). Неконтролируемое обнаружение классов объектов из данных диапазона с использованием скрытого распределения Дирихле. В робототехнике: наука и системы. Сиэтл, США.
Если это будет сложно в вычислительном отношении, спросите меня, как уменьшить размерность, не теряя много в различающей способности, я сделал это однажды.
Тогда вам нужно сопоставить дескрипторы, то есть найти ближайших соседей для каждого из них в их многомерном пространстве. Если маленькое облако вращалось 3 раза, то должно быть 3 хороших ближайших соседа. Однако из-за самопересечений облаков совпадения, вероятно, будут содержать шум. Вам все еще нужно найти ось, которая хорошо подходит для большого количества совпадений (хотя и не всех). Здесь вы можете использовать некоторую надежную подгонку, например RANSAC (вы должны сделать некоторую математику, чтобы определить вероятность положения оси относительно найденных совпадений). Обратите внимание, что он отличается от методов, предложенных другими. Вы должны поместить только одну линию вместо семейства плоскостей, основываясь на дескрипторах, а не на исходных точках (RANSAC, вероятно, не сможет соответствовать плоскости, имеющей 4-5 правильных точек и отклонения в 100 000).
Также обратите внимание:
Если у вас небольшой скан, который не приближается к поверхности, вы должны придумать другой дескриптор, инвариантный к вращению, а не вращать изображения.
Чтобы вычислить нормали и выполнить поиск, вы можете проверить эту библиотеку: http://graphics.cs.msu.ru/en/science/research/3dpoint/lidark (скоро выйдет крупный выпуск).