首页 > 其他分享 >点云配准

点云配准

时间:2023-10-08 11:25:53浏览次数:30  
标签:配准 source open3d registration 点云 ICP

点云配准

点云配准(Point Cloud Registration)指的是输入两幅点云  (source) 和 (target) ,输出一个变换 使得 和 的重合程度尽可能高。
  点云配准的主要任务是计算出旋转矩阵R和平移矩阵T。

ICP算法

迭代最近点算法(Iterative Closest Point, ICP)
 ICP算法循环迭代两个步骤:
 1、查找来自目标点云P和源点云Q使用当前变换矩阵T后的对应集K={(p, q)}。
 2、通过最小化在对应集K上定义的目标函数E(T)来更新变换T。

• ICP方法分类
  ICP方法可分为点到点(PointToPoint)和点到平面(PointToPlane)两类。
    1)PointToPoint:计算P(t)和目标点云T的距离采用点到点之间的距离形式。
    2)PointToPlane:计算P(t)中点到目标点云T的点所在平面的距离,这里通常需要用到目标点云的法向

配准函数

open3d.pipelines.registration.registration_icp
    输入是两个点云和一个初始转换,该转换将源点云和目标点云大致对齐,输出是精确的变换,使两点云紧密对齐
   Returns: open3d.pipelines.registration.RegistrationResult
 
##对应用场景引入一些合理假设,比如限制旋转、平移的范围,变换自由度数量等 
 点云配准通常会需要用到两个点云数据。
  第一类点云数据称为原始点云,用S(source)来表示。第二类点云数据称为目标点云,用T(Target)来表示。
  配准就是希望这里的原始数据S可以对其目标数据T的坐标系,让原始点云S在目标点云T的坐标上进行显示

对应代码

icp = open3d.pipelines.registration.registration_icp(
    source=source,
    target=target,
    max_correspondence_distance=0.2,    # 距离阈值
    estimation_method=open3d.pipelines.registration.TransformationEstimationPointToPoint()
)

source.transform(icp.transformation)
points = np.array(source.points)

open3d.io.read_point_cloud(  open3d.geometry.PointCloud
open3d.t.io.read_point_cloud open3d.t.geometry.PointCloud
 
 
 pcd=o3d.geometry.PointCloud()#实例化一个pointcloud类
 pcd.points=o3d.utility.Vector3dVector(B)#给该类传入坐标数据,此时pcd.points已经是一个点云了 

参考

 Function for ICP registration  http://www.open3d.org/docs/release/python_api/open3d.pipelines.registration.registration_icp.html	 
 三维点云配准 -- ICP 算法原理及推导 https://zhuanlan.zhihu.com/p/104735380
 常见点云存储方式有pcd、ply、txt、bin文件,下面分别对其进行介绍。 https://developer.aliyun.com/article/1078498

标签:配准,source,open3d,registration,点云,ICP
From: https://www.cnblogs.com/ytwang/p/17748430.html

相关文章

  • 手写PCA(主元分析法)计算点云法向量(详细注释) 【Matlab代码】
    原理PCA原理主元分析法PCA学习笔记点云法向量与点云平面拟合的关系(PCA)EstimatingSurfaceNormalsinaPointCloud3D【24】PCA点云法向量估计利用PCA计算点云的法线3D点云法向量估计(最小二乘拟合平面)为什么用PCA做点云法线估计?利用PCA求点云的法向量pca_demo.mclcclearclosea......
  • 点云配准算法-旋转矩阵估计-Kabsch-Umeyama algorithm
    Kabsch-Umeyamaalgorithm参考文献:https://www.wikiwand.com/en/Kabsch_algorithm面向点云配准,最小化两点集均方根误差(RMSD,rootmeansquareddeviation)来计算最佳旋转矩阵。注:该算法只能计算旋转矩阵,做点云配准还需要计算平移向量。当平移和旋转都正确计算出,该算法有......
  • kitti彩色地图拼接<一>、点云bin格式转为pcd格式
      下面是bin格式转pcd格式批量处理代码,其中品红色是需要改成你的实际情况的地方。cpp:【note:代码中,pcd文件的路径改为你自己的】1#include<boost/program_options.hpp>2#include<pcl/point_types.h>3#include<pcl/io/pcd_io.h>4#include<pcl/common/point_ope......
  • 解析pcap格式点云数据包
    1、多BB一句,不想写代码,就去速腾的驱动中复制粘贴。2、问别人的时候,应该问有没有128线速腾雷达数据帧格式资料(每个字段的意义),工具对应读取数据那一块源码能否给出来。 激光雷达每一帧的数据长度固定为1248字节,前42字节的前数据包标识、12组数据包、4字节时间戳和最后两字节雷达......
  • 基于已知点云数据的最小外接圆matlab函数
    基于已知点云数据的最小外接圆matlab函数–MATLAB中文论坛(ilovematlab.cn) %该函数是在其他网站看到的,以此共享。有两种方法(函数)实现。%第一种比较费时:function[xc,yc,r]=smallestcircle(x,y)%Thisfindsthecircleofsmallestareacontainingall%thepoint......
  • 基于奇异值分解的点云配准RT计算原理
    参考文献SorkineO.Least-squaresrigidmotionusingsvd.2009.知乎|三维点云匹配,ICP算法详解百度百科|正交矩阵百度百科|奇异值分解这里这样推导好像不严谨。↩︎未经作者授权,禁止转载THEEND......
  • 六、点云学习
    1、点云类型pcl::PointCloud包含一个域,作为储存点集的容器,这个域是PointT类型的,PointT是基本的点的表现形式,包括PointXYZ、PointXYZRGB、Normal等。PointCloud被定义在point_cloud文件中。1.1成员变量points:保存点云的容器,类型为std::vector<PointT>is_dense:bool类型(true/false),若......
  • Qt中添加VTK窗口显示点云
    Qt中添加VTK窗口显示点云1.在Qt中添加显示点云的控件2.QVTKOpenGLNativeWidget.h的解释3.VTK文档及使用例程VTK总文档入口VTK的C++接口文档VTK的c++使用例程遇到的问题......
  • 【ROS2机器人入门到实战】可视化点云-雷达消息合成
    5.可视化点云-雷达消息合成写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn你好,我是爱吃鱼香ROS的小鱼。上一节完成了指定角......
  • PCL 点云基础
    PCL点云基础: 一、概念1、点云的结构公共字段    PCL包含一个重要的数据结构,被设计成一个模板类,把点的类型当做模板类的参数。    header:pcl::PCLHeader记录了点云的获取时间    points:std::vector<PointT,...>储存所有点的容器    width:指定......