open3D学习笔记

这里写自定义目录标题

  • 核心3D数据结构
    • 1.1 PointCloud(点云)
      • 最近邻搜索 (KNN/Radius) 与空间索引(KDTree/Octree)
      • 法线估计 (Normal Estimation)
      • 聚类分割 (基于欧氏距离的聚类)
    • 1.2 TriangleMesh (三角形网格)
      • 泊松表面重建 (Poisson Surface Reconstruction)
      • 滚球法 (Ball-Pivoting Algorithm - BPA)
      • 网格简化 (Mesh Simplification)
    • 1.3 VoxelGrid (体素网格)
      • 体素化 (Voxelization)
      • 形态学操作 (Morphological Operations)
    • 1.4 LineSet (线集)
      • 从网格创建线段集(提取网格的边)
      • 从点对创建线段集
      • 线段集的可视化
    • 1.5 总结与关系
  • 输入/输出(I/O)
  • 可视化
  • 几何处理
    • 4.1 体素下采样 (Voxel Downsampling)
    • 4.2 统计离群点去除 (Statistical Outlier Removal - SOR)
    • 4.3 半径离群点去除(Radius Outlier Removal, ROR)
    • 4.4 FPFH (Fast Point Feature Histograms)
    • 4.5 SHOT (Signature of Histograms of Orientations)
    • 4.6 法线估计 (Normal Estimation)
    • 4.7 泊松表面重建 (Poisson Surface Reconstruction)
    • 4.8 总结
  • 配准(Registration)
    • 5.1精配准的基石:迭代最近点算法 (ICP)
    • 5.2 粗配准:基于RANSAC的全局配准
    • 5.3 其他重要功能与评估
    • 5.4 完整配准流程建议
  • 3D机器学习
  • 渲染
  • 物理模拟
  • 数据处理管道

核心3D数据结构

1.1 PointCloud(点云)

  • 原理:点云是最基础、最直接的 3D 数据表示形式,直接来源于大多数 3D 传感器。它记录了物体表面一系列采样点的三维坐标 (x, y, z),并可扩展存储每个点的颜色 (r, g, b)、法线 (nx, ny, nz)、强度等属性。
    在这里插入图片描述
import open3d as o3d
import numpy as np# 创建一个简单的点云
points = np.random.rand(1000, 3)  # 1000个随机点
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(points)# 估计法线(关键算法)
# 使用 K近邻 策略,为点云 pcd 中的每一个点,计算其最近 30 个点,并基于这些点来估计该点的法向量。
pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamKNN(knn=30)) # 可视化
o3d.visualization.draw_geometries([pcd], point_show_normal=True)

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

最近邻搜索 (KNN/Radius) 与空间索引(KDTree/Octree)

在这里插入图片描述
在这里插入图片描述

法线估计 (Normal Estimation)

原理
基于主成分分析 (PCA)。核心思想:一个点及其邻域点可以拟合出一个局部微平面。这个平面的法线方向就是该点的法线方向。

  1. 邻域查询:对于点 p i p_i pi,利用 KDTree 找到其 K 个最近邻点 N ( i ) = p i 1 , p i 2 , . . . , p i k N(i) = {p_{i1}, p_{i2}, ..., p_{ik}} N(i)=pi1,pi2,...,pik
  2. 计算质心:计算邻域点的质心(中心点): p ˉ = 1 k ∑ j = 1 k p i j \bar{p} = \frac{1}{k} \sum_{j=1}^{k} p_{ij} pˉ=k1j=1kpij
  3. 构建协方差矩阵:计算协方差矩阵 C C C,它描述了邻域点围绕质心的分布情况: C = 1 k ∑ j = 1 k ( p i j − p ˉ ) ⋅ ( p i j − p ˉ ) T C = \frac{1}{k} \sum_{j=1}^{k} (p_{ij} - \bar{p}) \cdot (p_{ij} - \bar{p})^T C=k1j=1k(pijpˉ)(pijpˉ)T
  4. PCA 分解:对协方差矩阵 C C C 进行特征值分解,得到特征值 λ 1 , λ 2 , λ 3 \lambda_1, \lambda_2, \lambda_3 λ1,λ2,λ3( λ 1 ≥ λ 2 ≥ λ 3 ≥ 0 \lambda_1 \geq \lambda_2 \geq \lambda_3 \geq 0 λ1λ2λ30) 和对应的特征向量 v 1 ⃗ , v 2 ⃗ , v 3 ⃗ \vec{v_1}, \vec{v_2}, \vec{v_3} v1 ,v2 ,v3
  5. 法线确定:最小特征值 λ 3 \lambda_3 λ3 对应的特征向量 v 3 ⃗ \vec{v_3} v3 即为法线方向。因为数据在法线方向上的变化最小(方差最小),而在切平面上变化最大。
    在这里插入图片描述
import open3d as o3d
import numpy as np# 生成示例点云(一个平面加上一些噪声,法线应大致指向z轴正方向)
mesh = o3d.geometry.TriangleMesh.create_box(width=2.0, height=1.0, depth=0.2)
mesh.translate((-1.0, -0.5, -0.1)) # 平移使原点在中心
pcd = mesh.sample_points_poisson_disk(500) # 从网格采样生成点云# 估计法线
# 使用KNN策略,k=30
pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamKNN(knn=30))# 为了可视化效果,统一法线方向(使其指向[0,0,1]大致方向)
pcd.orient_normals_to_align_with_direction(orientation_reference=np.array([0., 0., 1.]))# 可视化:按法线方向着色
# 将法向量([-1,1])映射到RGB颜色([0,1])进行可视化
pcd.paint_uniform_color([0.5, 0.5, 0.5]) # 先设置一个基础灰色
o3d.visualization.draw_geometries([pcd],point_show_normal=True,window_name="Point Cloud with Normals")# 访问估计的法线
normals = np.asarray(pcd.normals)
print(f"First 5 normals:\n{normals[:5]}")

在这里插入图片描述

聚类分割 (基于欧氏距离的聚类)

在这里插入图片描述

import open3d as o3d
import numpy as np# 创建包含两个明显分开的簇的点云
points1 = np.random.rand(100, 3) * 0.5 + np.array([0, 0, 0])  # 簇1,围绕(0,0,0)
points2 = np.random.rand(100, 3) * 0.5 + np.array([2, 2, 2])  # 簇2,围绕(2,2,2)
points = np.vstack((points1, points2))pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(points)# 可视化原始点云
o3d.visualization.draw_geometries([pcd], window_name="Original Point Cloud")# 使用Open3D进行基于欧氏距离的聚类
# 参数1: eps - 邻域搜索半径
# 参数2: min_points - 形成一个簇所需的最少点数
labels = np.array(pcd.cluster_dbscan(eps

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

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

相关文章

gt_k_char设计模块

是不是再fiber或者gt设计中经常遇到接收数据没有对齐?是的。很多协议需要手动对齐设计。这不,它来了。下面是手动对齐代码设计,本人在很多工程和项目中应用过,现在共享出来,给大家使用。module gt_k_char (input …

网页版云手机怎么样

随着科技的不断发展,云手机这一新兴概念逐渐走入大众视野,而网页版云手机作为云手机的一种便捷使用方式,备受关注,下面从多个方面来探讨网页版云手机究竟怎么样。与传统的需要在本地设备安装专门APP的云手机使用方式不同&#xff…

XFile v2 系统架构文档

XFile v2 系统架构文档 1. 概述 XFile 是一个基于 Go 语言开发的分布式文件管理系统,提供本地文件存储、网络文件共享、安全认证和多种文件操作功能。该系统采用模块化设计,支持大文件分片存储、用户权限管理、双因素认证等高级功能。 XFile系统的核心特…

写一个天气查询Mcp Server

上篇文章,我们聊到了 MCP 的基本概念,带大家快速入门了 MCP。 说入门应该毫不夸张,对于科普性质的文章,只需要知道这件事情的诞生背景以及有什么作用就可以了。 但是,如果要开发给大模型调用的 Mcp Server&#xff0…

leecode-三数之和

思路 我的思路先顺序遍历一个变量,然后使用首尾双指针去遍历&#xff0c;根据结果去更新另外两个变量&#xff0c;如何和为零&#xff0c;将结果加入集合&#xff0c;但是这里要注意去重。 class Solution {public List<List<Integer>> threeSum(int[] nums) {// 排…

【数学建模】灰色关联分析的核心步骤

文章目录步骤一&#xff1a;读数据步骤二&#xff1a;指标正向化步骤三&#xff1a;数据标准化步骤三&#xff1a;数据标准化步骤四&#xff1a;结果处理步骤一&#xff1a;读数据 步骤一&#xff1a;读数据 X xlsread(‘blind date.xlsx’); % 读取Excel文件中的相亲数据 详…

基于高德地图的怀化旅发精品路线智能规划导航之旅

目录 前言 一、2025湖南旅发 1、关于旅发 2、精品路线发布 二、高德技术赋能 1、地理编码服务简介 2、地理编码服务参数介绍 3、自驾路径规划 4、自驾路径规划参数介绍 三、Java集成高德地图服务 1、业务调用时序 2、Java地理编码服务 3、Java路径规划 4、整体集成…

OpenCV实战1.信用卡数字识别

1. 任务说明 有如下几张信用卡&#xff0c;我们需要根据模板匹配出其中的数字&#xff0c;进行卡号的识别2. Debug源码 cursor的debug&#xff1a;launch.json&#xff1a; {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请…

Spring Security 深度学习(一): 基础入门与默认行为分析

目录1. 引言&#xff1a;为何选择Spring Security&#xff1f;2. 核心概念&#xff1a;认证 (Authentication) 与 授权 (Authorization)2.1 什么是认证 (Authentication)&#xff1f;2.2 什么是授权 (Authorization)&#xff1f;2.3 安全性上下文 (SecurityContext)3. Spring B…

数学建模--模糊综合评价法

一、概念 模糊综合评价法是一种基于模糊数学的综合评价方法。它针对评价过程中存在的模糊性&#xff08;如 “好”“较好”“差” 等模糊概念&#xff09;&#xff0c;通过建立模糊集合&#xff0c;将定性评价转化为定量评价&#xff0c;从而对具有多种属性的评价对象做出全面、…

科普 | 5G支持的WWC架构是个啥(2)?

为解决有线固定宽带与无线移动宽带融合问题&#xff0c;3GPP在5G中推出了WWC系统架构。它将两种接入类型统一融合到5G核心网络。这有助于运营商简化控制、简化管理并为终端用户提供一致服务&#xff1b;其中&#xff1a;一、5G核心组件包括&#xff1a;AMF(接入和移动性管理功能…

达梦数据库配置文件-COMPATIBLE_MODE

达梦数据库配置文件-COMPATIBLE_MODE 获取系统参数 SQL 语句: select distinct para_type from v$dm_ini;这句的意思是:从达梦数据库的参数视图 v$dm_ini 中,查询所有不同类型的参数分类(去重)。 ✅ 输出结果解析 行号 PARA_TYPE ---------- --------- 1 RE…

能源行业数据库远程运维安全合规实践:Web化平台的落地经验

背景&#xff1a;远程运维下的数据管理挑战在能源行业&#xff0c;企业通常在全国范围内部署分布式设施。每个电站或运维中心都有独立数据库&#xff0c;用于&#xff1a;记录设备状态、传感器数据和维护日志&#xff1b;存储实时生产指标和能耗统计&#xff1b;生成定期运维报…

数据结构Java--8

二叉搜索树像上图这样满足&#xff0c;任意一棵子树的左子树小于该子树的根结点&#xff0c;右子树大于该子树的根结点&#xff0c;满足这样的条件&#xff0c;则这种树就被称为二叉搜索树。public class BinarySearchTree {static class TreeNode {public int val;public Tree…

使用Spring Boot和EasyExcel导出Excel文件,并在前端使用Axios进行请求

在现代企业应用中&#xff0c;Excel文件的导出是一项常见且重要的功能。Spring Boot作为Java开发中的热门框架&#xff0c;结合EasyExcel这样的高效库&#xff0c;能够轻松实现Excel的导出功能。而在前端&#xff0c;使用Axios进行HTTP请求&#xff0c;可以方便地与后端进行数据…

图论水题5

cf796D 题意 n个点n-1条边&#xff0c;k个特殊点以及整数d&#xff0c;要求删除最多的边保证每个点都可以在d步之内到达一个特殊点&#xff0c;输入保证每个点都可以在d步内到达特殊点 思路 考虑什么时候可以删除一条边&#xff0c;即这条边连接的两个点可以在d步内到达两个不同…

像WPS Office 一样处理pdf页面尺寸

1. 修改页面尺寸import os import shutil import fitz # PyMuPDFdef cm_to_px(cm):# 厘米转换成像素"""doc fitz.open(input_file)page0 doc[0]width_px page0.mediabox.widthheight page0.mediabox.heightprint(fwidth_px&#xff1a;{width_px} height&a…

Linux 基础开发工具

在 Linux 环境下进行开发&#xff0c;熟练掌握基础工具是提升效率、解决问题的核心前提。无论是软件安装、代码编辑&#xff0c;还是编译调试、版本管理&#xff0c;一套 “趁手” 的工具链能让开发过程事半功倍。本文将从 Linux 开发最核心的七大工具模块入手&#xff0c;一步…

TapData vs Kafka ETL Pipeline:竞争?共存?——企业实时数据策略的正确打开方式

【引言】企业实时数据流转&#xff0c;迎来“集成计算”新范式 企业 IT 架构的演进&#xff0c;从最初的数据孤岛&#xff0c;到集中式数据仓库&#xff0c;再到如今的实时数据驱动架构。在这一过程中&#xff0c;数据的集成&#xff08;数据源→目标&#xff09;与数据的计算&…