1.open3d处理点云数据的常见方法
1. 点云的读取、可视化、保存
在这里是读取的点云的pcd文件,代码如下:
import open3d as o3dif __name__ == '__main__':#1.点云读取point= o3d.io.read_point_cloud("E:\daima\huawei\img\change2.pcd")print("====>",point)#2.点云可视化o3d.visualization.draw_geometries([point])# 4.保存点云o3d.io.write_point_cloud("1.pcd", point, write_ascii=True)
2. 常见的点云处理方法
2.1 显示点云法向量
代码如下:
#3.显示法向量radius=0.01 # 搜索半径max_nn=30 # 邻域内用于估算法线的最大点数pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius,max_nn))o3d.visualization.draw_geometries([pcd],window_name="o3d",width=1920,height=1080,#left=50,top=50,point_show_normal=True)
2.2 素体质心下采样
原理:体素下采样(Voxel downsampling)采用规则体素格网从输入点云中创建分布均匀的下采样点云,是许多点云处理任务的预处理步骤。该算法主要分为两步:创建指定大小(分辨率)的体素网络;当点云中至少有一个点落在某个体素内,则认为该体素被占用,体素的颜色(属性)是该体素内所有点的平均值。
计算如下:
代码如下:
downpcd = point.voxel_down_sample(voxel_size=0.05)#voxel_size表示体素网格的距离,对该距离范围内的所有点求平均值,即为密度为1的质心
o3d.visualization.draw_geometries([downpcd])
2.3 点云的正态分布
原理:离散的数据匹配,包括图像,点云等数据,很难基于匹配的连续的评估函数,使之难以匹配到一个可微的优化框架中求解。为了解决该问题,我们希望能够为离散的数据形式建立一个相对连续的表示形式,并得到连续可导的评价函数。基于此,NDT被提出。其具体步骤为:
1). 将离散数据划分在不同的区域中;
2). 在每一个区域,求中点:
3). 计算子区域中基于每一个点到中点差值的协方差矩阵:
4). 得到针对于离散数据的NDT表示形式N,具体表示为:
可以看到,NDT的形式是一个基于概率分布的表示形式。下图给出一个直观的示例,来实现对NDT的可视化。
之前我们提到,之所以建立这样一种形式,是为了得到一个针对匹配评估的一个连续的函数形式,以方便建立优化。基于NDT的表示形式,这个评估函数就能够被构建:
Score代表我们希望得到的评估函数,p是自变量,也是匹配希望获得的变换矩阵。与ICP一致,p由旋转与平移组成:
整个NDT算法的步骤可以精简为6步:
1). 对一个点云P1或图像建立其NDT表示形式;
2). 初始化参数p(赋0或某一个间隔数据);
3). 将另外一个准备匹配的点云P2或图像的点按照p变换;
4). 计算Score (xi为P2的一个点,xi‘为xi经过p变换后的位置),如果满足退出条件,则退出;
5). 使用牛顿法建立对p的更新;
6). Loop step 3。
在交互页面,可以通过N查看点法线,+,-控制法线长度。
作为点云的基本操作之一,点云正态估计通过指定算法参数估测每个点可能的法向量,estimate_normals查找指定搜索半径内的临近点,通过这些临近点的协方差计算其主轴,从而估计法向量。正常情况下会产生两个方向相反的法向量,在不知道几何体的全局结构下,两者都可以是正确的。Open3D会尝试调整法线的方向,使其与原始法线对齐。
代码如下:
downpcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))o3d.visualization.draw_geometries([downpcd],zoom=0.3412,front=[0.4257, -0.2125, -0.8795],lookat=[2.6172, 2.0475, 1.532],up=[-0.0694, -0.9768, 0.2024],point_show_normal=True)
2.4 引导滤波
原理:引导滤波 Guilter Filter:主要作用是消除或减少噪声,同时保留对目标有用的关键信息。引导滤波器通常会利用一部分已经分类或者标记的点云数据(通常被称为“引导点”或“引导数据”)来指导滤波过程,通过优化这些引导点的分布来达到滤波的效果。这种方法可以有效地减少滤波过程中的噪声,同时保留对目标有用的关键信息。
具体来说,引导滤波器可以用于以下情况:
1.减少噪声:引导滤波器通过利用一部分已知的、可靠的点云数据来指导滤波过程,可以有效地减少噪声的影响,提高点云的精度和准确性。
2.简化数据结构:引导滤波器可以自动地选择并删除不重要的点,从而简化点云数据结构,降低数据处理和分析的难度。
3.提高特征提取的准确性:引导滤波器可以通过去除无关或冗余的点,提高后续特征提取的准确性,从而更好地进行3D物体识别、检测和建模等任务。
代码如下:
import open3d as o3d
import numpy as npif __name__ == '__main__':# 1.首先读取原始点云和求异点云point= o3d.io.read_point_cloud("E:\daima\huawei\img\change2.pcd",remove_nan_points=True,remove_infinite_points=True)point2 = o3d.io.read_point_cloud("1.pcd", remove_nan_points=True,remove_infinite_points=True)dist = point2.compute_point_cloud_distance(point)idx = [i for i, distance in enumerate(dist) if distance > 0.5]# 最后将点云中相同的部分和不同的部分分别取出来进行显示same_part = point2.select_by_index(idx)diff_part = point2.select_by_index(idx, invert=True)same_part.paint_uniform_color([0, 0, 1])diff_part.paint_uniform_color([1, 0, 0])o3d.visualization.draw_geometries([same_part, diff_part])
相关文章:
1.open3d处理点云数据的常见方法
1. 点云的读取、可视化、保存 在这里是读取的点云的pcd文件,代码如下: import open3d as o3dif __name__ __main__:#1.点云读取point o3d.io.read_point_cloud("E:\daima\huawei\img\change2.pcd")print(">",point)#2.点云可视…...
https和http有什么区别,为什么要用https
HTTPS(Hypertext Transfer Protocol Secure)和HTTP(Hypertext Transfer Protocol)之间的主要区别在于安全性。 安全性: HTTP是一种明文传输协议,数据在客户端和服务器之间以明文形式传输,容易…...
微前端框架主流方案剖析
微前端架构是为了在解决单体应用在一个相对长的时间跨度下,由于参与的人员、团队的增多、变迁,从一个普通应用演变成一个巨石应用(Frontend Monolith)后,随之而来的应用不可维护的问题。这类问题在企业级 Web 应用中尤其常见。 微前端框架内的各个应用都支持独立开发部署、不…...
安卓逆向之-Xposed RPC
引言: 逆向为最终的协议,或者爬虫的作用。 有几种方式,比如直接能力强,搞成协议。 现在好多加密解密都写入到so ,所以可以使用unidbg 一个可以模拟器so 执行的环境的开源项目。RPC 调用,又分为Frida, 还有今天讲的Xposed RPC。 原理: Xposed 可以hook ,然后可以直接…...
【排序 贪心】3107. 使数组中位数等于 K 的最少操作数
算法可以发掘本质,如: 一,若干师傅和徒弟互有好感,有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二,有无限多1X2和2X1的骨牌,某个棋盘若干格子坏了,如何在没有坏…...
预览pdf文件和Excel文件
开发的时候要一个可上传下载预览的静态页面以下是数据html <el-table v-loading"loading" :data"fileList" selection-change"handleSelectionChange"><el-table-column type"selection" width"55" align"ce…...
RT-thread线程间同步:事件集/消息队列/邮箱功能
一,事件集 1,事件集作用 事件集主要用于线程间的同步,与信号量不同,它的特点是可以实现一对多,多对多的同步。即一个线程与多个事件的关系可设置为:其中任意一个事件唤醒线程,或几个事件都到达后才唤醒线程进行后续的处理;同样事件也可以是多个线程同步多个事件。 2,…...
【机器学习】一文掌握机器学习十大分类算法(上)。
十大分类算法 1、引言2、分类算法总结2.1 逻辑回归2.1.1 核心原理2.1.2 算法公式2.1.3 代码实例 2.2 决策树2.2.1 核心原理2.2. 代码实例 2.3 随机森林2.3.1 核心原理2.3.2 代码实例 2.4 支持向量机2.4.1 核心原理2.4.2 算法公式2.4.3 代码实例 2.5 朴素贝叶斯2.5.1 核心原理2.…...
策略模式(知识点)——设计模式学习笔记
文章目录 0 概念1 使用场景2 优缺点2.1 优点2.2 缺点 3 实现方式4 和其他模式的区别5 具体例子实现5.1 实现代码 0 概念 定义:定义一个算法族,并分别封装起来。策略让算法的变化独立于它的客户(这样就可在不修改上下文代码或其他策略的情况下…...
Python学习从0开始——专栏汇总
Python学习从0开始——000参考 一、推荐二、基础三、项目一 一、推荐 Hello World in Python - 这个项目列出了用Python实现的各种"Hello World"程序。 Python Tricks - 这个项目包含了Python中的高级技巧和技术。 Think Python - 这是一本教授Python的在线书籍&…...
【iOS ARKit】Web 网页中嵌入 AR Quick Look
在支持 ARKit 的设备上,iOS 12 及以上版本系统中的 Safari浏览器支持 AR Quick Look, 因此可以通过浏览器直接使用3D/AR 的方式展示 Web 页面中的模型文件,目前 Web 版本的AR Quick Look 支持USDZ 格式文件。苹果公司有一个自建的3D模型示例库…...
Java基础-知识点03(面试|学习)
Java基础-知识点03 String类String类的作用及特性String不可以改变的原因及好处String、StringBuilder、StringBuffer的区别String中的replace和replaceAll的区别字符串拼接使用还是使用StringbuilderString中的equal()与Object方法中equals()区别String a new String("a…...
【GIS学习笔记】ArcGIS/QGIS如何修改字段名称、调整字段顺序?
在先前的ArcGIS学习中,了解到字段名称是不能修改的,只能用新建一个字段赋值过去再删除原字段这种方法实现,字段顺序的调整如果通过拖拽也是不能持久的,需要用导出一个新数据这种方法进行保存,可参考以下链接࿱…...
Study Pyhton
PyCharm PyCharm是一个写python代码的软件,用PyCharm写代码比较方便。 PyCharm快捷键ctrl alt s打开软件设置ctrl d复制当前行代码 shift alt 上\下将当前行代码上移或下移crtl shift f10运行当前代码文件shiftf6重命名文件 ctrl a全选ctrl c\v\x复制、粘贴、…...
【MySQL】:深入解析多表查询(下)
🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. 自连接1.1 自连接查询1.2 联合查询 二. 子查询2.1 概述2.2 分类2.3 标量子查…...
图像入门处理4(How to get the scaling ratio between different kinds of images)
just prepare for images fusion and registration ! attachments for some people who need link1 图像处理入门 3...
【项目精讲】Swagger接口文档以及使用方式
Swagger 介绍 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/) 前后端分离开发,有利于团队合作接口的文档在线自动生成,降低后端开发人员编写接口文档的负担功能测试 如何使…...
ThingsBoard通过服务端获取客户端属性或者共享属性
MQTT基础 客户端 MQTT连接 通过服务端获取属性值 案例 1、首先需要创建整个设备的信息,并复制访问令牌 2、通过工具MQTTX连接上对应的Topic 3、测试链接是否成功 4、通过服务端获取属性值 5、在客户端查看对应的客户端属性或者共享属性的key 6、查看整个…...
(78)删除有序数组中的重复项(79)排序矩阵查找
文章目录 1. 每日一言2. 题目(78)删除有序数组中的重复项2.1 解题思路2.2 代码 3. 题目(79)排序矩阵查找3.1 解题思路3.1.1 暴力查找暴力查找代码 3.1.2 二分查找二分查找代码 3.1.3 贪心贪心代码 4. 结语 1. 每日一言 水晶帘动微风起,满架蔷薇一院香。 —高骈- 2.…...
elasticSearch从零整合springboot项目实操
type会被弃用 ,就是说之后的elasticSearch中只会存在 索引(indices) 和 一行(document) 和字段(fields) elasticSearch 和solr的区别最大的就是 es对应的 是 json的格式 。 solr有xml和josn等…...
【Linux实践室】Linux高级用户管理实战指南:用户所属组变更操作详解
🌈个人主页:聆风吟_ 🔥系列专栏:Linux实践室、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 🔔Linux查看用户所属组2.1.1 👻使…...
C语言: 字符串函数(下)
片头 在上一篇中,我们介绍了字符串函数。在这一篇章中,我们将继续学习字符串函数,准备好了吗?开始咯! 1.strncpy函数 1.1 strncpy函数的用法 strncpy是C语言中的一个字符串处理函数,它用于将一个字符串的一部分内容…...
WPF 数据绑定类属性 和数据更新
WPF中数据绑定是一个非常强大的功能,不仅可以绑定后台数据,还可以进行实时更新。 数据绑定实例 : 在后台创建模型类,然后在标签页面进行导入并绑定。 第一步: // 在后台创建模型类 public class MyData {public string Name { get; set; }…...
使用云服务器搭建CentOS操作系统
云服务器搭建CentOS操作系统 前言一、购买云服务器腾讯云阿里云华为云 二、使用 XShell 远程登陆到 Linux关于 Linux 桌面下载 XShell安装XShell查看 Linux 主机 ip使用 XShell 登陆主机 三、无法使用密码登陆的解决办法 前言 CentOS是一种基于Red Hat Enterprise Linux&#…...
unity的引用传递和数组的联系
引用传递 //引用传递 static void SetY(out int x,out int y ){x 0;y 0;x 1000;}static void Main(string[] args){int x 0;int y 10;SetY(out x, out y);Console.WriteLine($"x{x},y{y}");} 结果是:x1000,y0 数组的引用传递 数组值…...
Android bug Unresolved reference: BR
新建项目后 导入viewBinding 编译后提示 Unresolved reference: BR 解决办法 app 目录下 build.gradle 中 plugins 节点 添加 id kotlin-kapt参考 https://stackoverflow.com/questions/77409050/could-not-find-androidx-corecore-ktx1-8-10...
Unity DOTS1.0 入门(1) ECS机制与概述
ECS机制与概述 Entity:实体 由一个一个的Component组合在一起,是连续的内存布局。通过EnitityManager来负责高效的分配和释放相关entity. World:世界 一个entity的集合,在当前世界里面,每个Entity都有唯一不同的entityld;运行时Unity会自动创建一个D…...
root管理员用户启动kibana报错
问题描述: CentOS7.9.2009环境,以root管理员用户启动kibana7.11.1程序报如下错误: Kibana should not be run as root. Use --allow-root to continue. [root@elasticsearch bin]# whoami root [root@elasticsearch bin]# pwd /usr/local/kibana-7.11.1-linux-x86_64/bi…...
【leetcode面试经典150题】50. 插入区间(C++)
【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…...
第二期书生浦语大模型训练营第三次笔记
RAG RAG是什么? RAG(Retrieval Augmented Generation)技术,通过检索与用户输入相关的信息片段,并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺…...
湛江建网站/站优化
Zull实际上就是一个servlet,一个网关的servlet。 public class ZuulServlet extends HttpServlet {private static final long serialVersionUID -3374242278843351500L;private ZuulRunner zuulRunner;Overridepublic void service(javax.servlet.ServletRequest…...
网站运营与管理论文/南宁网络推广平台
1.1.0、学习目的理解 File 类的作用和意义参见 1.1.1 概述部分理解 File 类中的常量的含义和作用参见 1.1.2 常量部分掌握通过构造方法创建 File 实例参见 1.1.3 构造方法 部分掌握 File 类中的实例方法参见 1.1.4 实例方法部分了解 File 类中的类方法参见 1.1.5 类方法 部分理…...
wordpress建站主题/百度搜索官网
取(m堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1466 Accepted Submission(s): 853 Problem Descriptionm堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出…...
山东建设公司网站/360站长平台链接提交
先需求分析一下---传统的web应用是在线应用,这其实也是web的特色,对于PC时代问题并不大,但到了移动互联网时代,设备终端位置不再固定,依赖无线信号,网络的可靠性变得更低。比如:在火车上&#x…...
网上国网推广方案怎么写/知乎关键词排名优化
下面通过一段代码给大家介绍python 使用for 循环实现九九乘法表,具体代码如下所示:#for 循环实现99乘法表for i in range (1,10):for j in range (1,i1):print("{}*{} {:<4}".format(i,j,i*j),end " ")print("")prin…...
网站怎么做前台跟后台的接口/全网推广公司
两种注册类型的区别是: 1)第一种不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。 2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被…...