Библиотека облаков точек, надежная регистрация двух облаков точек
мне нужно найти разницу преобразования и вращения между двумя 3D-облаками точек. Для этого я смотрю на PCL, так как он кажется идеальным.
на чистых тестовых данных у меня есть итеративная ближайшая точка, но дающая странные результаты (хотя я, возможно, реализовал ее неправильно...)
У меня pcl::estimateRigidTransformation
работает, и это кажется лучше, хотя я предполагаю, что будет иметь дело с шумными данными.
мой вопрос:
два облака будут шумными, и хотя они должны содержать одни и те же пункты, будут некоторые расхождения. Каков наилучший способ справиться с этим?
должен ли я найти соответствующие функции в двух облаках, чтобы начать, а затем использовать estimateTransform
? Или я должен смотреть на RANSAC
функция для удаления выбросов? Is ICP
лучше, чем estimateRigidTransform
?
3 ответов
настройка надежного алгоритма регистрации облака точек может быть сложной задачей с различными вариантами, гиперпараметрами и методами, которые должны быть установлены правильно для получения сильных результатов.
на Библиотека Облака Точек поставляется с целым набором функций preimplemented для решения такого рода задач. Единственное, что осталось сделать, это понять, что делает каждый блок, а затем настроить так называемый конвейер ICP, состоящий из этих блоков, уложенных на друг с другом.трубопровод ICP может следовать по двум различным путям:
1. Итеративный алгоритм регистрации
более простой путь начинается сразу же, применяя итеративный алгоритм ближайшей точки на входном облаке (IC), чтобы вычислить его с фиксированным эталонным облаком (RC), всегда используя метод ближайшей точки. ICP принимает оптимистическое предположение о том, что два точечных облака достаточно близки (хороший Приор вращения R и перевода T) и регистрация будет осуществляться без дальнейшего первоначального согласования.
этот путь, конечно, может застрять в локальном минимуме и поэтому работать очень плохо, поскольку он склонен обманываться любыми неточностями в данных входных данных.
2. Алгоритм регистрации на основе функций
чтобы преодолеть это, люди работали над разработкой всевозможных методов и идей для преодоления плохой регистрации. В отличие от просто итеративного алгоритм регистрации функция на основе регистрации первых шин, чтобы найти более высокий рычаг соответствия между двумя облаками точек, чтобы ускорить процесс и повысить точность. Методы капсулируются, а затем внедренных в регистрационной транспортировки нефти, чтобы сформировать полную модель регистрации.
следующее изображение из документация PCL показывает такой конвейер регистрации:
как вы можете видеть попарная регистрация должна выполняться через различные вычислительные шаги для наилучшей работы. Одиночные шаги являются следующими:
сбор данных: в алгоритм вводится входное облако и эталонное облако.
-
Оценка Ключевых Точек: характерные точки (интерес) - это точка в облаке точек, которая имеет следующие характеристики:
- он имеет четкую, желательно математически обоснованное определение,
- он имеет четко определенное положение в пространстве изображения,
- локальная структура изображения вокруг точки интереса богата с точки зрения локального информационного содержания
такие заметные точки в облаке точек настолько полезны, потому что сумма их характеризует облако точек и помогает сделать различные его части различимыми.
pcl::NarfKeypoint pcl::ISSKeypoint3D< PointInT, PointOutT, NormalT > pcl::HarrisKeypoint3D< PointInT, PointOutT, NormalT > pcl::HarrisKeypoint6D< PointInT, PointOutT, NormalT > pcl::SIFTKeypoint< PointInT, PointOutT > pcl::SUSANKeypoint< PointInT, PointOutT, NormalT, IntensityT >
Подробная Информация: ключевая точка PCL - Документация
-
описание ключевых точек-дескрипторы функций: после обнаружения ключевых точек мы продолжаем вычислять дескриптор для каждого из них. - Локальный дескриптор-компактное представление локальной окрестности точки. В отличие от глобальных дескрипторов, описывающих полный объект или облако точек, локальные дескрипторы пытаются напоминать форму и внешний вид только в локальной окрестности вокруг точки и, таким образом, очень подходят для представление его в терминах соответствия."(Dirk Holz et al.)
pcl::FPFHEstimation< PointInT, PointNT, PointOutT > pcl::NormalEstimation< PointInT, PointOutT > pcl::NormalEstimationOMP< PointInT, PointOutT > pcl::OURCVFHEstimation< PointInT, PointNT, PointOutT > pcl::PrincipalCurvaturesEstimation< PointInT, PointNT, PointOutT > pcl::IntensitySpinEstimation< PointInT, PointOutT >
подробная информация: PCL особенности-документация
-
Оценка Переписки: следующая задача-найти соответствия между ключевыми точками, найденными в облаках точек. Обычно можно воспользоваться вычисленными локальными дескрипторами характеристик и сопоставить каждый из них со своим соответствующим аналогом в другом облаке точек. Однако из-за того, что два сканирования из аналогичной сцены не обязательно имеют одинаковое количество дескрипторов функций, поскольку одно облако может иметь больше данных, чем другое, нам нужно запустить отдельный процесс отклонения корреспонденции.
pcl::registration::CorrespondenceEstimation< PointSource, PointTarget, Scalar > pcl::registration::CorrespondenceEstimationBackProjection< PointSource, PointTarget, NormalT, Scalar > pcl::registration::CorrespondenceEstimationNormalShooting< PointSource, PointTarget, NormalT, Scalar >
-
отказ от переписки: один из наиболее распространенных подходов к выполнению отклонения корреспонденции-использование RANSAC (Консенсус Случайной Выборки). Но PCL поставляется с большим количеством алгоритмов отклонения что стоит давать им поближе:
pcl::registration::CorrespondenceRejectorSampleConsensus< PointT > pcl::registration::CorrespondenceRejectorDistance pcl::registration::CorrespondenceRejectorFeatures::FeatureContainer< FeatureT > pcl::registration::CorrespondenceRejectorPoly< SourceT, TargetT >
подробная информация: Регистрация модуля PCL-документация
-
Оценка Трансформации: после вычисления надежных соответствий между двумя облаками точек алгоритм абсолютной ориентации используется для вычисления преобразования 6DOF (6 степеней свободы), которое применяется на входном облаке, чтобы соответствовать облаку опорной точки. Есть много разных алгоритмические подходы для этого, однако PCL включает реализацию, основанную на Разложение Сингулярных Значений(SVD). Вычисляется матрица 4x4, которая описывает вращение и перевод, необходимые для соответствия облакам точек.
pcl::registration::TransformationEstimationSVD< PointSource, PointTarget, Scalar >
подробная информация: Регистрация модуля PCL-документация
читайте далее:
Если ваши облака шумные и ваше начальное выравнивание не очень хорошо, забудьте о применении ICP с самого начала. Попробуйте получить точки на облаках, а затем оценить возможности этих точек. Вы можете протестировать различные алгоритмы ключевых точек/функций и выбрать тот, который работает лучше для вашего случая.
затем вы можете сопоставить эти функции и получить соответствия. Отфильтруйте эти соответствия в цикле RANSAC, чтобы получить выбросы, которые вы будете использовать для получения первоначальная трансформация. CorrespondenceRejectorSampleConsensus
поможет вам в этом шаге.
после применения этого преобразования вы можете использовать ICP для окончательного уточнения.
конвейер что-то вроде:
- обнаружение keypoins в обоих облаках точек
- оценить особенности этих точек
- функции Match и получение корреспонденции
- удалить дубликаты и применить цикл RANSAC-ish, чтобы получить inliers
- получить начальное преобразование и применить к одной точке облака
- как только оба облака изначально выровнены, примените регистрацию ICP для уточнения
Примечание: этот конвейер полезен только в том случае, если оба облака точек находятся в одном масштабе. В другом случае необходимо рассчитать масштабный коэффициент между облаками.
вы можете использовать super 4pcs для глобальной регистрации. ICP-это локальный метод, такой как градиентный спуск, который зависит от начального ответа.
подробнее: http://geometry.cs.ucl.ac.uk/projects/2014/super4PCS/