Обобщённый класс для вычисления центроида переданных ему точек. Подробнее...
#include <pcl/common/centroid.h>
Общедоступные функции-члены | |
| CentroidPoint ()=default | |
| void | add (const PointT &point) |
| Добавляет новую точку для вычисления центроида. Подробнее... |
|
| template<typename PointOutT > | |
| void | get (PointOutT &point) const |
| Возвращает текущий центроид. Подробнее... |
|
| std::size_t | getSize () const |
| Возвращает общее количество добавленных точек. Подробнее... |
|
Подробное описание
template<typename PointT>
class pcl::CentroidPoint< PointT >
Обобщённый класс для вычисления центроида переданных ему точек.
Здесь под «центроидом» понимается не только среднее значение координат трёхмерных точек, но и средние значения в других полях данных. Универсальная функция computeNDCentroid() также реализует эту функциональность, однако делает это «вслепую»: независимо от семантики данных в поле она просто усредняет значения. В некоторых случаях (например, для полей x, y, z, intensity) такое поведение разумно, однако в других случаях (например, для полей rgb, rgba, label) оно не приводит к осмысленным результатам.
Этот класс позволяет вычислять центроид «разумным» способом, то есть с учётом смысла данных в полях. В настоящее время поддерживаются следующие поля:
| Данные | Поля точки | Алгоритм |
|---|---|---|
| XYZ |
x, y, z |
Среднее значение (отдельно для каждого поля) |
| Нормаль |
normal_x, normal_y, normal_z |
Среднее значение (отдельно для каждого поля), результирующий вектор нормализуется |
| Кривизна |
curvature |
Среднее значение |
| Цвет |
rgb или rgba |
Среднее значение (отдельно для каналов R, G, B и альфа-канала) |
| Интенсивность |
intensity |
Среднее значение |
| Метка |
label |
Голосование большинством; если несколько меток имеют одинаковую наибольшую поддержку, выбирается метка с меньшим значением |
Параметр шаблона задаёт тип точек, которые можно накапливать с помощью этого класса. Это может быть произвольный тип точки PCL; центроид будет вычисляться только для присутствующих в нём поддерживаемых полей.
Текущий центроид можно получить в любой момент с помощью get(). Обратите внимание, что функция является шаблонной по типу точки, поэтому центроид можно получить в переменную типа точки, отличного от типа накапливаемых точек. Все «дополнительные» поля, для которых центроид не вычисляется, останутся без изменений.
Пример использования:
// Create and accumulate points CentroidPoint<pcl::PointXYZ> centroid; centroid.add (pcl::PointXYZ (1, 2, 3); centroid.add (pcl::PointXYZ (5, 6, 7); // Fetch centroid using `get()` pcl::PointXYZ c1; centroid.get (c1); // The expected result is: c1.x == 3, c1.y == 4, c1.z == 5 // It is also okay to use `get()` with a different point type pcl::PointXYZRGB c2; centroid.get (c2); // The expected result is: c2.x == 3, c2.y == 4, c2.z == 5, // and c2.rgb is left untouched pcl::PointXYZA point structure representing Euclidean xyz coordinates.Definition: point_types.hpp:322 pcl::PointXYZ A point structure representing Euclidean xyz coordinates. Definition: point_types.hpp:322 pcl::PointXYZRGBA point structure representing Euclidean xyz coordinates, and the RGB color.Definition: point_types.hpp:594 pcl::PointXYZRGB A point structure representing Euclidean xyz coordinates, and the RGB color. Definition: point_types.hpp:594
- Примечание
- Предполагается, что добавляемые точки являются допустимыми.
- Этот шаблон класса можно успешно инстанцировать для любого типа точки PCL. Разумеется, среднее значение для каждого поля вычисляется только в том случае, если тип точки содержит соответствующее поле.
Определение в строке 1076 файла centroid.h.
Документация конструктора и деструктора
CentroidPoint()
| default |
Документация функций-членов
add()
| void pcl::CentroidPoint< PointT >::add | ( | const PointT & | point | ) |
Добавляет новую точку для вычисления центроида.
Эта функция обновляет только аккумуляторы и счётчик точек; фактическое вычисление центроида происходит при вызове get().
Определение в строке 1164 файла centroid.hpp.
Используется в pcl::VoxelGrid< PointT >::applyFilter().
get()
| void pcl::CentroidPoint< PointT >::get | ( | PointOutT & | point | ) | const |
Возвращает текущий центроид.
В этой функции выполняются вычисления: накопленные значения делятся на количество точек и, если применимо, нормализуются. Результат не кэшируется, поэтому каждый последующий вызов этой функции приводит к повторному вычислению.
Если количество накопленных точек равно нулю, точка останется без изменений.
Определение в строке 1173 файла centroid.hpp.
Используется в pcl::VoxelGrid< PointT >::applyFilter().
getSize()
| inline |
Возвращает общее количество добавленных точек.
Определение в строке 1104 файла centroid.h.
Документация этого класса создана на основе следующих файлов:
- pcl/common/centroid.h
- pcl/common/impl/centroid.hpp
© 2009–2012, Willow Garage, Inc.
© 2012–, Open Perception, Inc.
Licensed under the BSD License.
https://pointclouds.org/documentation/classpcl_1_1_centroid_point.html