Алгоритм сегментации, разбивающий граф супервокселей. Подробнее...
#include <pcl/segmentation/cpc_segmentation.h>
Открытые функции-члены | |
| CPCSegmentation () | |
| ~CPCSegmentation () override | |
| void | segment () |
| Объединяет супервоксели, используя разрезы по локальным выпуклым участкам. Подробнее... |
|
| void | setCutting (const std::uint32_t max_cuts=20, const std::uint32_t cutting_min_segments=0, const float cutting_min_score=0.16, const bool locally_constrained=true, const bool directed_cutting=true, const bool clean_cutting=false) |
| Определяет, следует ли использовать плоскости разреза. Подробнее... |
|
| void | setRANSACIterations (const std::uint32_t ransac_iterations) |
| Задаёт количество итераций для этапа взвешенного RANSAC (оценка наилучшего разреза). Подробнее... |
|
|
| |
| LCCPSegmentation () | |
| virtual | ~LCCPSegmentation () |
| void | reset () |
| Сбрасывает внутреннюю память. Подробнее... |
|
| void | setInputSupervoxels (const std::map< std::uint32_t, typename pcl::Supervoxel< PointT >::Ptr > &supervoxel_clusters_arg, const std::multimap< std::uint32_t, std::uint32_t > &label_adjacency_arg) |
| Задаёт кластеры супервокселей и граф смежности для сегментации. Эти параметры формируются с помощью класса SupervoxelClustering. Подробнее... |
|
| void | segment () |
| Объединяет супервоксели, используя локальную выпуклость. Подробнее... |
|
| void | relabelCloud (pcl::PointCloud< pcl::PointXYZL > &labeled_cloud_arg) |
| Заменяет метки супервокселей в облаке вычисленными метками сегментов. Подробнее... |
|
| void | getSegmentToSupervoxelMap (std::map< std::uint32_t, std::set< std::uint32_t > > &segment_supervoxel_map_arg) const |
| Получает карту<SegmentID, std::set<SuperVoxel IDs> > Подробнее... |
|
| void | getSupervoxelToSegmentMap (std::map< std::uint32_t, std::uint32_t > &supervoxel_segment_map_arg) const |
| Получает карту<Supervoxel_ID, Segment_ID> Подробнее... |
|
| void | getSegmentAdjacencyMap (std::map< std::uint32_t, std::set< std::uint32_t > > &segment_adjacency_map_arg) |
| Получает карту <SegmentID, std::set<Neighboring SegmentIDs> > Подробнее... |
|
| float | getConcavityToleranceThreshold () const |
| Получает порог нормали. Подробнее... |
|
| void | getSVAdjacencyList (SupervoxelAdjacencyList &adjacency_list_arg) const |
| Получает граф смежности супервокселей с классифицированными рёбрами (boost::adjacency_list). Подробнее... |
|
| void | setConcavityToleranceThreshold (float concavity_tolerance_threshold_arg) |
| Задаёт порог нормали. Подробнее... |
|
| void | setSmoothnessCheck (bool use_smoothness_check_arg, float voxel_res_arg, float seed_res_arg, float smoothness_threshold_arg=0.1) |
| Определяет, выполняется ли при сегментации проверка гладкости, которая пытается пометить недействительными рёбра негладких соединённых участков (ступеней). Подробнее... |
|
| void | setSanityCheck (const bool use_sanity_criterion_arg) |
| Определяет, следует ли использовать критерий корректности для признания недействительными отдельных связанных участков. Подробнее... |
|
| void | setKFactor (const std::uint32_t k_factor_arg) |
| Задаёт значение, используемое для k-выпуклости. Подробнее... |
|
| void | setMinSegmentSize (const std::uint32_t min_segment_size_arg) |
| Задаёт значение min_segment_size_, используемое в mergeSmallSegments. Подробнее... |
|
Дополнительные унаследованные элементы | |
|
| |
| using | SupervoxelAdjacencyList = boost::adjacency_list< boost::setS, boost::setS, boost::undirectedS, std::uint32_t, EdgeProperties > |
| using | VertexIterator = typename boost::graph_traits< SupervoxelAdjacencyList >::vertex_iterator |
| using | AdjacencyIterator = typename boost::graph_traits< SupervoxelAdjacencyList >::adjacency_iterator |
| using | VertexID = typename boost::graph_traits< SupervoxelAdjacencyList >::vertex_descriptor |
| using | EdgeIterator = typename boost::graph_traits< SupervoxelAdjacencyList >::edge_iterator |
| using | OutEdgeIterator = typename boost::graph_traits< SupervoxelAdjacencyList >::out_edge_iterator |
| using | EdgeID = typename boost::graph_traits< SupervoxelAdjacencyList >::edge_descriptor |
|
| |
| void | mergeSmallSegments () |
| Сегменты размером меньше min_segment_size_ объединяются с меткой самого крупного соседа. Подробнее... |
|
| void | computeSegmentAdjacency () |
| Вычисляет смежность сегментов. Подробнее... |
|
| void | prepareSegmentation (const std::map< std::uint32_t, typename pcl::Supervoxel< PointT >::Ptr > &supervoxel_clusters_arg, const std::multimap< std::uint32_t, std::uint32_t > &label_adjacency_arg) |
| Вызывается внутри setInputSupervoxels главным образом для выделения необходимой памяти. Подробнее... |
|
| void | doGrouping () |
| Выполняет поиск в глубину по графу и рекурсивно объединяет все супервоксели, соединённые выпуклыми связями. Подробнее... |
|
| void | recursiveSegmentGrowing (const VertexID &queryPointID, const unsigned int group_label) |
| Назначает соседям точки запроса ту же группу, что и самой точке запроса. Подробнее... |
|
| void | calculateConvexConnections (SupervoxelAdjacencyList &adjacency_list_arg) |
| Вычисляет выпуклость рёбер и сохраняет результат в графе смежности. Подробнее... |
|
| void | applyKconvexity (const unsigned int k_arg) |
| Связи считаются выпуклыми, только если это верно как минимум для k_arg общих соседей двух участков. Подробнее... |
|
| bool | connIsConvex (const std::uint32_t source_label_arg, const std::uint32_t target_label_arg, float &normal_angle) |
| Возвращает true, если связь между источником и целью является выпуклой. Подробнее... |
|
|
| |
| float | concavity_tolerance_threshold_ {10} |
| *** Параметры *** /// Подробнее... |
|
| bool | grouping_data_valid_ {false} |
| Указывает, доступны ли корректные данные группировки (sv_adjacency_list_, sv_label_to_seg_label_map_, processed_). Подробнее... |
|
| bool | supervoxels_set_ {false} |
| Указывает, были ли заданы супервоксели вызовом setInputSupervoxels. Подробнее... |
|
| bool | use_smoothness_check_ {false} |
| Определяет, используется ли при сегментации проверка гладкости. Подробнее... |
|
| float | smoothness_threshold_ {0.1} |
| Два супервокселя считаются негладкими, если расстояние между их плоскостями DIST > (ожидаемое расстояние + smoothness_threshold_*voxel_resolution_). Подробнее... |
|
| bool | use_sanity_check_ {false} |
| Определяет, используется ли проверка корректности, которая пытается найти и пометить как недопустимые изолированные связанные участки. Подробнее... |
|
| float | seed_resolution_ {0.0f} |
| Разрешение начальных точек супервокселей (используется только для проверки гладкости) Подробнее... |
|
| float | voxel_resolution_ {0.0f} |
| Разрешение вокселей, использованное для построения супервокселей (используется только для проверки гладкости) Подробнее... |
|
| std::uint32_t | k_factor_ {0} |
| Множитель, используемый для k-выпуклости. Подробнее... |
|
| std::uint32_t | min_segment_size_ {0} |
| Минимальный размер сегмента. Подробнее... |
|
| std::map< std::uint32_t, bool > | processed_ |
| Хранит метки супервокселей, уже посещённых во время рекурсивной группировки. Подробнее... |
|
| SupervoxelAdjacencyList | sv_adjacency_list_ |
| Граф смежности, в котором узлами являются метки супервокселей, а рёбра соединяют смежные супервоксели. Подробнее... |
|
| std::map< std::uint32_t, typename pcl::Supervoxel< PointT >::Ptr > | sv_label_to_supervoxel_map_ |
| соответствие меток супервокселей объектам супервокселей Подробнее... |
|
| std::map< std::uint32_t, std::uint32_t > | sv_label_to_seg_label_map_ |
| Хранит соответствие исходных меток супервокселей новым меткам сегментации. Подробнее... |
|
| std::map< std::uint32_t, std::set< std::uint32_t > > | seg_label_to_sv_list_map_ |
| соответствие метки сегмента набору меток супервокселей Подробнее... |
|
| std::map< std::uint32_t, std::set< std::uint32_t > > | seg_label_to_neighbor_set_map_ |
| соответствие < SegmentID, std::set< метки соседних сегментов> > Подробнее... |
|
Подробное описание
template<typename PointT>
class pcl::CPCSegmentation< PointT >
Алгоритм сегментации, разбивающий граф супервокселей на части.
Для рекурсивной сегментации он использует плоские разрезы, задаваемые локальными вогнутостями. Разрезы оцениваются с помощью локально ограниченного направленного RANSAC.
- Примечание
- При использовании этого алгоритма в научной работе, пожалуйста, цитируйте следующую статью: M. Schoeler, J. Papon, F. Woergoetter Constrained Planar Cuts — Разбиение объектов для облаков точек. В материалах конференции IEEE по компьютерному зрению и распознаванию образов (CVPR), 2015 г. Большая часть функциональности наследуется от LCCPSegmentation
Определение в строке 66 файла cpc_segmentation.h.
Описание конструктора и деструктора
CPCSegmentation()
| default |
~CPCSegmentation()
| overridedefault |
Описание методов
segment()
| void pcl::CPCSegmentation< PointT >::segment |
Объединяет супервоксели с помощью разрезов по локальным выпуклым областям.
Входные параметры формируются с помощью класса SupervoxelClustering. Для получения результата используйте метод relabelCloud.
- Примечание
- Получить результат сегментации можно тремя способами (унаследованными от LCCPSegmentation): relabelCloud, getSupervoxelToSegmentMap и getSupervoxelToSegmentMap
Определение в строке 51 файла cpc_segmentation.hpp.
setCutting()
| inline |
Определяет, нужно ли использовать секущие плоскости.
- Параметры
-
[in] max_cuts Максимальное количество разрезов [in] cutting_min_segments Минимальный размер сегмента для разрезания [in] cutting_min_score Минимальная оценка, которую должен получить предлагаемый разрез, чтобы быть выполненным [in] locally_constrained Определяет, ограничиваются ли разрезы локальной областью [in] directed_cutting Определяет, следует ли отдавать предпочтение разрезам, перпендикулярным направлению ребра [in] clean_cutting Определяет, разрезаются ли только рёбра, по разные стороны плоскости которых находятся супервоксели (чистый разрез), или все рёбра на расстоянии seed_resolution_ от плоскости (нечистый разрез). Последний вариант использовался в статье.
Определение в строке 107 файла cpc_segmentation.h.
setRANSACIterations()
| inline |
Задаёт количество итераций для этапа взвешенного RANSAC (оценка наилучшего разреза)
- Параметры
-
[in] ransac_iterations Количество итераций
Определение в строке 125 файла cpc_segmentation.h.
Документация для этого класса создана на основе следующих файлов:
- pcl/segmentation/cpc_segmentation.h
- pcl/segmentation/impl/cpc_segmentation.hpp
© 2009–2012, Willow Garage, Inc.
© 2012–, Open Perception, Inc.
Licensed under the BSD License.
https://pointclouds.org/documentation/classpcl_1_1_c_p_c_segmentation.html