open3d点云配准函数registration_icp
文章目录
- 基本原理
- open3d调用
- 绘图
基本原理
ICP, 即Iterative Closest Point, 迭代点算法。
ICP算法有多种形式,其中最简单的思路就是比较点与点之间的距离,对于点云P={pi},Q={qi}P=\{p_i\}, Q=\{q_i\}P={pi},Q={qi}而言,如果二者是同一目标,通过旋转、平移等操作可以实现重合的话,那么只需要固定QQQ而不断地旋转或平移PPP,最终二者一定能最完美地重合。
设旋转PPP的矩阵为RRR,平移矩阵为ttt,在完美匹配的情况下,必有qi=Rpi+tq_i = Rp_i + tqi=Rpi+t。
又因三维点云不具备栅格特征,故而很难保证qiq_iqi和pip_ipi是同一点,所以要使得目标函数最小化
arg minR,t12∑i=1n∥qi−Rpi−t∥2\argmin_{R,t}\frac{1}{2}\sum^n_{i=1}\Vert q_i-Rp_i-t\Vert^2 R,targmin21i=1∑n∥qi−Rpi−t∥2
1992年Chen和Medioni对此方案进行了改进,提出了点对面的预估方法,其目标函数为
arg minR,t12∑i=1n[(qi−Rpi)⋅np]2\argmin_{R,t}\frac{1}{2}\sum^n_{i=1}[(q_i-Rp_i)\cdot n_p]^2 R,targmin21i=1∑n[(qi−Rpi)⋅np]2
其中npn_pnp是点ppp的法线,这种方案显然效率更高。
open3d调用
open3d中实现了ICP算法,参数如下
registration_icp(source, target, max_correspondence_distance, init, estimation_method, criteria)
source为点云PPP,target为目标点云QQQ,max_correspondence_distance为匹配点在未匹配时的最大距离,init为初始变化矩阵,默认为单位矩阵;criteria为精度。
estimation_method可以理解为上面提到的两种方案,下面选择点对点ICP方法进行计算
import numpy as np
import open3d as o3dpipreg = o3d.pipelines.registrationpcd = o3d.data.DemoICPPointClouds()
src = o3d.io.read_point_cloud(pcd.paths[0])
tar = o3d.io.read_point_cloud(pcd.paths[1])
th = 0.02
trans_init = np.array([[0.862, 0.011, -0.507, 0.5], [-0.139, 0.967, -0.215, 0.7],[0.487, 0.255, 0.835, -1.4], [0.0, 0.0, 0.0, 1.0]])reg = pipreg.registration_icp(src, tar, th, trans_init,pipreg.TransformationEstimationPointToPoint())print(reg.transformation)
''' 变换矩阵
[[ 0.83924644 0.01006041 -0.54390867 0.64639961][-0.15102344 0.96521988 -0.21491604 0.75166079][ 0.52191123 0.2616952 0.81146378 -1.50303533][ 0. 0. 0. 1. ]]
'''
print(reg)
print(reg)的返回信息如下,表示点云配准的拟合程度
RegistrationResult with fitness=3.724495e-01, inlier_rmse=7.760179e-03, and correspondence_set size of 74056 Access transformation to get result.
绘图
为了对比配准前后的区别,对src和tar放在图中对比
import copy
srcDraw = copy.deepcopy(src)
tarDraw = copy.deepcopy(tar)
srcDraw.paint_uniform_color([1, 1, 0])
tarDraw.paint_uniform_color([0, 1, 1])
srcDraw.transform(tf)
o3d.visualization.draw_geometries([srcDraw, tarDraw])
此为原图,可以看到两组点云完全是错位的

srcDraw = copy.deepcopy(src)
tarDraw.paint_uniform_color([0, 1, 1])
srcDraw.transform(reg.transformation)
o3d.visualization.draw_geometries([srcDraw, tarDraw])
得到结果如下,可见两组不同颜色的点云已经几乎重合到了一起

相关文章:
open3d点云配准函数registration_icp
文章目录基本原理open3d调用绘图基本原理 ICP, 即Iterative Closest Point, 迭代点算法。 ICP算法有多种形式,其中最简单的思路就是比较点与点之间的距离,对于点云P{pi},Q{qi}P\{p_i\}, Q\{q_i\}P{pi},Q{qi}而言,如果二者是同一目标&am…...
HTML编码规范
本篇文章是基于王叨叨大佬师父维护的文档梳理的,有兴趣可以去看一下原文HTML编码规范。 1. 缩进与换行 【建议】 使用 2 个空格作为一个缩进层级,不允许使用tab字符 解释: 具体项目,可以使用2个空格,也可以使用…...
PDF SDK for Linux 8.4.2 Crack
PDF SDK for Linux 是适用于任何 Linux 企业或云应用程序的强大解决方案,非常适合需要完全可定制的 PDF 查看器或后端流程的任何 Linux 开发人员。 将 Foxit PDF SDK 嵌入到基于 Linux 的应用程序中非常容易。只需打开您最喜欢的 Linux IDE,复制您需要的…...
vb 模块和作用域的关系
模块在VB中有三种类型的模块,分别是窗体模块、标准模块和类模块。窗体模块窗体模块中包含了窗体以及窗体中所有控件的事件过程,文件扩展名为(*.frm),窗体文件中不仅包含窗体对象的外观设计,也包含窗体模块(…...
Redis分布式锁
一、背景 与分布式锁相对应的是「单机锁」,我们在写多线程程序时,避免同时操作一个共享变量产生数据问题,通常会使用一把锁来「互斥」,以保证共享变量的正确性,其使用范围是在「同一个进程」中。单机环境下࿰…...
京东前端经典面试题整理
img的srcset属性的作⽤? 响应式页面中经常用到根据屏幕密度设置不同的图片。这时就用到了 img 标签的srcset属性。srcset属性用于设置不同屏幕密度下,img 会自动加载不同的图片。用法如下: <img src"image-128.png" srcset&qu…...
django+mysql实现一个简单的web登录页面
目录 一、使用pyacharm创建一个django项目 二、启动django项目验证 三、配置mysql数据库 1、本地安装mysql数据库 1)安装mysql数据库 2)自己创建一个数据库 2、安装 pymysql 3、配置mysql数据库 1)在项目同名包下的_init_.py里面添加…...
python cartopy手动导入地图数据绘制底图/python地图上绘制散点图:Downloading:warnings/散点图添加图里标签
……开学回所,打开电脑spyder一看一脸懵逼,简直不敢相信这些都是我自己用过的代码,想把以前的自己喊过来科研了() 废话少说,最近写小综述论文,需要绘制一个地图底图+散点图ÿ…...
JavaScript中常用的数组方法
在日常开发中,我们会接触到js中数组的一些方法,这些方法对我们来说,可以很便利的达到我们想要的结果,但是因为方法比较多,有些方法也不常用,可能会过一段时间就会忘记,那么在这里我整理了一些数…...
磁疗为什么“没效果”?原来真相是这样!
很多人磁疗之后, 总爱迫不及待问一个问题: “这个多长时间见效啊?” …… 还有些人几天没有效果, 就果断下结论: “这东西没用!” …… 有不少人错误地把磁疗等同于“药品”一样看待,总觉得…...
【直击招聘C++】5.1函数模板
5.1函数模板一、要点归纳1.定义函数模板2.实例化函数模板3.重载模板函数4.函数调用的匹配顺序一、要点归纳 1.定义函数模板 定义函数模板的一般格式如下: template<类型形参表> 返回类型 函数名(形参表) {函数体; }例如以…...
谈谈Java多线程离不开的AQS
如果你想深入研究Java并发的话,那么AQS一定是绕不开的一块知识点,Java并发包很多的同步工具类底层都是基于AQS来实现的,比如我们工作中经常用的Lock工具ReentrantLock、栅栏CountDownLatch、信号量Semaphore等,而且关于AQS的知识点…...
国际化语言,多语言三种方式
可以用透传的方式,自己写local的json文件,不需要配置什么,直接传,自己写方法i18n nextjsi18n umi4一、透传的方式 export const AppContext React.createContext<any>({})app.tsx 用context包裹import type { AppProps } f…...
C++——哈希3|位图
目录 常见哈希函数 位图 位图扩展题 位图的应用 常见哈希函数 1. 直接定址法--(常用) 这种方法不存在哈希冲突 取关键字的某个线性函数为散列地址:Hash(Key) A*Key B 优点:简单、均匀 缺点:需要事先知道关键字的…...
75 error
全部 答对 答错 选择题 3. 某公司非常倚重预测型方法交付项目,而其招聘的新项目经理却习惯于运用混合型方法。项目范围包含很多不清晰的需求。项目经理应该如何规划项目的交付? A company that is heavily focused on delivering projects using predi…...
ESP-C3入门8. 连接WiFi并打印信息
ESP-C3入门8. 连接WiFi并打印信息一、ESP32 连接WiFi的基本操作流程1. 初始化nvs存储2. 配置WiFi工作模式3. 设置WiFi登陆信息4. 启动WiFi5. 开启连接6. 判断是否成功二、事件处理函数1. 定义事件处理函数2. 创建事件组3. 在事件处理函数中设置事件组位4. 在其他任务中等待事件…...
使用python将EXCEL表格中数据转存到数据库
使用Python将excel表格中数据转存到数据库 1. 思路: 1) 使用python读取excel表格中数据 2)根据数据生成sql语句 3)批量运行sql语句 2. 代码: import pandas as pddef readExcel(path, excel_file):return pd.read_e…...
【C++】类和对象(三)
目录 一、构造函数补充 1、初始化列表 1.1、初始化列表概念 1.2、初始化列表性质 2、explicit关键字 二、static成员 1、概念及使用 2、性质总结 三、友元 1、友元函数 2、友元类 四、内部类 五、拷贝对象时的一些编译器优化 一、构造函数补充 在《类和对象&#x…...
vTESTstudio - VT System CAPL Functions - General/Trigger Function
前面文章中我们已经介绍了常用的几种板卡的基本信息,那这些板卡该如何去通过软件调用呢?带着这个问题我们开始新的一块内容 - VT系统相关的自动化控制函数介绍,我会按照不同的板卡来分类,对其可控制的函数进行介绍,方便…...
IDEA 快捷键
ctrlD :复制当前行到下一行 ctrlO : 重写当前类的方法 ctrlshiftu : 大小写转化 Alt 上/下 :跳到上一个、下一个函数 Alt 左/右 : 回到上一个、下一个文件 Alt 回车 : 代码修正 Alt Insert : 插入代码 Ctrl Alt L …...
鸿蒙一气总论(四)
第四卷 文明溯源四域同源 华夏主脉定宗 卷首引 天地既定,人神分途,万物安立,四海生民逐水土而居。 四方之地,山川不同、水土异质、气运有别, 然归根溯源,同承鸿蒙一气,共禀混元道体。 四大…...
5G载波聚合(CA)技术解析:提升网络速度与容量的关键手段
5G载波聚合(CA)技术解析:提升网络速度与容量的关键手段 在5G通信技术不断演进的进程中,载波聚合(Carrier Aggregation,简称CA)作为一项重要技术,正逐渐成为提升网络性能、满足用户多…...
HCIA前三章综合实验报告
实验要求按照图示配置IP地址完成路由器之间的协议配置构建需求的环境,配置MGRE,GRE测试全网通实验配置(1)配置IP地址[R1-GigabitEthernet0/0/0]ip address 192.168.1.2 24[R1-Serial4/0/0]ip address 15.1.1.1 24[R2-GigabitEther…...
3篇6章3节:半眼图与全眼图,分布形态与不确定性表达的统一可视化方法
在现代数据科学与医学统计分析中,数据可视化的目标已从单纯展示数值变化,逐步转向同时刻画“分布结构”与“统计不确定性”。传统箱线图虽然能够提供中位数与四分位数范围,但其表达方式过于离散,难以反映数据的连续分布形态;小提琴图虽然引入核密度估计,能够展示分布形状…...
前端工程化:依赖管理最佳实践
前端工程化:依赖管理最佳实践 前言 依赖管理是前端工程化的基础!如果你的项目依赖管理混乱,那你的项目就像一个堆满杂物的仓库,难以维护。今天我就来给大家讲讲前端依赖管理的最佳实践。 为什么需要依赖管理 版本控制:…...
英文论文降AI教程:从97%到8%,2026实测的4种文本结构级优化方法
大家最近都在为英文降aigc率发愁吧,作为研三党,我太懂这种痛了,之前我自己写英文初稿,写完直接拿去查重,结果turnitin检测ai率飙到了89%,当时看着报告整个人都懵了。 怎么给英文降ai?对于非母语…...
【Linux】权限相关指令
1.将命令翻译后交给核心执行2.将核心执行的结果翻译并返回给我们形象理解shell:假如小y过年回家打算相亲了,打算小y并不擅长与异性交流,这时候就拜托了媒人王姨作为中间人,帮忙小y和异性之前传话。这时候王姨就是“外壳程序”shel…...
AMD Ryzen终极性能调优秘籍:5个高效调试技巧让你完全掌控处理器性能
AMD Ryzen终极性能调优秘籍:5个高效调试技巧让你完全掌控处理器性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址…...
2026年奖杯批发源头厂商实力复盘,长沙嘉誉天成工艺品有限公司为何成为行业标杆企业
在各类表彰活动、赛事庆典中,奖杯作为荣誉象征,承载着组织者对获奖者的认可与激励。无论是企业年会的公司奖杯,还是体育赛事的冠军奖杯,其品质直接影响活动效果与品牌形象。作为深耕行业近二十年的专业服务商,长沙嘉誉…...
Diablo Edit2:暗黑破坏神2角色编辑器完全指南,3步打造完美游戏体验
Diablo Edit2:暗黑破坏神2角色编辑器完全指南,3步打造完美游戏体验 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 你是否曾经在暗黑破坏神2中花费数十小时刷装备却一无所获…...
