此类实现了一种非常高效且鲁棒的迭代最近点 (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 | ICP (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 |
( |
| ) |
|
|
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 |
|
) |
| |
|
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 构造函数,具有默认参数。
- 参数
-
[in] | iterations | |
[in] | tolerence | 控制 ICP 每次迭代的配准精度。 |
[in] | rejectionScale | 为了鲁棒性,应用了鲁棒的异常值拒绝。此值实际上对应于标准差系数。拒绝比例 * &sigma 的点在配准期间将被忽略。 |
[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 是唯一支持的数据类型。 |
[out] | residual | 输出配准误差。 |
[out] | 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 是唯一支持的数据类型。 |
[in,out] | poses | 输入位姿,用于开始,但也是位姿的输出列表。 |
- 返回值
- 成功终止后,函数返回 0。
假设模型在场景上配准。场景保持静止,而模型进行变换。输出位姿将模型变换到场景上。由于点到平面最小化,场景预计具有法线可用。预计具有法线 (Nx6)。
此类的文档是从以下文件生成的