Spec-Zone.ru › PointCloudLibrary
IterativeClosestPoint предоставляет базовую реализацию алгоритма Iterative Closest Point. Подробнее...
#include <pcl/registration/icp.h >
using
PointCloudSource = typename Registration < PointSource, PointTarget, Scalar >::PointCloudSource
using
PointCloudSourcePtr = typename PointCloudSource::Ptr
using
PointCloudSourceConstPtr = typename PointCloudSource::ConstPtr
using
PointCloudTarget = typename Registration < PointSource, PointTarget, Scalar >::PointCloudTarget
using
PointCloudTargetPtr = typename PointCloudTarget::Ptr
using
PointCloudTargetConstPtr = typename PointCloudTarget::ConstPtr
using
PointIndicesPtr = PointIndices::Ptr
using
PointIndicesConstPtr = PointIndices::ConstPtr
using
Ptr = shared_ptr< IterativeClosestPoint < PointSource, PointTarget, Scalar > >
using
ConstPtr = shared_ptr< const IterativeClosestPoint < PointSource, PointTarget, Scalar > >
using
Matrix4 = typename Registration < PointSource, PointTarget, Scalar >::Matrix4
using
Matrix4 = Eigen::Matrix< float, 4, 4 >
using
Ptr = shared_ptr< Registration < PointSource, PointTarget, float > >
using
ConstPtr = shared_ptr< const Registration < PointSource, PointTarget, float > >
using
CorrespondenceRejectorPtr = pcl::registration::CorrespondenceRejector::Ptr
using
KdTree = pcl::search::KdTree < PointTarget >
using
KdTreePtr = typename KdTree::Ptr
using
KdTreeReciprocal = pcl::search::KdTree < PointSource >
using
KdTreeReciprocalPtr = typename KdTreeReciprocal::Ptr
using
PointCloudSource = pcl::PointCloud < PointSource >
using
PointCloudSourcePtr = typename PointCloudSource::Ptr
using
PointCloudSourceConstPtr = typename PointCloudSource::ConstPtr
using
PointCloudTarget = pcl::PointCloud < PointTarget >
PointCloudTargetConstPtr const
getInputTarget ()
Получить указатель на целевой набор данных входных точек. Подробнее...
void
setSearchMethodTarget (const KdTreePtr &tree, bool force_no_recompute=false)
Указать указатель на объект поиска, используемый для поиска соответствий в целевом облаке. Подробнее...
KdTreePtr
getSearchMethodTarget () const
Получить указатель на метод поиска, используемый для поиска соответствий в целевом облаке. Подробнее...
void
setSearchMethodSource (const KdTreeReciprocalPtr &tree, bool force_no_recompute=false)
Указать указатель на объект поиска, используемый для поиска соответствий в облаке источника (обычно используется для поиска взаимных соответствий). Подробнее...
KdTreeReciprocalPtr
getSearchMethodSource () const
Получить указатель на метод поиска, используемый для поиска соответствий в облаке источника. Подробнее...
Matrix4
getFinalTransformation ()
Получить итоговую матрицу преобразования, вычисленную методом регистрации. Подробнее...
Matrix4
getLastIncrementalTransformation ()
Получить последнюю матрицу инкрементного преобразования, вычисленную методом регистрации. Подробнее...
void
setMaximumIterations (int nr_iterations)
Установить максимальное количество итераций для внутренней оптимизации. Подробнее...
int
getMaximumIterations ()
Получить максимальное количество итераций для внутренней оптимизации, заданное пользователем. Подробнее...
void
setRANSACIterations (int ransac_iterations)
Установить количество итераций для RANSAC. Подробнее...
double
getRANSACIterations ()
Получить количество итераций для RANSAC, заданное пользователем. Подробнее...
void
setRANSACOutlierRejectionThreshold (double inlier_threshold)
Установить порог расстояния для инлайнеров при внутреннем цикле удаления выбросов RANSAC. Подробнее...
double
getRANSACOutlierRejectionThreshold ()
Получить порог расстояния для инлайнеров в цикле удаления выбросов, заданный пользователем. Подробнее...
void
setMaxCorrespondenceDistance (double distance_threshold)
Установить максимальный порог расстояния между двумя соответствующими точками в источнике <-> цели. Подробнее...
double
getMaxCorrespondenceDistance ()
Получить максимальное пороговое значение расстояния между двумя соответствующими точками в источнике <-> целевом. Подробнее...
void
setTransformationEpsilon (double epsilon)
Установить эпсилон преобразования (максимальное разрешённое значение квадрата разницы в смещении между двумя последовательными преобразованиями), для того чтобы оптимизация считалась сошедшейся к окончательному решению. Подробнее...
double
getTransformationEpsilon ()
Получить эпсилон преобразования (максимальное разрешённое значение квадрата разницы в смещении между двумя последовательными преобразованиями), установленный пользователем. Подробнее...
void
setTransformationRotationEpsilon (double epsilon)
Установить эпсилон поворота преобразования (максимально допустимое различие в угле поворота между двумя последовательными преобразованиями), для того чтобы оптимизация считалась сошедшейся к окончательному решению. Подробнее...
double
getTransformationRotationEpsilon ()
Получить эпсилон поворота преобразования (максимально допустимое различие между двумя последовательными преобразованиями), установленный пользователем (эпсилон — это cos(угол) в представлении оси-угла). Подробнее...
void
setEuclideanFitnessEpsilon (double epsilon)
Установить максимальную допустимую эвклидову ошибку между двумя последовательными шагами в цикле ICP, прежде чем алгоритм считается сошедшимся. Подробнее...
double
getEuclideanFitnessEpsilon ()
Получить максимальную допустимую ошибку расстояния, прежде чем алгоритм будет считаться сошедшимся, установленную пользователем. Подробнее...
void
setPointRepresentation (const PointRepresentationConstPtr &point_representation)
Предоставьте указатель на объект PointRepresentation, который будет использоваться при сравнении точек. Подробнее...
bool
registerVisualizationCallback (std::function< UpdateVisualizerCallbackSignature > &visualizerCallback)
Зарегистрировать пользовательскую функцию обратного вызова, которая будет вызываться из потока регистрации для обновления облака точек, полученного после каждой итерации. Подробнее...
double
getFitnessScore (double max_range=std::numeric_limits< double >::max())
Получить оценку эвклидовой функции (например, среднее значение квадратов расстояний от источника до целевого) Подробнее...
double
getFitnessScore (const std::vector< float > &distances_a, const std::vector< float > &distances_b)
Получить оценку эвклидовой функции (например, среднее значение квадратов расстояний от источника до целевого) из двух наборов расстояний соответствия (расстояния между точками источника и целевого) Подробнее...
bool
hasConverged () const
Возвратить состояние сходимости после последнего запуска выравнивания. Подробнее...
void
align (PointCloudSource &output)
Вызвать алгоритм регистрации, который оценивает преобразование и возвращает преобразованный источник (ввод) как вывод . Подробнее...
void
align (PointCloudSource &output, const Matrix4 &guess)
Конечная матрица преобразования, оценённая методом регистрации после N итераций. Подробнее...
Matrix4
transformation_
Матрица преобразования, оценённая методом регистрации. Подробнее...
Matrix4
previous_transformation_
Предыдущая матрица преобразования, оценённая методом регистрации (используется внутри). Подробнее...
double
transformation_epsilon_
Максимальное различие между двумя последовательными преобразованиями для определения сходимости (определяется пользователем). Подробнее...
double
transformation_rotation_epsilon_
Максимальное различие в повороте между двумя последовательными преобразованиями для определения сходимости (определяется пользователем). Подробнее...
double
euclidean_fitness_epsilon_
Максимальная разрешённая евклидова ошибка между двумя последовательными шагами в цикле ICP, прежде чем алгоритм считается сошедшимся. Подробнее...
double
corr_dist_threshold_
Максимальное пороговое значение расстояния между двумя соответствующими точками в источнике <-> целевом. Подробнее...
double
inlier_threshold_
Пороговое значение расстояния для инлайнеров для внутреннего цикла отбрасывания выбросов RANSAC. Подробнее...
bool
converged_
Содержит внутреннее состояние сходимости, заданное параметрами пользователя. Подробнее...
unsigned int
min_number_correspondences_
Минимальное количество соответствий, необходимое алгоритму, прежде чем пытаться оценить преобразование. Подробнее...
CorrespondencesPtr
correspondences_
Набор соответствий, определённых на данном шаге ICP. Подробнее...
TransformationEstimationPtr
transformation_estimation_
Объект TransformationEstimation, используемый для вычисления 4x4 ригидного преобразования. Подробнее...
CorrespondenceEstimationPtr
correspondence_estimation_
Объект CorrespondenceEstimation, используемый для оценки соответствий между облаками точек источника и цели. Подробнее...
std::vector< CorrespondenceRejectorPtr >
correspondence_rejectors_
Список корректных корреспондентов для использования. Подробнее...
bool
target_cloud_updated_
Переменная, хранящая информацию о том, есть ли новое облако целевых точек, что означает необходимость его повторной предварительной обработки. Подробнее...
bool
source_cloud_updated_
Переменная, хранящая информацию о наличии нового облака исходных точек, что означает необходимость его повторной предварительной обработки. Подробнее...
bool
force_no_recompute_
Флаг, который, если установлен, означает, что дерево, работающее с облаком целевых точек, никогда не будет пересчитываться. Подробнее...
bool
force_no_recompute_reciprocal_
Флаг, который, если установлен, означает, что дерево, работающее с облаком исходных точек, никогда не будет пересчитываться. Подробнее...
std::function< UpdateVisualizerCallbackSignature >
update_visualizer_
Функция обратного вызова для обновления положения облака исходных точек в процессе его регистрации с облаком целевых точек. Подробнее...
PointCloudConstPtr
input_
Набор данных входного облака точек. Подробнее...
IndicesPtr
indices_
Указатель на вектор индексов точек для использования. Подробнее...
bool
use_indices_
Устанавливается в значение true, если используются индексы точек. Подробнее...
bool
fake_indices_
Если набор индексов не задан, создаётся набор фиктивных индексов, имитирующих входное облако точек. Подробнее...
шаблон<typename PointSource, typename PointTarget, typename Scalar = float> класс pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar > IterativeClosestPoint предоставляет базовую реализацию алгоритма Итеративного Ближайшего Соседства.
Преобразование оценивается на основе разложения по единственному собственному значению (SVD).
Алгоритм имеет несколько критериев завершения:
Количество итераций достигло максимального значения, заданного пользователем (через setMaximumIterations ) Разница (epsilon) между предыдущим преобразованием и текущим оценённым преобразованием меньше заданного пользователем значения (через setTransformationEpsilon ) Сумма квадратов ошибок Евклида меньше заданного пользователем порога (через setEuclideanFitnessEpsilon ) Пример использования:
IterativeClosestPoint<PointXYZ, PointXYZ> icp;
// Set the input source and target
icp.setInputSource (cloud_source);
icp.setInputTarget (cloud_target);
// Set the max correspondence distance to 5cm (e.g., correspondences with higher
// distances will be ignored)
icp.setMaxCorrespondenceDistance (0.05);
// Set the maximum number of iterations (criterion 1)
icp.setMaximumIterations (50);
// Set the transformation epsilon (criterion 2)
icp.setTransformationEpsilon (1e-8);
// Set the euclidean distance difference epsilon (criterion 3)
icp.setEuclideanFitnessEpsilon (1);
// Perform the alignment
icp.align (cloud_source_registered);
// Obtain the transformation that aligned cloud_source to cloud_source_registered
Eigen::Matrix4f transformation = icp.getFinalTransformation ();
Автор
Radu B. Rusu, Michael Dixon
Определение в строке 97 файла icp.h .
ConstPtr шаблон<typename PointSource , typename PointTarget , typename Scalar = float>
Matrix4 шаблон<typename PointSource , typename PointTarget , typename Scalar = float>
PointCloudSource шаблон<typename PointSource , typename PointTarget , typename Scalar = float>
Определение в строке 99 файла icp.h .
PointCloudSourceConstPtr template<typename PointSource , typename PointTarget , typename Scalar = float>
PointCloudSourcePtr template<typename PointSource , typename PointTarget , typename Scalar = float>
PointCloudTarget template<typename PointSource , typename PointTarget , typename Scalar = float>
PointCloudTargetConstPtr template<typename PointSource , typename PointTarget , typename Scalar = float>
PointCloudTargetPtr template<typename PointSource , typename PointTarget , typename Scalar = float>
PointIndicesConstPtr template<typename PointSource , typename PointTarget , typename Scalar = float>
PointIndicesPtr template<typename PointSource , typename PointTarget , typename Scalar = float>
Ptr template<typename PointSource , typename PointTarget , typename Scalar = float>
IterativeClosestPoint() [1/3]
template<typename PointSource , typename PointTarget , typename Scalar = float>
Пустой конструктор.
Определение в строке 145 файла icp.h .
Ссылки на pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar >::convergence_criteria_ , pcl::Registration< PointSource, PointTarget, float >::correspondence_estimation_ , pcl::Registration< PointSource, PointTarget, float >::correspondences_ , pcl::Registration< PointSource, PointTarget, float >::nr_iterations_ , pcl::Registration< PointSource, PointTarget, float >::reg_name_ , pcl::Registration< PointSource, PointTarget, float >::transformation_ , и pcl::Registration< PointSource, PointTarget, float >::transformation_estimation_ .
IterativeClosestPoint() [2/3]
template<typename PointSource , typename PointTarget , typename Scalar = float>
Из-за convergence_criteria_ , удерживающего ссылки на члены класса, сложно правильно реализовать операции копирования и перемещения.
Это может привести к скрытым ошибкам, и для их предотвращения операции копирования и перемещения для ICP были отключены.
Задача:
: удалить удалённые конструкторы и операции присваивания после решения проблемы
IterativeClosestPoint() [3/3]
template<typename PointSource , typename PointTarget , typename Scalar = float>
~IterativeClosestPoint() template<typename PointSource , typename PointTarget , typename Scalar = float>
computeTransformation() template<typename PointSource , typename PointTarget , typename Scalar >
Метод вычисления ригидного преобразования с начальным приближением.
Parameters
output
преобразованный набор точек входного облака точек с использованием найденного ригидного преобразования
guess
начальное приближение преобразования для вычисления
Определение в строке 114 файла icp.hpp .
Ссылки на pcl::toPCLPointCloud2() .
determineRequiredBlobData() template<typename PointSource , typename PointTarget , typename Scalar >
getConvergeCriteria() template<typename PointSource , typename PointTarget , typename Scalar = float>
getUseReciprocalCorrespondences() template<typename PointSource , typename PointTarget , typename Scalar = float>
operator=() [1/2]
template<typename PointSource , typename PointTarget , typename Scalar = float>
operator=() [2/2]
template<typename PointSource , typename PointTarget , typename Scalar = float>
setInputSource() template<typename PointSource , typename PointTarget , typename Scalar = float>
Предоставьте указатель на исходный вход (например, облако точек, которое мы хотим выровнять с целевым)
Parameters
[in]
cloud
исходное облако точек
Переопределено из pcl::Registration< PointSource, PointTarget, float > .
Определение в строке 207 файла icp.h .
Ссылки на pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar >::nx_idx_offset_ , pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar >::ny_idx_offset_ , pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar >::nz_idx_offset_ , pcl::Registration< PointSource, PointTarget, Scalar >::setInputSource() , pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar >::source_has_normals_ , pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar >::x_idx_offset_ , pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar >::y_idx_offset_ , и pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar >::z_idx_offset_ .
Используется в pcl::JointIterativeClosestPoint< PointSource, PointTarget, Scalar >::addInputSource() , pcl::JointIterativeClosestPoint< PointSource, PointTarget, Scalar >::computeTransformation() и pcl::GeneralizedIterativeClosestPoint< PointSource, PointTarget, Scalar >::setInputSource() .
setInputTarget() template<typename PointSource , typename PointTarget , typename Scalar = float>
Предоставьте указатель на целевой вход (например, облако точек, к которому мы хотим выровнять входной источник)
Parameters
[in]
cloud
целевое облако точек
Переопределено из pcl::Registration< PointSource, PointTarget, float > .
Определение в строке 240 файла icp.h .
Ссылки на pcl::Registration< PointSource, PointTarget, Scalar >::setInputTarget() и pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar >::target_has_normals_ .
Используется в pcl::JointIterativeClosestPoint< PointSource, PointTarget, Scalar >::addInputTarget() , pcl::JointIterativeClosestPoint< PointSource, PointTarget, Scalar >::computeTransformation() и pcl::GeneralizedIterativeClosestPoint< PointSource, PointTarget, Scalar >::setInputTarget() .
setUseReciprocalCorrespondences() template<typename PointSource , typename PointTarget , typename Scalar = float>
void pcl::IterativeClosestPoint < PointSource, PointTarget, Scalar >::setUseReciprocalCorrespondences ( bool use_reciprocal_correspondence
)
inline
transformCloud() template<typename PointSource , typename PointTarget , typename Scalar >
Применить жёсткое преобразование к заданному набору данных.
Здесь мы проверяем, имеет ли набор данных нормали поверхности в дополнение к XYZ, и вращаем нормали тоже.
Parameters
[in]
input
входное облако точек
[out]
output
результирующее выходное облако точек
[in]
transform
жёсткое преобразование 4x4
Note
Можно использовать с cloud_in равным cloud_out
Переопределено в pcl::IterativeClosestPointWithNormals< PointSource, PointTarget, Scalar > .
Определение в строке 50 файла icp.hpp .
convergence_criteria_ template<typename PointSource , typename PointTarget , typename Scalar = float>
need_source_blob_ template<typename PointSource , typename PointTarget , typename Scalar = float>
Проверяет, требуют ли оценщики и отбрасыватели различные данные.
Определение в строке 313 файла icp.h .
need_target_blob_ template<typename PointSource , typename PointTarget , typename Scalar = float>
nx_idx_offset_ template<typename PointSource , typename PointTarget , typename Scalar = float>
ny_idx_offset_ template<typename PointSource , typename PointTarget , typename Scalar = float>
nz_idx_offset_ template<typename PointSource , typename PointTarget , typename Scalar = float>
source_has_normals_ template<typename PointSource , typename PointTarget , typename Scalar = float>
target_has_normals_ template<typename PointSource , typename PointTarget , typename Scalar = float>
use_reciprocal_correspondence_ template<typename PointSource , typename PointTarget , typename Scalar = float>
x_idx_offset_ template<typename PointSource , typename PointTarget , typename Scalar = float>
y_idx_offset_ template<typename PointSource , typename PointTarget , typename Scalar = float>
z_idx_offset_ template<typename PointSource , typename PointTarget , typename Scalar = float>
Документация для этого класса сгенерирована из следующих файлов: