Open3d之彩色点云配准
本教程演示了一种同时使用几何形状和颜色进行配准的ICP变体。它实现了这篇文章的算法 [Park2017] ,实现了颜色信息将沿切线平面锁定对齐。这个算法与之前的ICP配准速度相当,但是实现了更高的精度和鲁棒性。本教程使用的符号来自ICP配准。
辅助可视化函数
为了演示彩色点云间配准的对齐,draw_registration_result_original_color使用原本的颜色可视化源点云。
# -*- coding: UTF-8 -*-
import copy
import numpy as np
import open3d as o3ddef draw_registration_result_original_color(source, target, transformation):source_temp = copy.deepcopy(source)source_temp.transform(transformation)o3d.visualization.draw_geometries([source_temp, target],zoom=0.5,front=[-0.2458, -0.8088, 0.5342],lookat=[1.7745, 2.2305, 0.9787],up=[0.3109, -0.5878, -0.7468])
输入
下面的代码从两个文件中读取源点云和目标点云。使用单位矩阵作为配准的初始化。
print("1. 加载两点云并可可视化它们间的位姿关系")
source = o3d.io.read_point_cloud("../../test_data/ColoredICP/frag_115.ply")
target = o3d.io.read_point_cloud("../../test_data/ColoredICP/frag_116.ply")# 可视化初始的配准
current_transformation = np.identity(4)
draw_registration_result_original_color(source, target, current_transformation)
点到面的ICP
我们首先运行 Point-to-plane ICP 作为一个基准算法.下面的可视化结果展示了未对齐的绿色三角形纹理.这是因为几何约束不能够防止两个平面的滑动.
# 点到面的ICP
current_transformation = np.identity(4)
print("2. 在原始点云上应用点到平面ICP配准来精准对齐,距离阈值0.02。")result_icp = o3d.pipelines.registration.registration_icp(source, target, 0.02, current_transformation,o3d.pipelines.registration.TransformationEstimationPointToPlane())
print(result_icp)
draw_registration_result_original_color(source, target, result_icp.transformation)
彩色点云配准
# 彩色点云配准
# 在以下论文中实现
# J. Park, Q.-Y. Zhou, V. Koltun,
# Colored Point Cloud Registration Revisited, ICCV 2017
voxel_radius = [0.04, 0.02, 0.01]
max_iter = [50, 30, 14]
current_transformation = np.identity(4)
print("3. 彩色点云配准")
for scale in range(3):iter = max_iter[scale]radius = voxel_radius[scale]print([iter, radius, scale])print("3-1. 下采样的点云的体素大小: %.2f" % radius)source_down = source.voxel_down_sample(radius)target_down = target.voxel_down_sample(radius)print("3-2. 法向量估计.")source_down.estimate_normals(o3d.geometry.KDTreeSearchParamHybrid(radius=radius * 2, max_nn=30))target_down.estimate_normals(o3d.geometry.KDTreeSearchParamHybrid(radius=radius * 2, max_nn=30))print("3-3. 应用彩色点云配准")result_icp = o3d.pipelines.registration.registration_colored_icp(source_down, target_down, radius, current_transformation,o3d.pipelines.registration.TransformationEstimationForColoredICP(),o3d.pipelines.registration.ICPConvergenceCriteria(relative_fitness=1e-6,relative_rmse=1e-6,max_iteration=iter))current_transformation = result_icp.transformationprint(result_icp)
# 可视化
draw_registration_result_original_color(source, target,result_icp.transformation)
Open3d之彩色点云配准相关推荐
- Open3d学习计划—高级篇 2(彩色点云配准)
Open3D是一个开源库,支持快速开发和处理3D数据.Open3D在c++和Python中公开了一组精心选择的数据结构和算法.后端是高度优化的,并且是为并行化而设置的. 本系列学习计划有Blue同学作 ...
- 教程:Python Open3d 完成 ICP 点云配准
Python Open3d 完成 ICP 点云配准 关于Open3d Open3D 是一个在Python和C++平台上的三维数据处理与可视化库.它由 Qian-Yi Zhou,Jaesik Park, ...
- 点云配准(二)— python open3d ICP方法
上一节中介绍了点云配准的基础知识.本节将采用python open3d来进行点云配准. open3d安装和点云配准介绍,请参考: Open3d读写ply点云文件_Coding的叶子的博客-CSDN博客 ...
- Open3d利用彩色图和深度图生成点云进行室内三维重建
上一次得到的点云图在累加多张后配准会出现少量离群的点云,效果很差,于是考虑从 ICL-NUIM dataset这个数据集获得官方的室内图进行三维重建,数据集网址如下: ICL-NUIM RGB-D B ...
- 基于全景图像与激光点云配准的彩色点云生成算法(2014年文章)
标题:The algorithm to generate color point-cloud with the registration between panoramic imageand lase ...
- Open3d学习计划—高级篇 4(多视角点云配准)
本文为转载文章,原创作者为blue同学,可关注他的博客:https://blog.csdn.net/io569417668 Open3D是一个开源库,支持快速开发和处理3D数据.Open3D在c++和 ...
- Open3d系列 | 1. Open3d实现点云数据读写、点云配准、点云法向量计算
如有错误,恳请指出. 从这一篇博客开始,开始利用Open3d来处理点云数据.之后将围绕点云数据的多种处理方式来记录笔记.本篇博客的内容包括点云的文件格式介绍,点云数据的读取,以及点云的配准与点云的法向 ...
- Open3d读写ply点云文件
1 Open3d 安装 Open3d是由Intel发布的一个开源库,支持快速开发和处理3D数据.Open3D在c++和Python中公开了一组精心选择的数据结构和算法.后端是高度优化的,并且是为并行化 ...
- Open3d读写pcd点云文件
1 Open3d 安装 Open3d是由Intel发布的一个开源库,支持快速开发和处理3D数据.Open3D在c++和Python中公开了一组精心选择的数据结构和算法.后端是高度优化的,并且是为并行化 ...
最新文章
- 解决element-ui表头错位的问题
- 学python就业要看哪些书-编程0基础自学Python,踩完这些坑,我才成功就业!
- DataReader 要在事务提交前 CLOSE 掉 否则会报一个:已有打开的与此命令相关联的 DataReader,必须首先将它关闭。...
- vue2.0 创建项目
- CTF-杂项之工具使用汇总(一)
- [Angular 依赖注入详谈] Angular Module Providers几种类型的实现源代码具体位置
- centos关闭防火墙
- c++读取文件夹下特定文件
- 一例WINDOWS系统上的JAVA UI卡死
- 求任意一个点到任意函数曲线或曲线方程(参数方程)上最近距离点的通用方法,含Matlab实现代码
- 0002深度学习初体验-基于Tensorflow and Keras 实现卷积神经网络(CNN-AlexNET)实现CIFAR图像训练
- 牛腩新闻发布--本地超链接打不开
- Linux修改fstab引起系统无法启动问题的解决方法
- 一键式免费借还的智能充电宝租赁
- 解决Windows缺少MSCOMCTL.OCX文件无法运行程序问题
- Excel:12 个操作小技巧
- 什么是Watchdog?
- win10如何升级成win11系统
- 如何把自己打造成为一名金领架构师-开悟篇
- 虚拟机RedHatEenterpriseLinux5安装及Oracle10.2.0安装手记收藏
热门文章
- Chrome下的语音控制框架MyVoix.js使用篇(二)
- VMWare安装Ubuntu 12.04开启虚拟机的Unity Mode模式
- windows2003与文件共享有关的几个进程
- Ubuntu中Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- Dell服务器RAID常用管理命令总结
- MegaCli常见命令
- IT 日语学习 2012 06
- agent python实现 建模_零基础三天学会Python爬虫(第二天)
- 【Postgresql】pg掉电后无法重启
- 【Python-3.5】绘制随机漫步图