一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

probreg:实践指南

时间:2026-09-11 08:06:01 编辑:袖梨 来源:一聚教程网

面对实际交付,我看probreg的重点不在星标,而在这项能力:使用概率模型进行点云配准的Python包(相干点漂移,GMMReg,SVR,GMMTree,FilterReg,贝叶斯CPD)。实际做部署与运行环境时,经常会碰到权限、依赖和环境差异会放大维护成本,所以功能列表并不能代替验证。我建议在非生产环境复现一次安装与运行,重点记录依赖锁定、权限边界、日志、回滚和资源消耗,再与现有方案比较。我的判断是,它更适合愿意维护环境并重视故障恢复的工程团队;若眼下没有这类需求,先保留观察即可。

neka-nat/probreg 项目截图 1

Probreg 是一个使用 probablistic 模型实现点云 registration 算法的库。

使用随机模型的点集配准算法比ICP(迭代最近点)更加鲁棒。 该软件包使用随机模型实现了多种算法,并提供了与 Open3D 的简单接口。

核心特点

  • Open3D接口
  • 刚性与非刚性变换

算法

  • 当目标点云或源点云是观测数据时的最大似然
    • 相干点漂移 (2010)
    • 扩展相干点漂移 (2016)(在 CPD 之前添加对应关系)
    • 颜色相干点漂移 (2018)
    • FilterReg (CVPR2019)
  • 变分贝叶斯推理
    • 贝叶斯相干点漂移 (2020)
  • 两个概率分布的距离最小化
    • GMMReg (2011)
    • 支持向量配准 (2015)
  • 分层随机模型
    • GMMTree (ECCV2018)

转换

类型 CPD SVR, GMMReg GMMTree FilterReg BCPD(实验)
刚性 比例+6D姿势 6D 姿势 6D 姿势 6D姿势 </br>(点对点,</br>点对平面,</br> FPFH-) -
NonRigid 仿射MCT TPS - 可变形运动 </br>(实验) 组合型号 </br>(刚性+刻度+NonRigid-term)

CUDA 支持

你需要安装cupy。

pip install cupy
  • 刚性 CPD
  • 仿射 CPD

安装

您可以使用 pip 安装 probreg。

pip install probreg

或者从源代码安装 probreg。

git clone https://github.com/neka-nat/probreg.git --recursive
cd probreg
pip install -e .

开始使用

这是读取 PCD 文件并调用 CPD 注册的示例代码。 您可以轻松地从 Open3D 点云对象执行注册并绘制结果。

import copy
import numpy as np
import open3d as o3
from probreg import cpd

# load source and target point cloud
source = o3.io.read_point_cloud('bunny.pcd')
source.remove_non_finite_points()
target = copy.deepcopy(source)
# transform target point cloud
th = np.deg2rad(30.0)
target.transform(np.array([[np.cos(th), -np.sin(th), 0.0, 0.0],
                           [np.sin(th), np.cos(th), 0.0, 0.0],
                           [0.0, 0.0, 1.0, 0.0],
                           [0.0, 0.0, 0.0, 1.0]]))
source = source.voxel_down_sample(voxel_size=0.005)
target = target.voxel_down_sample(voxel_size=0.005)

# compute cpd registration
tf_param, _, _ = cpd.registration_cpd(source, target)
result = copy.deepcopy(source)
result.points = tf_param.transform(result.points)

# draw result
source.paint_uniform_color([1, 0, 0])
target.paint_uniform_color([0, 1, 0])
result.paint_uniform_color([0, 0, 1])
o3.visualization.draw_geometries([source, target, result])

资源

  • 文档

结果

比较算法

CPD SVR GMMTree FilterReg

噪音测试

ICP(Open3D) CPD FilterReg

非严格登记

CPD SVR 过滤器寄存器 BCPD

基于特征的注册

FPFH FilterReg

时间测量

执行测量时间的示例脚本。

OMP_NUM_THREADS=1 python time_measurement.py

# Results [s]
# ICP(Open3D):  0.0014092829951550812
# CPD:  0.038112225010991096
# SVR:  0.036476270004641265
# GMMTree:  0.10535842599347234
# FilterReg:  0.005098833993542939

引用

@software{probreg,
    author = {{Kenta-Tanaka et al.}},
    title = {probreg},
    url = {https://probreg.readthedocs.io/en/latest/},
    version = {0.1.6},
    date = {2019-9-29},
}

热门栏目