此类实现了一种非常高效且鲁棒的迭代最近点 (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 构造函数。
|
|
虚 | ~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 |
( |
| ) |
|
|
内联 |
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 |
( |
| ) |
|
|
inlinevirtual |
◆ 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 ) |
|
内联 |
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 构造函数。
- 参数
-
[in] | iterations | |
[in] | tolerence | 控制 ICP 每次迭代的配准精度。 |
[in] | rejectionScale | 应用鲁棒的异常值拒绝以提高鲁棒性。此值实际上对应于标准差系数。在配准过程中,将忽略具有 rejectionScale * σ 的点。 |
[in] | numLevels | 需要进行的金字塔层数。深层金字塔可以提高速度,但会降低精度。金字塔层数太粗糙可能会导致计算开销增加,并且配准精度降低。应选择此参数以优化平衡。典型值范围为 4 到 10。 |
[in] | sampleType | 当前此参数被忽略,仅应用均匀采样。将其保留为 0。 |
[in] | 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 |
执行配准。
- 参数
-
[in] | srcPC | 模型的输入点云。预期包含法线 (Nx6)。目前,仅支持 CV_32F 数据类型。 |
[in] | 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 |
使用多个初始姿态执行配准。
- 参数
-
[in] | srcPC | 模型的输入点云。预期包含法线 (Nx6)。目前,仅支持 CV_32F 数据类型。 |
[in] | dstPC | 场景的输入点云。目前,仅支持 CV_32F 数据类型。 |
[输入/输出] | poses | 输入姿态作为起始姿态,同时也是姿态的输出列表。 |
- 返回值
- 成功终止时,函数返回 0。
假设模型已在场景上配准。场景保持静态,而模型发生变换。输出姿态将模型变换到场景上。由于采用了点到平面最小化方法,因此场景需要提供法线信息。预期包含法线 (Nx6)。
此类的文档是从以下文件生成的