Библиотека облаков точек
Эта статья может чрезмерно полагаться на источники, слишком тесно связанные с предметом , что потенциально препятствует тому, чтобы статья была проверяемой и нейтральной . ( Октябрь 2014 г. ) |
Оригинальный автор(ы) | Ивовый гараж |
---|---|
Первоначальный выпуск | март 2010 г [ 1 ] [ 2 ] |
Стабильная версия | |
Репозиторий | |
Операционная система | Кросс-платформенный |
Тип | Библиотека |
Лицензия | Лицензия BSD |
Веб-сайт | облака точек |
Библиотека облаков точек ( PCL ) — это с открытым исходным кодом библиотека алгоритмов для задач обработки облаков точек и обработки трехмерной геометрии , например, возникающих в трехмерном компьютерном зрении . Библиотека содержит алгоритмы фильтрации, оценки признаков, реконструкции поверхности, 3D-регистрации , [ 5 ] подбор модели , распознавание объектов и сегментация . Каждый модуль реализован как небольшая библиотека, которую можно скомпилировать отдельно (например, libpcl_filters, libpcl_features, libpcl_surface, ...). PCL имеет собственный формат данных для хранения облаков точек — PCD (Point Cloud Data), но также позволяет загружать и сохранять наборы данных во многих других форматах. Он написан на C++ и выпущен под лицензией BSD .
Эти алгоритмы использовались, например, для восприятия в робототехнике , чтобы фильтровать выбросы из зашумленных данных, сшивать вместе трехмерные облака точек , сегментировать соответствующие части сцены, извлекать ключевые точки и вычислять дескрипторы для распознавания объектов в мире на основе их геометрического внешнего вида. создавать поверхности из облаков точек и визуализировать их. [ 6 ] [ не удалось пройти проверку ]
Для работы PCL требуется несколько сторонних библиотек, которые необходимо установить. Большинство математических операций реализовано с использованием библиотеки Eigen . Модуль визуализации 3D облаков точек основан на VTK . Boost используется для общих указателей, а библиотека FLANN — для быстрого поиска k-ближайших соседей. Дополнительные библиотеки, такие как Qhull, OpenNI или Qt, являются необязательными и расширяют PCL дополнительными функциями.
PCL — это кроссплатформенное программное обеспечение , работающее на наиболее часто используемых операционных системах : Linux , Windows , macOS и Android . Библиотека полностью интегрирована с операционной системой робота (ROS) и обеспечивает поддержку библиотек OpenMP и Intel Threading Building Blocks (TBB) для многоядерного параллелизма . [ 7 ] [ 8 ]
Библиотека постоянно обновляется и расширяется, а ее использование в различных отраслях постоянно растет. Например, PCL участвовала в инициативе Google Summer of Code 2020 с тремя проектами. Одним из них было расширение PCL для использования с Python с использованием Pybind11. [ 9 ]
На веб-сайте PCL доступно большое количество примеров и учебных пособий либо в виде исходных файлов C++, либо в виде учебных пособий с подробным описанием и объяснением отдельных шагов.
Приложения
[ редактировать ]Библиотека облаков точек широко используется во многих различных областях, вот несколько примеров:
- сшивка 3D-облаков точек вместе
- распознавать 3D-объекты по их геометрическому виду
- фильтрация и сглаживание зашумленных данных
- создавать поверхности из облаков точек
- выравнивание ранее захваченной модели объекта с некоторыми вновь захваченными данными
- распознавание кластеров и 6DoF оценка положения
- потоковая передача облака точек на мобильные устройства с визуализацией в реальном времени
сторонние библиотеки
[ редактировать ]PCL требует для установки нескольких сторонних библиотек, которые перечислены ниже. Некоторые библиотеки являются необязательными и расширяют PCL дополнительными функциями. Библиотека PCL собирается с помощью системы сборки CMake ( http://www.cmake.org/ ), по крайней мере, в версии 3.5.0. [ 10 ] [ 8 ]
Обязательные библиотеки:
- Boost ( http://www.boost.org/ ) не ниже версии 1.46.1. Этот набор библиотек C++ используется для потоковой обработки и в основном для общих указателей, поэтому нет необходимости повторно копировать данные, которые уже есть в системе.
- Eigen ( http://eigen.tuxfamily.org/ ) требуется как минимум в версии 3.0.0. Это библиотека шаблонов с открытым исходным кодом для линейной алгебры (матрицы, векторы). Большинство математических операций ( оптимизированных SSE ) в PCL реализованы с помощью Eigen.
- ФЛАНН ( http://www.cs.ubc.ca/research/flann/ ) в версии 1.6.8 или выше. Это библиотека, которая выполняет быстрый приблизительный поиск ближайших соседей в многомерных пространствах. В PCL это особенно важно в модуле kdtree для быстрых операций поиска k-ближайших соседей.
- VTK — Visualization ToolKit ( http://www.vtk.org/ ) не ниже версии 5.6.1. Мультиплатформенный программный комплекс для рендеринга 3D облака точек, моделирования, обработки изображений, объемного рендеринга. Используется в модуле визуализации для рендеринга и визуализации облаков точек.
Дополнительные библиотеки, которые включают некоторые дополнительные функции:
- QHULL в версии >= 2011.1 ( http://www.qhull.org/ ) реализует вычисления выпуклой оболочки, триангуляции Делоне, диаграммы Вороного и т. д. В PCL он используется для разложения выпуклой/вогнутой оболочки на поверхности.
- OpenNI версии >= 1.1.0.25 ( http://www.openni.org/ ) предоставляет единый унифицированный интерфейс для датчиков глубины. Он используется для получения облаков точек с устройств.
- Qt Версия >= 4.6 ( https://www.qt.io/ ) — это кроссплатформенная среда C++, используемая для разработки приложений с графическим пользовательским интерфейсом (GUI).
- Googletest версии >= 1.6.0 ( http://code.google.com/p/googletest/ ) — это среда тестирования C++. В PCL он используется для создания тестовых модулей.
Формат файла PCD
[ редактировать ]PCD данные ( облака точек ) — это формат файла для хранения данных трехмерного облака точек. Он был создан потому, что существующие форматы не поддерживали некоторые функции библиотеки PCL. PCD — основной формат данных в PCL, но библиотека также предлагает возможность сохранять и загружать данные в других форматах (таких как PLY, IFS, VTK, STL, OBJ, X3D). Однако эти другие форматы не обладают гибкостью и скоростью файлов PCD. Одним из преимуществ PCD является возможность хранить и обрабатывать организованные наборы данных облаков точек. Другой — очень быстрое сохранение и загрузка точек, которые хранятся в двоичной форме. [ 11 ] [ 12 ]
Версии
[ редактировать ]Версия PCD указывается цифрами 0.x (например, 0,5, 0,6 и т. д.) в заголовке каждого файла. Официальная версия 2020 года — PCD 0.7 ( PCD_V7 ). Основное отличие от версии 0.6 заключается в том, что добавлен новый заголовок - VIEWPOINT. Он задает информацию об ориентации датчика относительно набора данных. [ 13 ]
Структура файла
[ редактировать ]Файл PCD разделен на две части: заголовок и данные . Заголовок имеет точно определенный формат и содержит необходимую информацию о хранящихся в нем данных облака точек. Заголовок должен быть закодирован в ASCII, однако данные могут храниться в ASCII или двоичном формате. Благодаря тому, что формат ASCII более удобен для чтения человеком, его можно открыть стандартными программными средствами и легко редактировать.
В версии 0.7 версия файла PCD находится в начале заголовка, за которым следуют имя , размер и тип каждого измерения хранимых данных. Он также показывает количество точек ( высота * ширина ) во всем облаке и информацию о том, является ли набор данных облака точек организованным или неорганизованным. Тип данных указывает, в каком формате хранятся данные облака точек (ASCII или двоичный). За заголовком следует набор точек. Каждая точка может храниться на отдельной строке (неорганизованное облако точек) или в виде организованной структуры, подобной изображению (организованное облако точек). [ 11 ] Более подробную информацию о записях заголовка можно найти в документации . Ниже приведен пример файла PCD. Порядок записей заголовка важен!
# .PCD v.7 - Point Cloud Data file format VERSION .7 FIELDS x y z rgb SIZE 4 4 4 4 TYPE F F F F COUNT 1 1 1 1 WIDTH 213 HEIGHT 1 VIEWPOINT 0 0 0 1 0 0 0 POINTS 213 DATA ascii 0.93773 0.33763 0 4.2108e+06 0.90805 0.35641 0 4.2108e+06 0.81915 0.32 0 4.2108e+06 0.97192 0.278 0 4.2108e+06 ... ...
История
[ редактировать ]Разработка библиотеки облаков точек началась в марте 2010 года в Willow Garage . Первоначально проект располагался на субдомене Willow Garage, а затем в марте 2011 года переехал на новый веб-сайт www.pointclouds.org. [ 1 ] Первый официальный выпуск PCL (версия 1.0) был выпущен двумя месяцами позже, в мае 2011 года. [ 2 ]
Модули
[ редактировать ]PCL разделен на несколько меньших библиотек кода, которые можно скомпилировать отдельно. Ниже описаны некоторые наиболее важные модули и их функции. [ 14 ] [ 15 ]
Фильтры
[ редактировать ]При сканировании 3D-облака точек могут возникать ошибки и различные отклонения, что вызывает шум в данных. Это усложняет оценку некоторых локальных характеристик облака точек, таких как нормали к поверхности. Эти неточности могут привести к существенным ошибкам при дальнейшей обработке, поэтому их желательно удалять с помощью подходящего фильтра. Библиотека pcl_filters предоставляет несколько полезных фильтров для удаления выбросов и шума, а также для понижения частоты дискретизации данных. Некоторые из них используют простые критерии для обрезки баллов, другие используют статистический анализ.
- Фильтр PassThrough – используется для фильтрации точек в одном выбранном измерении. Это означает, что он может отсекать точки, выходящие за пределы заданного пользователем диапазона.
- Фильтр VoxelGrid — создает сетку вокселей в облаке точек. Затем точки внутри каждого вокселя аппроксимируются их центроидом. Это приводит к даундискретизации (уменьшению количества точек) в данных облака точек.
- Фильтр StatisticalOutlierRemoval . Он удаляет шум из набора данных облака точек, используя методы статистического анализа, применяемые к окрестностям каждой точки, и обрезает все точки, средние расстояния которых находятся за пределами определенного интервала.
- Фильтр RadiusOutlierRemoval — удаляет те точки, у которых количество соседей в заданной окрестности меньше выбранного.
Функции
[ редактировать ]Библиотека pcl_features содержит алгоритмы и структуры данных для трехмерных объектов оценки . Чаще всего используемые локальные геометрические характеристики — это нормаль к точке и предполагаемая кривизна подстилающей поверхности. Характеристики описывают геометрические закономерности в определенной точке на основе выбранной k-окрестности (пространства данных, выбранного вокруг точки). Окрестность можно выбрать, определив фиксированное количество точек в ближайшей области или определив радиус сферы вокруг точки.
Одним из самых простых реализуемых методов оценки нормали к поверхности является анализ собственных векторов и собственных значений ковариационной матрицы, созданной из окрестности точки. Дескрипторы гистограмм точечных объектов (или более быстрые FPFH) представляют собой расширенное представление объектов и зависят от нормальных оценок в каждой точке. Он обобщает среднюю кривизну вокруг точки, используя многомерную гистограмму значений. Некоторые из других дескрипторов в библиотеке — это дескриптор гистограммы характеристик точки обзора (VFH), дескрипторы NARF, дескрипторы на основе момента инерции и эксцентриситета, дескрипторы глобально выровненного пространственного распределения (GASD) и другие.
Сегментация
[ редактировать ]Библиотека pcl_segmentation содержит алгоритмы сегментации облака точек на разные кластеры. Кластеризация часто используется для разделения облака на отдельные части, которые можно подвергать дальнейшей обработке. Реализовано несколько классов, поддерживающих различные методы сегментации:
- Сегментация плоской модели — простой алгоритм, который находит все точки, поддерживающие плоскую модель, в облаке точек.
- Евклидова кластеризация — создает кластеры точек на основе евклидова расстояния.
- Условная евклидова кластеризация — точки кластеризации на основе евклидова расстояния и заданного пользователем условия.
- Сегментация роста региона - объединяйте точки, которые достаточно близки с точки зрения ограничения гладкости.
- Сегментация роста региона на основе цвета — та же концепция, что и при росте региона, но вместо нормалей используется цвет.
- Бинарная сегментация на основе Min-Cut — делит облако на передний и фоновый наборы точек.
- Разница сегментации на основе нормалей - сегментация на основе шкалы, поиск точек, которые принадлежат заданным параметрам шкалы.
- Супервоксельная кластеризация — генерирует объемную чрезмерную сегментацию данных трехмерного облака точек.
Визуализация
[ редактировать ]Библиотека pcl_visualization используется для быстрой и простой визуализации данных трехмерного облака точек. Пакет использует библиотеку VTK для 3D-рендеринга облаков и изображений дальностей. Библиотека предлагает:
- Класс CloudViewer предназначен для простой визуализации облака точек.
- RangeImageVisualizer можно использовать для визуализации изображения диапазона в виде трехмерного облака точек или изображения, цвета которого соответствуют значениям диапазона.
- PCLVisualizer — это класс визуализации с несколькими приложениями. Он может отображать как простое облако точек, так и облако точек, содержащее цветовые данные. В отличие от CloudViewer, он также может отображать интересную информацию об облаках точек, такую как нормали, основные кривизны и геометрии. Он может отображать несколько облаков точек рядом, чтобы их можно было легко сравнивать, или рисовать различные примитивные формы (например, цилиндры, сферы, линии, многоугольники и т. д.) либо из наборов точек, либо из параметрических уравнений.
- Класс PCLPlotter используется для удобного построения графиков, от полиномиальных функций до гистограмм. Он может обрабатывать различные типы входных данных графика (координаты, функции) и выполнять автоматическую раскраску.
- PCLHistogramVisualizer — модуль визуализации гистограмм для 2D-графиков.
Регистрация
[ редактировать ]Регистрация — это проблема согласования различных наборов данных облаков точек, полученных из разных представлений, в единую модель облака точек. Библиотека pcl_registration реализует ряд алгоритмов регистрации облаков точек как для организованных, так и для неорганизованных наборов данных. Задача — выявить соответствующие точки между наборами данных и найти преобразование, минимизирующее их расстояние.
Итерационный алгоритм ближайшей точки минимизирует расстояния между точками двух облаков точек. Его можно использовать для определения того, является ли одно облако точек просто жесткой трансформацией другого. Преобразование нормального распределения (NDT) — это алгоритм регистрации, который можно использовать для определения жесткого преобразования между двумя облаками точек, имеющими более 100 000 точек.
Образец консенсуса
[ редактировать ]Библиотека sample_consensus содержит методы SAmple Consensus (SAC), такие как RANSAC, и модели для обнаружения конкретных объектов в облаках точек. Некоторые из моделей, реализованных в этой библиотеке, включают модели плоскостей, которые часто используются для обнаружения внутренних поверхностей, таких как стены и полы. Следующие модели — это линии, 2D и 3D круги в плоскости, сфере, цилиндре, конусе, модель определения линии, параллельной заданной оси, модель определения плоскости, перпендикулярной заданной пользователем оси, плоскость, параллельная заданной оси. определяемая пользователем ось и т. д. Их можно использовать для обнаружения объектов с общей геометрической структурой (например, установка модели цилиндра на кружку).
Надежные образцы консенсусных оценок, доступные в библиотеке:
- SAC_RANSAC — консенсус случайного образца SAmple
- SAC_LMEDS — наименьшая медиана квадратов
- SAC_MSAC — консенсус SAmple M-оценщика
- SAC_RRANSAC — рандомизированный RANSAC
- SAC_RMSAC — рандомизированный MSAC
- SAC_MLESAC — максимальная оценка правдоподобия, консенсус SAmple
- SAC_PROSAC - PROgressive SAmple Consensus
Поверхность
[ редактировать ]Несколько алгоритмов реконструкции поверхности трехмерных облаков точек реализованы в библиотеке pcl_surface . Существует несколько способов восстановления поверхности. Одним из наиболее часто используемых является создание сетки, а в библиотеке PCL есть два алгоритма: очень быстрая триангуляция исходных точек и более медленное создание сети, которое также сглаживает и заполняет дыры. Если облако зашумлено, целесообразно использовать сглаживание поверхности с помощью одного из реализованных алгоритмов.
Метод реконструкции поверхности методом скользящих наименьших квадратов (MLS) — это алгоритм повторной выборки, который может восстанавливать недостающие части поверхности. Благодаря полиномиальной интерполяции более высокого порядка между окружающими точками данных MLS может исправлять и сглаживать небольшие ошибки, вызванные сканированием.
Жадная проекционная триангуляция реализует алгоритм быстрой триангуляции поверхности на неупорядоченном облаке точек с нормалями. В результате получается треугольная сетка, созданная путем проецирования локальной окрестности точки вдоль нормали точки. Лучше всего это работает, если поверхность локально гладкая и имеются плавные переходы между областями с разной плотностью точек. Можно задать множество параметров, которые учитываются при соединении точек (сколько ищется соседей, максимальное расстояние для точки, минимальный и максимальный угол треугольника).
В библиотеке также реализованы функции создания вогнутого или выпуклого полигона оболочки для плоской модели, алгоритм реконструкции поверхности проекции Grid, марширующие кубы , с отсечкой ушей алгоритм триангуляции реконструкции поверхности Пуассона , алгоритм и др.
ввод/вывод
[ редактировать ]io_library . позволяет загружать и сохранять облака точек в файлы, а также захватывать облака с различных устройств Он включает в себя функции, которые позволяют объединять точки двух разных облаков точек с одинаковым типом и количеством полей. Библиотека также может объединять поля (например, размеры) двух разных облаков точек с одинаковым количеством точек.
Начиная с PCL 1.0, библиотека предлагает новый универсальный интерфейс захвата, который обеспечивает легкий доступ к различным устройствам и форматам файлов. Первыми устройствами, поддерживавшими сбор данных, были камеры, совместимые с OpenNI (тестировались с Primesense Reference Design , Microsoft Kinect и камерами Asus Xtion Pro ). Начиная с PCL 1.7 , данные облака точек также можно получить из системы Velodyne High Definition LiDAR (HDL), которая создает облака точек на 360 градусов. PCL поддерживает как оригинальные HDL-64e, так и HDL-32e . Также имеется новый драйвер для камер Dinast (проверено с IPA-1110 , Cyclopes II и IPA-1002 ng T-Less NG ). PCL 1.8 обеспечивает поддержку камер IDS-Imaging Ensenso , DepthSense камер (например, Creative Senz3D , DepthSense DS325 ) и davidSDK сканеров .
КдТри
[ редактировать ]Библиотека pcl_kdtree предоставляет структуру данных kd-tree для организации набора точек в пространстве с k измерениями. Используется для поиска K ближайших соседей (с использованием FLANN) определенной точки или местоположения.
Октри
[ редактировать ]Библиотека pcl_octree реализует иерархическую древовидную структуру данных окта- дерева для данных облака точек. Библиотека предоставляет алгоритмы поиска ближайших соседей, такие как «Соседи в пределах поиска вокселей», «K поиска ближайших соседей» и «Соседи в радиусе поиска». Существует также несколько типов октодеревьев, которые различаются свойствами листового узла. Каждый листовой узел может содержать одну точку или список индексов точек, либо не хранить никакой информации о точках. Библиотеку также можно использовать для обнаружения пространственных изменений между несколькими неорганизованными облаками точек путем рекурсивного сравнения древовидных структур октетов.
Поиск
[ редактировать ]Библиотека pcl_search реализует методы поиска ближайших соседей с использованием различных структур данных, которые можно найти в других модулях, таких как KdTree, Octree, или специализированный поиск по организованным наборам данных.
Изображение диапазона
[ редактировать ]Библиотека range_image содержит два класса для представления и работы с изображениями диапазона, значения пикселей которых представляют расстояние от датчика. Изображение дальности можно преобразовать в облако точек, если указано положение датчика или из него можно извлечь границы.
Ключевые моменты
[ редактировать ]Библиотека pcl_keypoints содержит реализации алгоритмов обнаружения ключевых точек облака точек (детектор угловых точек AGAST, детектор Харриса , детектор BRISK и т. д.).
Общий
[ редактировать ]Библиотека pcl_common содержит основные структуры данных для облака точек, типы для представления точек, нормали поверхности, значения цвета RGB и т. д. Также реализованы полезные методы для вычисления расстояний, средних значений и ковариации, геометрических преобразований и многого другого. Общая библиотека в основном используется другими модулями PCL.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Б. Русу, Раду (28 марта 2011 г.). «PointClouds.org: новый дом для библиотеки облаков точек (PCL)» . Ивовый гараж . Проверено 26 ноября 2012 г.
- ^ Перейти обратно: а б «ПКЛ 1.0!» . ПКЛ. 12 мая 2011 года . Проверено 24 мая 2013 г. Архивировано 6 января 2020 г. в Wayback Machine.
- ^ «Выпуск 1.14.1» . Проверено 4 мая 2024 г.
- ^ «Релизы · PointCloudLibrary/PCL» . Гитхаб .
- ^ Хольц, Дирк; Ичим, Александру Э.; Томбари, Федерико; Русу, Раду Б.; Бенке, Свен (2015). «Регистрация в библиотеке облаков точек: модульная структура для выравнивания в 3D» . Журнал IEEE Robotics Automation . 22 (4): 110–124. дои : 10.1109/MRA.2015.2432331 . S2CID 2621807 .
- ^ Операционная система робота: http://www.ros.org/wiki.
- ^ Се, К. (2012). «Эффективная разработка регистрации 3D-поверхностей с помощью Point Cloud Library (PCL)» . 2012 Международный симпозиум по интеллектуальным системам обработки сигналов и связи . стр. 729–734. дои : 10.1109/ISPACS.2012.6473587 . ISBN 978-1-4673-5082-2 . S2CID 5449026 .
- ^ Перейти обратно: а б Русу, РБ; Казинс, С. (2011). «3D уже здесь: Библиотека облаков точек (PCL)» . 2011 Международная конференция IEEE по робототехнике и автоматизации . стр. 1–4. дои : 10.1109/ICRA.2011.5980567 . ISBN 978-1-61284-386-5 . S2CID 206849822 .
- ^ «Google Лето кода 2020» . Библиотека облаков точек . Проверено 9 ноября 2020 г.
- ^ «Создание зависимостей PCL из исходного кода в Windows — документация по библиотеке облаков точек 0.0» . pcl.readthedocs.io . Проверено 2 ноября 2020 г.
- ^ Перейти обратно: а б «Формат файла PCD (данные облака точек) — документация по библиотеке облаков точек 0.0» . pcl.readthedocs.io . Проверено 2 ноября 2020 г.
- ^ «Формат файла PCD (данные облака точек) — документация по библиотеке облаков точек 0.0» .
- ^ «Библиотека облаков точек (PCL): справочник классов pcl::PCDReader» . pointclouds.org . Проверено 2 ноября 2020 г.
- ^ «Прохождение PCL — документация по библиотеке облаков точек 0.0» . pcl.readthedocs.io . Проверено 3 ноября 2020 г.
- ^ «Введение — документация по библиотеке облаков точек 0.0» . pcl.readthedocs.io . Проверено 4 ноября 2020 г.