当前位置: 首页 > news >正文

Open3D 基于曲率大小的特征点提取

目录

一、概述

1.1原理

1.2实现步骤

1.3应用场景

二、代码实现

三、实现效果

3.1原始点云

3.2提取特征点


Open3D点云算法汇总及实战案例汇总的目录地址:

Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客


一、概述

        基于曲率大小的特征点提取是一种常见的点云处理方法,用于识别和提取点云中具有显著几何特征的关键点。通过计算点云中每个点的曲率,并选择曲率较大的点作为特征点,可以在点云中保留那些具有明显形状变化的区域,如边缘、角点等。这种方法在三维重建、物体识别和特征匹配等领域有广泛的应用。

1.1原理

        曲率反映了点云表面局部区域的弯曲程度,是描述几何特征的重要指标。在曲率特征点提取中,首先计算每个点的曲率值,然后根据设定的阈值选择曲率较大的点作为特征点。曲率的计算基于每个点的法向量和其邻域点的分布,通常采用协方差矩阵的特征值分解来实现。

1.2实现步骤

  1. 加载点云数据: 使用 Open3D 加载点云文件。
  2. 法向量估计: 通过 K 近邻搜索计算每个点的法向量。
  3. 计算曲率: 计算每个点的曲率值,并保存在一个数组中。
  4. 提取特征点: 根据设定的曲率阈值,选择曲率较大的点作为特征点。
  5. 特征点放大和颜色区分: 将特征点的坐标略微放大,并使用鲜艳颜色标记,以便与原始点云区分。
  6. 可视化结果: 显示原始点云和特征点,便于比较和分析。

1.3应用场景

  • 三维重建: 提取点云中的特征点用于物体的三维重建,提高重建精度。
  • 物体识别: 基于特征点的分布,进行物体识别和匹配。
  • 特征匹配: 提取特征点用于点云的配准和特征匹配,尤其在多视角点云合成中应用广泛。

二、代码实现

import open3d as o3d
import numpy as np# 加载点云数据
pcd = o3d.io.read_point_cloud("person2.pcd")# 显示原始点云
print("Displaying original point cloud...")
o3d.visualization.draw_geometries([pcd], window_name="Original Point Cloud", width=800, height=600)# 估计法向量
pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))# 计算每个点的曲率
pcd_tree = o3d.geometry.KDTreeFlann(pcd)
curvatures = np.zeros(len(pcd.points))for i in range(len(pcd.points)):[_, idx, _] = pcd_tree.search_knn_vector_3d(pcd.points[i], 30)neighbors = np.asarray(pcd.points)[idx, :]covariance_matrix = np.cov(neighbors.T)eigenvalues, _ = np.linalg.eigh(covariance_matrix)curvatures[i] = eigenvalues[0] / np.sum(eigenvalues)# 根据曲率提取特征点
curvature_threshold = 0.1  # 设置曲率阈值
indices = np.where(curvatures > curvature_threshold)[0]
feature_pcd = pcd.select_by_index(indices)# 将特征点放大以便区分
feature_points = np.asarray(feature_pcd.points)
feature_points_scaled = feature_points * 1.02  # 略微放大特征点位置# 创建放大的特征点点云
feature_pcd_scaled = o3d.geometry.PointCloud()
feature_pcd_scaled.points = o3d.utility.Vector3dVector(feature_points_scaled)
feature_pcd_scaled.paint_uniform_color([1, 0, 0])  # 红色显示特征点# 灰色显示原始点云
pcd.paint_uniform_color([0.5, 0.5, 0.5])# 可视化特征点与原始点云
print("Displaying feature points based on curvature...")
o3d.visualization.draw_geometries([pcd, feature_pcd_scaled], window_name="Feature Points", width=800, height=600)

三、实现效果

3.1原始点云

3.2提取特征点

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微信小程序中如何监听元素进入目标元素
  • stm32F103 串口2 中断 无法接收指定字符串 [已解决]
  • 用idea写Spark程序时,想要在控制台打印日志?
  • class 6: vue.js 3 组件化开发
  • 微服务--Nacos配置管理
  • axios返回的是promise对象如何处理?
  • Mysql高阶语句(1)
  • Python教程:使用 Python 和 PyHive 连接 Hive 数据库
  • HALCON 错误代码 #7709
  • 缓存分布式一致性问题
  • Golang 小项目(3)
  • 【重学 MySQL】六、MySQL 的下载、安装、配置
  • npm、yarn、pnpm小节
  • css三点闪烁(可用于加载样式、标题等)
  • AWS EC2安全组配置:轻松开放端口访问
  • 网络传输文件的问题
  • 【Leetcode】101. 对称二叉树
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • 30天自制操作系统-2
  • css系列之关于字体的事
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JS 面试题总结
  • PHP CLI应用的调试原理
  • Python学习之路13-记分
  • Vue全家桶实现一个Web App
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 回顾2016
  • 基于Android乐音识别(2)
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 移动端唤起键盘时取消position:fixed定位
  • ​configparser --- 配置文件解析器​
  • ​马来语翻译中文去哪比较好?
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #### golang中【堆】的使用及底层 ####
  • #if和#ifdef区别
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (11)MATLAB PCA+SVM 人脸识别
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (solr系列:一)使用tomcat部署solr服务
  • (二)windows配置JDK环境
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (论文阅读40-45)图像描述1
  • (四) Graphivz 颜色选择
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 中让 Task 支持带超时的异步等待
  • .NET单元测试使用AutoFixture按需填充的方法总结