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

news2024/11/15 17:33:51

目录

一、概述

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提取特征点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2102478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32 外部中断(EXTI)

STM32 外部中断(EXTI) 实验:配置一个引脚的下降沿作为外部中断。 参考:江协科技 相关缩写 RCC(Reset and Clock Control) 复位和时钟控制 GPIO(General Purpose Input/Output) 通用输入/输出 AFIO(Alternate Function Input Output) 复用功能输入输…

6.Lab five —— Lazy Page Allocation

首先先切换到lazy分支 git checkout lazy make clean Xv6应用程序使用sbrk()系统调用向内核请求堆内存。sbrk()分配物理内存并将其映射到进程的虚拟地址空间。内核为一个大请求分配和映射内存可能需要很长时间。为了提高效率,故采用懒分配的策略 Eliminate alloc…

Scratch在线玩:3D地铁跑酷

小虎鲸Scratch资源站-免费Scratch作品源码,素材,教程分享平台! 作品介绍: 欢迎体验在 Scratch 上重新制作的 3D 地铁跑酷游戏!这款游戏完全采用 3D 技术打造,带来流畅的视觉效果和出色的游戏体验。游戏的目标是避免列车和障碍物,同…

力扣 1419. 数青蛙

力扣 1419. 数青蛙 1. 题目 2. 思路 本题就是一道 字符串模拟题; 题目说到了, 会混杂着青蛙的叫声, 如果字符串 croakOfFrogs 不是由若干有效的 “croak” 字符混合而成,请返回 -1, 那就是说如果有多余的 c, r, o等等, 比如 &quo…

【机器学习】机器学习引领未来:赋能精准高效的图像识别技术革新

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀目录 🔍1. 引言📒2. 机器学习基础与图像识别原理🍁机器学习概述:监督学习、无监督学习与强化学…

「深入理解」HTML Meta标签:网页元信息的配置

「深入理解」HTML Meta标签&#xff1a;网页元信息的配置 HTML的<meta>元素用于提供关于HTML文档的元数据&#xff08;metadata&#xff09;&#xff0c;这些信息对于浏览器和其他处理HTML文档的应用程序来说是非常有用的&#xff0c;如&#xff1a;<base>、<li…

虚幻引擎VR游戏开发02 | 性能优化设置

常识&#xff1a;VR需要保持至少90 FPS的刷新率&#xff0c;以避免用户体验到延迟或晕眩感。以下是优化性能的一系列设置&#xff08;make sure the frame rate does not drop below a certain threshold&#xff09; In project setting-> &#xff08;以下十个设置都在pr…

用于全栈自动化测试的最佳Python工具

我知道大多数测试人员会说Java是他们创建自动化测试的首选语言。 但是我最喜欢的是Python。为什么?为什么是Python ? Al Sweigart&#xff0c;《自动化那些无聊的东西》的作者&#xff0c;Python一直是他的首选语言&#xff0c;因为:它有一个温和的学习曲线。它适用于Windows…

42.哀家要长脑子了!

1.965. 单值二叉树 - 力扣&#xff08;LeetCode&#xff09; 深度优先搜索&#xff0c;看边两端的结点是不是一样的值 class Solution { public:bool isUnivalTree(TreeNode* root) {if(!root) return true;if(root->right) {if(root->val ! root->right->val || …

数字图像处理基础:图像处理概念、步骤、方式介绍

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

5.2.数据结构-c/c++二叉树详解(下篇)(算法面试题)

本章所有代码请见&#xff1a;5.3.数据结构-c/c二叉树代码-CSDN博客 上篇:5.数据结构-c/c二叉树详解(上篇)&#xff08;遍历方法&#xff0c;完全二叉树&#xff09;-CSDN博客 目录 1 求二叉树 第k层的节点 2 查找一个节点是否在二叉树中 3 求二叉树节点的个数 4 求二叉树…

c#笔记5 详解事件的内置类型EventHandler、windows事件在winform中的运用

为什么要研究这一问题&#xff1f; 事件和委托可以说是息息相关。 前面先解释了什么是委托&#xff0c;怎么定义一个委托以及怎么使用匿名方法来内联地新建委托。 事实上事件这一机制在c#的程序开发中展很重要的地位&#xff0c;尤其是接触了winform软件开发的同学们应该都知…

chapter12-异常(Exception)——(注解)——day14

444-异常处理入门 445-异常基本介绍 446-异常体系图 虚线代表 实现接口&#xff0c;实线代表继承 447-五大运行时异常 448-异常课堂练习 449-异常处理机制 450-tryCatch异常处理 1&#xff09;如果异常发送&#xff0c;则异常发生后面的代码不会执行&#xff0c;直接进入到Catc…

接口报错403 Forbidden 【已解决】

接口报错403 Forbidden 【已解决】 在Web开发中&#xff0c;接口请求错误是开发者经常遇到的问题之一。其中&#xff0c;403 Forbidden错误尤为常见&#xff0c;它表明服务器理解了客户端的请求&#xff0c;但是拒绝执行此请求。本文将深入探讨接口请求403 Forbidden错误&#…

iMazing 3官方中文版软件新功能全面解析,最好用的ios设备管理软件

iMazing 3是一款专为iOS设备设计的全面管理软件&#xff0c;想要更换设备的用户&#xff0c;iMazing 3的数据迁移功能能确保无缝切换。iMazing 3不仅提供了强大的备份和恢复功能&#xff0c;确保用户数据安全无虞&#xff0c;还实现了设备与电脑间的高效文件传输。无论是照片、…

浅析SVG无功补偿器在新能源发电中的应用

引言 随着新能源技术的不断进步&#xff0c;光伏发电已经崛起为未来能源发展的一个关键领域&#xff0c;各地纷纷建立起越来越多的光伏电站。然而&#xff0c;光伏发电领域仍面临诸多挑战&#xff0c;包括电网电压不稳定、发电过剩以及电压波动等问题。在这样的背景下&#xf…

《零散知识点 · Kafka 知识拓展》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

【教学类-56-04】数感训练——数字04(中2班寻找自己的学号数字,1号-29号,出现5-10\10-15\15-20次)

背景需求&#xff1a; 今天有个客户购买“学号版的数感训练” 我找到文件夹&#xff0c;发现里面没有1-40号的学号数感&#xff0c;只有上学期为重4班制作的1-31号&#xff08;其中缺了1和7号&#xff09;的数感训练模版 于是用代码重新生成 【教学类-56-03】数感训练——数字…

HarmonyOS开发实战( Beta5版)Swiper高性能开发指南

背景 在应用开发中&#xff0c;Swiper 组件常用于翻页场景&#xff0c;比如&#xff1a;桌面、图库等应用。Swiper 组件滑动切换页面时&#xff0c;基于按需加载原则通常会在下一个页面将要显示时才对该页面进行加载和布局绘制&#xff0c;这个过程包括&#xff1a; 如果该页面…

学习算法需要数学知识吗?

目录 算法与数学:看似不可分割的关系常见算法中的数学元素案例分析:不需要高深数学知识的算法1. 二分查找2. 深度优先搜索 (DFS)3. 动态规划:斐波那契数列 如何在有限的数学背景下学习算法1. 专注于算法的逻辑和过程2. 可视化算法流程3. 从简单的实现开始,逐步优化4. 学习算法设…