此類實現了一種非常高效且魯棒的迭代最近點(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)。
此類文件由以下檔案生成