点云配准
点云配准(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