Общий класс, вычисляющий центр тяжести точек, поданных на вход. Подробнее...
#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 >
Общий класс, вычисляющий центр тяжести точек, поданных на вход.
Здесь под "центром тяжести" мы понимаем не только среднее арифметическое 3D-координат точек, но и среднее арифметическое значений в других полях данных. Общецелевая функция 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:351 pcl::PointXYZ A point structure representing Euclidean xyz coordinates. Definition: point_types.hpp:351 pcl::PointXYZRGBA point structure representing Euclidean xyz coordinates, and the RGB color.Definition: point_types.hpp:623 pcl::PointXYZRGB A point structure representing Euclidean xyz coordinates, and the RGB color. Definition: point_types.hpp:623
- Примечание
- Предполагает, что вставляемые точки действительны.
- Этот шаблон класса может быть успешно проинициализирован для любого типа точки PCL. Конечно, каждое из средних значений поля вычисляется только в том случае, если тип точки имеет соответствующее поле.
Определение в строке 1022 файла centroid.h.
Документация конструктора и деструктора
CentroidPoint()
| default |
Документация членов-функций
add()
| void pcl::CentroidPoint< PointT >::add | ( | const PointT & | point | ) |
Добавление новой точки в вычисление центра тяжести.
В этой функции обновляются только аккумуляторы и счётчик точек, фактическое вычисление центра тяжести происходит только при вызове get().
Определение в строке 894 файла centroid.hpp.
Используется в pcl::VoxelGrid< PointT >::applyFilter().
get()
| void pcl::CentroidPoint< PointT >::get | ( | PointOutT & | point | ) | const |
Получение текущего центра тяжести.
Вычисление (деление накопленных значений на количество точек и нормализация, где это применимо) происходит здесь. Результат не кешируется, поэтому любой последующий вызов этой функции вызовет повторное вычисление.
Если количество накопленных точек равно нулю, то точка останется неизменной.
Определение в строке 903 файла centroid.hpp.
Используется в pcl::VoxelGrid< PointT >::applyFilter().
getSize()
| inline |
Получить общее количество добавленных точек.
Определение в строке 1050 файла 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