/
klischa
/
AstraScanner2
Обзор
Документация
Войти
/
klischa
/
AstraScanner2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/services/RegistrationService.h
64 строки
2 KB
k k
fix(medium): configurable normals radius and thread-safe intrinsics
13 июл 2026, 23:48
13 июл 2026, 23:48
dc33f76
Код
Авторство
О чём код?
#ifndef REGISTRATIONSERVICE_H #define REGISTRATIONSERVICE_H #include <QObject> #include <Eigen/Dense> #include <limits> #include <functional> #include <pcl/point_cloud.h> #include <pcl/point_types.h> #include <pcl/features/normal_3d.h> #include "../filters/ProcessingTypes.h" struct IcpRegistrationResult { pcl::PointCloud<pcl::PointXYZRGB>::Ptr aligned; Eigen::Matrix4f transform = Eigen::Matrix4f::Identity(); bool converged = false; double fitness = std::numeric_limits<double>::infinity(); }; class CloudFiltersService; class RegistrationService : public QObject { Q_OBJECT public: using ProgressCb = std::function<void(int)>; explicit RegistrationService(CloudFiltersService *cloudFiltersService, QObject *parent = nullptr); void setProgressCallback(ProgressCb cb) { m_progressCb = std::move(cb); } void setNormalsRadius(double radius) { m_normalsRadius = radius; } IcpRegistrationResult registerPointCloudsICPWithResult( const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &source, const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &target, double maxCorrespondenceDistance = 0.05, int maximumIterations = 50, const Eigen::Matrix4f *initialGuess = nullptr); pcl::PointCloud<pcl::PointXYZRGB>::Ptr registerPointCloudsICP( const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &source, const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &target, double maxCorrespondenceDistance = 0.05, int maximumIterations = 50, bool *convergedOut = nullptr); pcl::PointCloud<pcl::PointXYZRGB>::Ptr mergeScans( const std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> &scans, const AstraMergeParams ¶ms = {}); signals: void progressUpdated(int percentage); private: bool computeNormals(const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &cloud, pcl::PointCloud<pcl::Normal>::Ptr &normals); CloudFiltersService *m_cloudFiltersService = nullptr; double m_normalsRadius = 0.03; ProgressCb m_progressCb; }; #endif // REGISTRATIONSERVICE_H