此类实现了一种非常高效且鲁棒的迭代最近点(ICP)算法。 任务是将 3D 模型(或点云)与一组噪声目标数据进行配准。 这些变体是我在经过某些测试后组合在一起的。 任务是能够快速匹配杂乱场景中的部分噪声点云。 您会发现我强调的是性能,同时保持准确性。 此实现基于 Tolga Birdal 在此处的 MATLAB 实现:http://www.mathworks.com/matlabcentral/fileexchange/47152-icp-registration-using-efficient-variants-and-multi-resolution-scheme 主要贡献来自:更多...
#include <opencv2/surface_matching/icp.hpp>
|
| | ICP () |
| |
| | ICP (const int iterations, const float tolerence=0.05f, const float rejectionScale=2.5f, const int numLevels=6, const int sampleType=ICP::ICP_SAMPLING_TYPE_UNIFORM, const int numMaxCorr=1) |
| | ICP 构造函数,带有默认参数。
|
| |
| virtual | ~ICP () |
| |
| int | registerModelToScene (const Mat &srcPC, const Mat &dstPC, double &residual, Matx44d &pose) |
| | 执行配准。
|
| |
| int | registerModelToScene (const Mat &srcPC, const Mat &dstPC, std::vector< Pose3DPtr > &poses) |
| | 执行具有多个初始姿势的配准。
|
| |
◆ 匿名枚举
| 枚举器 |
|---|
| ICP_SAMPLING_TYPE_UNIFORM | |
| ICP_SAMPLING_TYPE_GELFAND | |
◆ ICP() [1/2]
| cv::ppf_match_3d::ICP::ICP |
( |
| ) |
|
|
inline |
| Python |
|---|
| cv.ppf_match_3d.ICP( | | ) -> | <ppf_match_3d_ICP 对象> |
| cv.ppf_match_3d.ICP( | iterations[, tolerence[, rejectionScale[, numLevels[, sampleType[, numMaxCorr]]]]] | ) -> | <ppf_match_3d_ICP 对象> |
◆ ~ICP()
| virtual cv::ppf_match_3d::ICP::~ICP |
( |
| ) |
|
|
内联虚拟 |
◆ ICP() [2/2]
| cv::ppf_match_3d::ICP::ICP |
( |
const int | iterations, |
|
|
const float | tolerence = 0.05f, |
|
|
const float | rejectionScale = 2.5f, |
|
|
const int | numLevels = 6, |
|
|
const int | sampleType = ICP::ICP_SAMPLING_TYPE_UNIFORM, |
|
|
const int | numMaxCorr = 1 ) |
|
inline |
| Python |
|---|
| cv.ppf_match_3d.ICP( | | ) -> | <ppf_match_3d_ICP 对象> |
| cv.ppf_match_3d.ICP( | iterations[, tolerence[, rejectionScale[, numLevels[, sampleType[, numMaxCorr]]]]] | ) -> | <ppf_match_3d_ICP 对象> |
ICP 构造函数,带有默认参数。
- 参数
-
| [输入] | iterations | |
| [输入] | tolerence | 控制 ICP 每次迭代的配准精度。 |
| [输入] | rejectionScale | 应用鲁棒的异常值剔除以实现鲁棒性。 此值实际上对应于标准偏差系数。 在配准期间,将忽略具有 rejectionScale * &sigma 的点。 |
| [输入] | numLevels | 要进行的金字塔层数。 深金字塔提高了速度,但降低了精度。 太粗糙的金字塔可能会在不准确的配准之上产生计算开销。 应选择此参数以优化平衡。 典型值范围为 4 到 10。 |
| [输入] | sampleType | 当前忽略此参数,仅应用均匀采样。 将其保留为 0。 |
| [输入] | numMaxCorr | 当前忽略此参数,仅应用 PickyICP。 将其保留为 1。 |
◆ registerModelToScene() [1/2]
| int cv::ppf_match_3d::ICP::registerModelToScene |
( |
const Mat & | srcPC, |
|
|
const Mat & | dstPC, |
|
|
double & | residual, |
|
|
Matx44d & | pose ) |
| Python |
|---|
| cv.ppf_match_3d.ICP.registerModelToScene( | srcPC, dstPC | ) -> | retval, residual, pose |
| cv.ppf_match_3d.ICP.registerModelToScene( | srcPC, dstPC, poses | ) -> | retval, poses |
执行配准。
- 参数
-
| [输入] | srcPC | 模型的输入点云。 预期具有法线 (Nx6)。 目前,CV_32F 是唯一支持的数据类型。 |
| [输入] | dstPC | 场景的输入点云。 假设模型已在场景中注册。 场景保持静态。 预期具有法线 (Nx6)。 目前,CV_32F 是唯一支持的数据类型。 |
| [输出] | residual | 输出配准误差。 |
| [输出] | pose | srcPC 和 dstPC 之间的变换。 |
- 返回
- 成功终止时,函数返回 0。
假设模型已在场景中注册。 场景保持静态,而模型进行变换。 输出姿势将模型变换到场景上。 由于点到平面的最小化,因此场景应具有可用的法线。 预期具有法线 (Nx6)。
◆ registerModelToScene() [2/2]
| int cv::ppf_match_3d::ICP::registerModelToScene |
( |
const Mat & | srcPC, |
|
|
const Mat & | dstPC, |
|
|
std::vector< Pose3DPtr > & | poses ) |
| Python |
|---|
| cv.ppf_match_3d.ICP.registerModelToScene( | srcPC, dstPC | ) -> | retval, residual, pose |
| cv.ppf_match_3d.ICP.registerModelToScene( | srcPC, dstPC, poses | ) -> | retval, poses |
执行具有多个初始姿势的配准。
- 参数
-
| [输入] | srcPC | 模型的输入点云。 预期具有法线 (Nx6)。 目前,CV_32F 是唯一支持的数据类型。 |
| [输入] | dstPC | 场景的输入点云。 目前,CV_32F 是唯一支持的数据类型。 |
| [in,out] | poses | 从输入姿势开始,但也列出姿势的输出。 |
- 返回
- 成功终止时,函数返回 0。
假设模型已在场景中注册。 场景保持静态,而模型进行变换。 输出姿势将模型变换到场景上。 由于点到平面的最小化,因此场景应具有可用的法线。 预期具有法线 (Nx6)。
此类文档由以下文件生成