Библиотека облаков точек - Point Cloud Library

Библиотека облаков точек
Логотип Pcl (библиотека PointClouds) с text.png
Оригинальный автор (ы)Willow Garage
изначальный выпускМарт 2010 г.; 10 лет назад (2010-03)[1][2]
Стабильный выпуск
1.11.1 / 14 августа 2020 г.; 3 месяца назад (2020-08-14)[3]
Репозиторий Отредактируйте это в Викиданных
Операционная системаКроссплатформенность
ТипБиблиотека
ЛицензияЛицензия BSD
Интернет сайтточечные облака.org

В Библиотека облаков точек (PCL) является Открытый исходный код библиотека алгоритмов для облако точек задачи обработки и 3D обработка геометрии, например, в трехмерном компьютерное зрение. Библиотека содержит алгоритмы фильтрации, оценки признаков, реконструкции поверхности, 3D регистрация[4], примерка модели, распознавание объекта, и сегментация. Каждый модуль реализован как меньшая библиотека, которую можно скомпилировать отдельно (например, libpcl_filters, libpcl_features, libpcl_surface, ...). PCL имеет собственный формат данных для хранения облаков точек - PCD (Данные облака точек), но также позволяет загружать и сохранять наборы данных во многих других форматах. Это написано в C ++ и выпущен под Лицензия BSD.

Эти алгоритмы использовались, например, для восприятие в робототехника чтобы отфильтровать выбросы из зашумленных данных, сшить 3D облака точек вместе, сегментировать соответствующие части сцены, извлекать ключевые точки и вычислять дескрипторы для распознавания объектов в мире на основе их геометрического внешнего вида, а также создавать поверхности из облаков точек и визуализировать их.[5][неудачная проверка ]

PCL требует нескольких третья сторона библиотеки для работы, которые должны быть установлены. Большинство математических операций реализованы с помощью Эйген библиотека. Модуль визуализации трехмерных облаков точек основан на VTK. Способствовать росту используется для общих указателей и Фланн библиотека для быстрого поиска k-ближайшего соседа. Дополнительные библиотеки, такие как QHULL, OpenNI, или же Qt являются необязательными и расширяют PCL дополнительными функциями.

PCL - это кроссплатформенное программное обеспечение который работает на наиболее часто используемых операционные системы: Linux, Windows, macOS и Android. Библиотека полностью интегрирована с Операционная система робота (ROS) и обеспечивает поддержку OpenMP и Intel Заправка строительных блоков (TBB) библиотеки для многоядерных параллелизм. [6][7]

Библиотека постоянно обновляется и расширяется, а ее использование в различных отраслях постоянно растет. Например, PCL участвовала в Google Summer of Code Инициатива 2020 с тремя проектами. Одним из них было расширение PCL для использования с Python используя Pybind11.[8]

На веб-сайте PCL доступно большое количество примеров и руководств либо в виде исходных файлов на C ++, либо в виде руководств с подробным описанием и объяснением отдельных шагов.

Приложения

Библиотека облаков точек широко используется во многих различных областях, вот несколько примеров:

  • сшивание трехмерных облаков точек вместе
  • распознавать 3D-объекты по их геометрическому виду
  • фильтрация и сглаживание зашумленных данных
  • создавать поверхности из облаков точек
  • согласование ранее захваченной модели объекта с некоторыми недавно захваченными данными
  • распознавание кластеров и оценка позы 6DOF
  • потоковая передача облака точек на мобильные устройства с визуализацией в реальном времени

Сторонние библиотеки

PCL требует для установки несколько сторонних библиотек, которые перечислены ниже. Некоторые библиотеки являются необязательными и расширяют PCL дополнительными функциями. Библиотека PCL построена с CMake система сборки (http://www.cmake.org/ ) как минимум в версии 3.5.0. [9][7]

Обязательные библиотеки:

  • Способствовать росту (http://www.boost.org/ ) не ниже версии 1.46.1. Этот набор библиотек C ++ используется для потоковой передачи и в основном для общих указателей, поэтому нет необходимости повторно копировать данные, которые уже есть в системе.
  • Эйген (http://eigen.tuxfamily.org/ ) требуется как минимум в версии 3.0.0. Это библиотека шаблонов с открытым исходным кодом для линейной алгебры (матриц, векторов). Большинство математических операций (SSE optimized) в PCL реализованы с помощью Eigen.
  • Фланн (http://www.cs.ubc.ca/research/flann/ ) в версии 1.6.8 или выше. Это библиотека, которая выполняет быстрый приблизительный поиск ближайшего соседа в пространствах большой размерности. В PCL это особенно важно в модуле kdtree для операций быстрого поиска k-ближайшего соседа.
  • VTK - Набор инструментов визуализации (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 (Данные облака точек) - это формат файла для хранения данных облака точек 3D. Он был создан, потому что существующие форматы не поддерживали некоторые функции, предоставляемые библиотекой PCL. PCD - это основной формат данных в PCL, но библиотека также предлагает возможность сохранять и загружать данные в других форматах (таких как PLY, IFS, VTK, STL, OBJ, X3D). Однако эти другие форматы не обладают гибкостью и скоростью файлов PCD. Одним из преимуществ PCD является возможность хранить и обрабатывать организованные наборы данных облака точек. Другой - очень быстрое сохранение и загрузка точек, которые хранятся в двоичной форме. [10][11]

Версии

Версия PCD указывается номерами 0.x (например, 0,5, 0,6 и т. Д.) В заголовке каждого файла. Официальная версия в 2020 году - PCD 0.7 (PCD_V7). Основное отличие от версии 0.6 - добавлен новый заголовок - VIEWPOINT. Он указывает информацию об ориентации датчика относительно набора данных. [12]

Файловая структура

Файл PCD разделен на две части - заголовок и данные. Заголовок имеет четко определенный формат и содержит необходимую информацию о данных облака точек, которые в нем хранятся. Заголовок должен быть закодирован в ASCII, однако данные могут храниться в ASCII или двоичном формате. Благодаря тому, что формат ASCII более удобочитаем, его можно открывать стандартными программными средствами и легко редактировать.

В версии 0.7 версия файла PCD находится в начале заголовка, за которым следует имя, размер, и тип каждого измерения хранимых данных. Он также показывает количество точек (высота*ширина) во всем облаке и информацию о том, является ли набор данных облака точек организованным или неорганизованным. В данные type указывает, в каком формате хранятся данные облака точек (ASCII или двоичный). За заголовком следует набор точек. Каждая точка может храниться в отдельной строке (неорганизованное облако точек) или в виде организованной структуры (организованное облако точек).[10] Более подробную информацию о записях заголовков можно найти в документация. Ниже приведен пример файла PCD. Порядок ввода заголовков важен!

# .PCD v.7 - Формат файла данных облака точек ВЕРСИЯ .7FIELDS xyz rgbSIZE 4 4 4 4TYPE FFF FCOUNT 1 1 1 1WIDTH 213HEIGHT 1VIEWPOINT 0 0 0 1 0 0 0POINTS 213DATA ascii0.93773 0.33763 0 4.2108e + 060805e + 060805 060,81915 0,32 0 4,2108e + 060,97192 0,278 0 4,2108e + 06 ......

История

Разработка библиотеки Point Cloud началась в марте 2010 г. Willow Garage. Первоначально проект располагался на субдомене Willow Garage, а затем в марте 2011 года переехал на новый веб-сайт www.pointclouds.org.[1] Первый официальный выпуск PCL (версия 1.0) был выпущен двумя месяцами позже, в мае 2011 года.[2]

Модули

PCL разделен на несколько небольших библиотек кода, которые можно скомпилировать отдельно. Некоторые из наиболее важных модулей и их функции описаны ниже. [13][14]

Фильтры

При сканировании трехмерного облака точек могут возникать ошибки и различные отклонения, которые вызывают шум в данных. Это усложняет оценку некоторых характеристик локального облака точек, например нормалей к поверхности. Эти неточности могут привести к значительным ошибкам при дальнейшей обработке, поэтому рекомендуется удалить их с помощью подходящего фильтра. В pcl_filters Библиотека предоставляет несколько полезных фильтров для удаления выбросов и шума, а также для понижающей дискретизации данных. Некоторые из них используют простые критерии для обрезки точек, другие используют статистический анализ.

  • Пройти через фильтр - используется для фильтрации точек в одном выбранном измерении. Это означает, что он может отсекать точки, выходящие за пределы диапазона, указанного пользователем.
  • VoxelGrid фильтр - создает сетку вокселей в облаке точек. Затем точки внутри каждого вокселя аппроксимируются их центроидом. Это приводит к понижению дискретизации (уменьшению количества точек) в данных облака точек.
  • Статистический выброс фильтр - удаляет шум из набора данных облака точек с помощью методов статистического анализа, применяемых к окрестностям каждой точки, и обрезает все точки, средние расстояния которых находятся за пределами определенного интервала.
  • RadiusOutlierRemoval фильтр - удаляет те точки, у которых меньше указанного числа соседей в заданном районе.

Функции

В pcl_features библиотека содержит алгоритмы и структуры данных для 3D особенность оценка. Наиболее часто используемые локальные геометрические элементы - это нормаль точки и расчетная кривизна подстилающей поверхности. Функции описывают геометрические узоры в определенной точке на основе выбранной k-окрестности (пространство данных, выбранное вокруг точки). Окрестность может быть выбрана путем определения фиксированного количества точек в ближайшей области или определения радиуса сферы вокруг точки.

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

Сегментация

В pcl_segmentation Библиотека содержит алгоритмы сегментирования облака точек на разные кластеры. Кластеризация часто используется для разделения облака на отдельные части, которые можно обрабатывать в дальнейшем. Реализовано несколько классов, поддерживающих различные методы сегментации:

  • Модель самолета сегментация - простой алгоритм, который находит все точки, поддерживающие модель плоскости, в облаке точек
  • Евклидово кластеризация - создает кластеры точек на основе евклидова расстояния
  • Условное евклидово кластеризация - точки кластеризации на основе евклидова расстояния и определенного пользователем условия
  • Регион растет сегментация - объединить точки, которые достаточно близки с точки зрения ограничения гладкости
  • Цветовая область выращивания сегментация - та же концепция, что и рост региона, но использует цвет вместо нормалей
  • Min-Cut основанная на двоичной сегментации - разделяет облако на передний план и набор точек фона
  • Разница норм Сегментация на основе - сегментация на основе шкалы, поиск точек, которые принадлежат заданным параметрам шкалы.
  • Супервоксел кластеризация - генерирует избыточные объемные сегменты данных трехмерного облака точек.

Визуализация

В pcl_visualization Библиотека используется для быстрой и простой визуализации данных трехмерного облака точек. Пакет использует библиотеку VTK для 3D-рендеринга облаков и изображений дальности. Библиотека предлагает:

  • В CloudViewer Класс предназначен для простой визуализации облака точек.
  • RangeImageVisualizer может использоваться для визуализации изображения диапазона в виде трехмерного облака точек или изображения, где цвета соответствуют значениям диапазона.
  • PCLVisualizer это класс визуализации с несколькими приложениями. Он может отображать как простое облако точек, так и облако точек, содержащее данные о цвете. В отличие от CloudViewer, он также может рисовать интересную информацию об облаках точек, такую ​​как нормали, основные кривизны и геометрии. Он может отображать несколько облаков точек рядом, чтобы их можно было легко сравнивать, или рисовать различные примитивные формы (например, цилиндры, сферы, линии, многоугольники и т. Д.) Либо из наборов точек, либо из параметрических уравнений.
  • PCLPlotter Класс используется для простого построения графиков, от полиномиальных функций до гистограмм. Он может обрабатывать различные типы ввода графика (координаты, функции) и автоматически раскрашивать.
  • PCLHistogramVisualizer модуль визуализации гистограмм для 2D графиков.

Постановка на учет

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

Итеративная ближайшая точка алгоритм минимизирует расстояния между точками двух точечных облаков. Его можно использовать для определения того, является ли одно PointCloud жестким преобразованием другого. Преобразование нормальных распределений (NDT) - это алгоритм регистрации, который можно использовать для определения жесткого преобразования между двумя облаками точек, имеющими более 100 000 точек.

Образец консенсуса

В sample_consensus Библиотека содержит методы SAmple Consensus (SAC), такие как RANSAC, и модели для обнаружения конкретных объектов в облаках точек. Некоторые из моделей, реализованных в этой библиотеке, включают модели плоскостей, которые часто используются для обнаружения внутренних поверхностей, таких как стены и полы. Следующие модели - это линии, 2D и 3D окружности на плоскости, сфере, цилиндре, конусе, модель для определения линии, параллельной данной оси, модель для определения плоскости, перпендикулярной указанной пользователем оси, плоскости, параллельной оси. указанная пользователем ось и т. д. Их можно использовать для обнаружения объектов с общей геометрической структурой (например, подгонка модели цилиндра к кружке).

Надежные образцы консенсус-оценок, доступные в библиотеке:

  • SAC_LMEDS - Наименьшая медиана квадратов
  • SAC_MSAC - М-оценка SAmple Consensus
  • SAC_RRANSAC - рандомизированный RANSAC
  • SAC_RMSAC - рандомизированный MSAC
  • SAC_MLESAC - Оценка максимального правдоподобия SAmple Consensus
  • SAC_PROSAC - прогрессивный SAmple Consensus

Поверхность

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

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

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

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

Ввод / вывод

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

Начиная с PCL 1.0 библиотека предлагает новый общий интерфейс граббера, который обеспечивает легкий доступ к различным устройствам и форматам файлов. Первые устройства, поддерживающие сбор данных, были OpenNI совместимые камеры (протестированы с Эталонный дизайн Primesense, Microsoft Kinect и Камеры Asus Xtion Pro). По состоянию на PCL 1.7, данные облака точек также можно получить из Velodyne High Definition LiDAR (HDL), которая создает облака точек на 360 градусов. PCL поддерживает как оригинальные HDL-64e и HDL-32e. Также есть новый драйвер для Династ Камеры (проверено с ИПА-1110, Циклоп II и IPA-1002 нг T-Less NG). PCL 1.8 обеспечивает поддержку IDS-Imaging Ensenso камеры, DepthSense камеры (например, Творческий Senz3D, DepthSense DS325), и davidSDK сканеры.

KdTree

В pcl_kdtree библиотека предоставляет kd-дерево структура данных для организации набора точек в пространстве с k измерениями. Используется для поиска K ближайших соседей (с помощью FLANN) определенной точки или местоположения.

Octree

В pcl_octree библиотека реализует октодерево иерархическая древовидная структура данных для данных облака точек. Библиотека предоставляет алгоритмы поиска ближайшего соседа, такие как «Соседи в поиске вокселов», «Поиск ближайшего соседа по K» и «Соседи в радиусе поиска». Есть также несколько типов октодерева, которые различаются свойствами своих листовых узлов. Каждый листовой узел может содержать одну точку или список индексов точек или не хранить никакой информации о точках. Библиотека также может быть использована для обнаружения пространственных изменений между несколькими неорганизованными облаками точек путем рекурсивного сравнения структур дерева октетов.

Поиск

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

Изображение диапазона

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

Ключевые точки

В pcl_keypoints библиотека содержит реализации алгоритмов обнаружения ключевых точек в облаке точек (детектор угловых точек AGAST, Детектор Харриса, Детектор BRISK и др.).

Общий

В pcl_common Библиотека содержит основные структуры данных для облака точек, типы для представления точек, нормали поверхности, значения цвета RGB и т. д. Также реализованы полезные методы для вычисления расстояний, средних значений и ковариации, геометрических преобразований и т. д. Общая библиотека в основном используется другими модулями PCL.

Рекомендации

  1. ^ а б Б. Русу, Раду (28 марта 2011 г.). "PointClouds.org: новый дом для библиотеки облаков точек (PCL)". Willow Garage. Получено 26 ноября 2012.
  2. ^ а б "PCL 1.0!". PCL. 12 мая 2011. Получено 24 мая 2013.В архиве 2020-01-06 в Wayback Machine
  3. ^ https://github.com/PointCloudLibrary/pcl/releases
  4. ^ Хольц, Дирк; Ichim, Alexandru E .; Томбари, Федерико; Русу, Раду Б .; Бенке, Свен (2015). «Регистрация в библиотеке облака точек: модульная структура для трехмерного выравнивания». Журнал IEEE Robotics Automation. 22 (4): 110–124. Дои:10.1109 / MRA.2015.2432331.
  5. ^ Операционная система робота: http://www.ros.org/wiki
  6. ^ Се, К. (2012). «Эффективная разработка 3D-регистрации поверхностей с помощью библиотеки Point Cloud Library (PCL)». 2012 Международный симпозиум по интеллектуальной обработке сигналов и системам связи: 729–734. Дои:10.1109 / ISPACS.2012.6473587.
  7. ^ а б Rusu, R. B .; Казинс, С. (2011). «3D уже здесь: библиотека Point Cloud (PCL)». 2011 Международная конференция IEEE по робототехнике и автоматизации: 1–4. Дои:10.1109 / ICRA.2011.5980567.
  8. ^ "Google Summer of Code 2020". Библиотека облаков точек. Получено 2020-11-09.
  9. ^ «Построение зависимостей PCL из исходного кода в Windows - документация Point Cloud Library 0.0». pcl.readthedocs.io. Получено 2020-11-02.
  10. ^ а б «Формат файла PCD (Point Cloud Data) - документация Point Cloud Library 0.0». pcl.readthedocs.io. Получено 2020-11-02.
  11. ^ https://pcl.readthedocs.io/projects/tutorials/en/latest/pcd_file_format.html
  12. ^ «Библиотека облаков точек (PCL): описание класса pcl :: PCDReader». pointclouds.org. Получено 2020-11-02.
  13. ^ «Пошаговое руководство по PCL - документация Point Cloud Library 0.0». pcl.readthedocs.io. Получено 2020-11-03.
  14. ^ «Введение - документация Point Cloud Library 0.0». pcl.readthedocs.io. Получено 2020-11-04.

внешняя ссылка