Spec-Zone.ru › PointCloudLibrary

Алгоритм сегментации, разбивающий граф супервокселей. Подробнее...

#include <pcl/segmentation/cpc_segmentation.h>

Inheritance graph
[легенда]
Collaboration graph
[легенда]

Открытые функции-члены

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 (оценка наилучшего разреза). Подробнее...
- Открытые функции-члены, унаследованные от pcl::LCCPSegmentation< PointT >
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. Подробнее...

Дополнительные унаследованные элементы

- Открытые типы, унаследованные от pcl::LCCPSegmentation< PointT >
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
- Защищённые функции-члены, унаследованные от pcl::LCCPSegmentation< PointT >
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, если связь между источником и целью является выпуклой. Подробнее...
- Защищённые атрибуты, унаследованные от pcl::LCCPSegmentation< PointT >
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
Автор
Markus Schoeler (mscho.nosp@m.eler.nosp@m.@web..nosp@m.de)

Определение в строке 66 файла cpc_segmentation.h.

Описание конструктора и деструктора

CPCSegmentation()

template<typename PointT >
pcl::CPCSegmentation< PointT >::CPCSegmentation ( )
default

~CPCSegmentation()

template<typename PointT >
pcl::CPCSegmentation< PointT >::~CPCSegmentation ( )
overridedefault

Описание методов

segment()

template<typename PointT >
void pcl::CPCSegmentation< PointT >::segment

Объединяет супервоксели с помощью разрезов по локальным выпуклым областям.

Входные параметры формируются с помощью класса SupervoxelClustering. Для получения результата используйте метод relabelCloud.

Примечание
Получить результат сегментации можно тремя способами (унаследованными от LCCPSegmentation): relabelCloud, getSupervoxelToSegmentMap и getSupervoxelToSegmentMap

Определение в строке 51 файла cpc_segmentation.hpp.

setCutting()

template<typename PointT >
void pcl::CPCSegmentation< PointT >::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
)
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()

template<typename PointT >
void pcl::CPCSegmentation< PointT >::setRANSACIterations ( const std::uint32_t ransac_iterations )
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API