【点云】生成有凹凸的平面

文章目录

  • 前言
  • 高斯函数
    • 原理
    • 代码
    • 保存
  • 测试
    • 测试1 :领域曲率代码
    • 测试2:高斯曲率代码
  • 加上噪点
    • 测试1
    • 测试2
    • 改进


前言

尝试用一些数据生成有凹凸面的点云。
我们姑且把z轴当成有凹凸的缺陷,x轴和y轴共同组成一个平面。


高斯函数

原理

高斯函数wiki中,我们得知
在这里插入图片描述
其中,σ为标准差,用来控制“钟形”的宽度。
在这里插入图片描述
根据wiki中下面的举例sigma_X = 1;sigma_Y = 2;可以看出,σx=σy时,高斯的水平集是个圆,σx不等于σy时,高斯的水平集是个椭圆。(可以这样想:在平面上的公式,圆和椭圆的区别)

继续往下看:
在这里插入图片描述
在这里插入图片描述

代码

再根据wiki中下面的 Octave 代码,仿写出python代码:

# 导入 numpy 和 open3d 库
import numpy as np
import open3d as o3d# 定义高斯函数的参数
A = 1
x0 = 0
y0 = 0
sigma_X = 1
sigma_Y = 2# 生成 X 和 Y 的坐标网格
X, Y = np.meshgrid(np.arange(-5, 5.1, 0.1), np.arange(-5, 5.1, 0.1))#-5到5,步长为0.1# 创建 open3d 点云对象
pcd = o3d.geometry.PointCloud()# 循环旋转角度
for theta in np.arange(0, np.pi, np.pi / 100): # 0 到 π,步长为 π / 100  #可以改变这个值# 计算高斯函数的系数a = np.cos(theta) ** 2 / (2 * sigma_X ** 2) + np.sin(theta) ** 2 / (2 * sigma_Y ** 2)b = np.sin(2 * theta) / (4 * sigma_X ** 2) - np.sin(2 * theta) / (4 * sigma_Y ** 2)c = np.sin(theta) ** 2 / (2 * sigma_X ** 2) + np.cos(theta) ** 2 / (2 * sigma_Y ** 2)# 计算 Z 的坐标Z = A * np.exp(-(a * (X - x0) ** 2 + 2 * b * (X - x0) * (Y - y0) + c * (Y - y0) ** 2))# 将 X, Y, Z 合并为点云矩阵,形状为 (n, 3)points = np.stack((X, Y, Z), axis=-1)points = points.reshape(-1, 3)# 更新点云的坐标
pcd.points = o3d.utility.Vector3dVector(points)# 添加坐标
coord = o3d.geometry.TriangleMesh.create_coordinate_frame(size=1, origin=[0, 0, 0])#x红色,y绿色,z蓝色
# 可视化点云
o3d.visualization.draw_geometries([pcd, coord])

得到
在这里插入图片描述
若我们改为sigma_X = 1,sigma_Y = 1,则
在这里插入图片描述
发现中间确实为圆,与上述猜想一致。

若我们需要凹陷的缺陷,则改为A=-1即可。
在这里插入图片描述

保存

# 保存点云
o3d.io.write_point_cloud("flaw.pcd",pcd ) 

点云大小如下:
在这里插入图片描述

测试

【最详解】如何进行点云的凹凸缺陷检测(opene3D)
拿出之前写的凹凸检测代码开始测试,首先测试上述这种无噪音的。
记得一定要根据点云的大小改radius = 0.5 #邻域半径,否则一点效果也没有

测试1 :领域曲率代码

参数如下:
在这里插入图片描述
结果如下:
在这里插入图片描述
意外的还算不错。

测试2:高斯曲率代码

也是改了radius =0.5。
在这里插入图片描述
果然结果还是这个更好。

加上噪点

在之前代码的基础上更改如下,并改成椭圆形缺陷。
在这里插入图片描述
结果:
在这里插入图片描述

测试1

在这里插入图片描述

测试2

在这里插入图片描述
发现在针对椭圆形的凹凸缺陷不够灵敏了。

改进

一开始以为在使用邻近搜索中,用的方法不太好,用的是在球内的点搜索,或许换个方法就可以了。–2024.2.17
后发现修改为如下,依旧不太好。

k, idx, _ = kdtree.search_knn_vector_3d(cloud.points[i], num_knn) 

后发现在打印出数据中,数据太小,而定义为平面的数据宽泛太大,于是在测试2中改为如下

limit_max = 1e-3
for i in range(len(curvatures)):if -limit_max<curvatures[i][0] < limit_max and -limit_max<curvatures[i][1] <limit_max: #平坦np.asarray(pcd.colors)[i] = [0, 0, 0]#黑elif -limit_max<curvatures[i][0] < limit_max and curvatures[i][1] >limit_max:  #凸np.asarray(pcd.colors)[i] = [1, 0, 0]#红elif -limit_max<curvatures[i][0] < limit_max and -limit_max<curvatures[i][1] <limit_max: #凹np.asarray(pcd.colors)[i] = [0, 1, 0]#绿elif curvatures[i][0] < -limit_max and curvatures[i][1] >limit_max: #鞍形脊 大部分凸,少部分凹np.asarray(pcd.colors)[i] = [0, 0, 1]#蓝elif curvatures[i][0] < -limit_max and curvatures[i][1] <-limit_max: #鞍形谷 大部分凹,少部分凸np.asarray(pcd.colors)[i] = [0, 1, 1]#青elif curvatures[i][0] > limit_max and curvatures[i][1] >limit_max: #峰 np.asarray(pcd.colors)[i] = [1, 0, 1]#紫elif curvatures[i][0] > limit_max and curvatures[i][1] <-limit_max: #阱np.asarray(pcd.colors)[i] = [1, 1, 0]#黄

结果便好很多了。
在这里插入图片描述

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

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

相关文章

Leetcode-976. 三角形的最大周长

题目&#xff1a; 给定由一些正数&#xff08;代表长度&#xff09;组成的数组 nums &#xff0c;返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形&#xff0c;返回 0。 示例 1&#xff1a; 输入&#xff1a;nums [2,1,2] 输出…

掘根宝典之C++类模板大全

1 类模板语法 类模板的作用&#xff1a;建立一个通用类&#xff0c;类中的成员数据类型可以不具体制定&#xff0c;用一个虚拟的类型来代表 语法&#xff1a; template<typename T> 模板类声明 解释&#xff1a;template声明创建模板 typename表明其后面的符号是一种数…

UE4 C++联网RPC教程笔记(一)(第1~4集)

UE4 C联网RPC教程笔记&#xff08;一&#xff09;&#xff08;第1~4集&#xff09; 前言1. 教程介绍与资源2. 自定义 Debug 功能3. Actor 的复制4. 联网状态判断 前言 本系列笔记将会对梁迪老师的《UE4C联网RPC框架开发吃鸡》教程进行个人的知识点梳理与总结&#xff0c;此课程…

ARMv8-AArch64 的异常处理模型详解之异常处理详解(进入异常以及异常路由)

在上篇文章 ARMv8-AArch64 的异常处理模型详解之异常处理概述Handling exceptions中&#xff0c;作者对异常处理整体流程以及相关概念做了梳理。接下来&#xff0c;本文将详细介绍处理器在获取异常、异常处理以及异常返回等过程中都做了哪些工作。 ARMv8-AArch64 的异常处理模型…

sdxl-turbo、playground文生图模型使用案例

1、sdxl-turbo SDXL-Turbo是一种快速生成的文本到图像模型,可以在单个网络评估中从文本提示合成逼真的图像。 参考:https://huggingface.co/stabilityai/sdxl-turbo 对比效果相比PixArt模型差很多,参考https://blog.csdn.net/weixin_42357472/article/details/135520142 …

axios

2022年10月11日&#xff0c;在《AXAJ与JavaScript中的异步编程元素》文章中我总结了对于前端开发者中需要了解和掌握的8种异步编程元素&#xff0c;其中XMLHTTPRequest很关键&#xff0c;它是原生JavaScript提供的用于发送 HTTP 请求的对象&#xff0c;用于在前端与服务器进行数…

「C++ 内存管理篇 0」C和C++对内存的划分

目录 一、C和C对内存的划分 二、小测试 【题目】 【答案】 【解释】 一、C和C对内存的划分 1. 栈区 &#xff1a;存储非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长的。 2. 共享区&#xff1a;用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存…

汽车金融市场研究:预计2029年将达到482亿美元

汽车金融公司作为汽车流通产业链的重要一环&#xff0c;认真贯彻落实国家有关政策&#xff0c;采取多种措施助力汽车产业发展&#xff0c;为促进推动汽车消费、助力畅通汽车产业链、支持稳定宏观经济大盘发挥了积极作用。 益于国内疫情得到有效控制&#xff0c;我国经济持续稳定…

UE5 C++ UENUM 和 USTRUCT

一.首先在APawn里声明 UENUM 和 USTRUCT。UENUM 有两种定义方式 一种是使用命名空间&#xff1a; 还有是继承uint8&#xff1a; 通过申明class类 别名来替代 USTRUCT的定义 上面的第二种有类似但仍然有很多的差异&#xff1a; 首先要有GENERATED_USTRUCT_BODY()这个函数 并且…

网络编程_TCP通信综合练习:

1 //client&#xff1a;&#xff1a; public class Client {public static void main(String[] args) throws IOException {//多次发送数据//创建socket对象,填写服务器的ip以及端口Socket snew Socket("127.0.0.1",10000);//获取输出流OutputStream op s.getOutput…

ChatGPT魔法1: 背后的原理

1. AI的三个阶段 1&#xff09; 上世纪50~60年代&#xff0c;计算机刚刚产生 2&#xff09; Machine learning 3&#xff09; Deep learning&#xff0c; 有神经网络&#xff0c; 最有代表性的是ChatGPT, GPT(Generative Pre-Trained Transformer) 2. 深度神经网络 llya Suts…

linux 实用技能

1.查看系统版本 cat /etc/redhat-release cat /etc/redhat-release 2. 查看磁盘实用情况 df du 3.查看内存 top -Hp 2214 4. 网络配置 vi /etc/hostname vi /etc/hosts vi /etc/sysconfig/network-scripts/ifcfgens33 6. sed ‘s/a/b/g’ aaa.txt 替换 7. scp …

Eclipse - Colors and Fonts

Eclipse - Colors and Fonts References 编码最好使用等宽字体&#xff0c;Ubuntu 下自带的 Ubuntu Mono 可以使用。更换字体时看到名字里面带有 Mono 的基本都是等宽字体。 Window -> Preferences -> General -> Appearance -> Colors and Fonts -> C/C ->…

数据分析 — 动画图 pyecharts

目录 一、概念二、安装和导入三、绘图逻辑四、绘图1、柱状图2、折线图3、散点图4、饼图5、南丁格尔图6、Geo() 地理坐标第7、Map() 绘制区域8、词云图9、层叠图10、3D 图11、仪表板 一、概念 Pyecharts 是一个基于 Echarts 的 Python 可视化库&#xff0c;它通过 Python 生成 …

mac东西拷不进硬盘怎么回事 mac东西拷不进硬盘怎么办 mac硬盘读不出来怎么解决 mac拷贝不了东西到u盘

有时候我们在使用mac的过程中&#xff0c;可能会遇到一些问题&#xff0c;比如mac东西拷不进硬盘。这是一种很常见的情况&#xff0c;但是会影响我们的工作和生活。那么&#xff0c;mac东西拷不进硬盘是怎么回事呢&#xff1f;mac东西拷不进硬盘又该怎么办呢&#xff1f;本文将…

ACM/NOI/CSP比赛经验分享

ACM/NOI/CSP比赛经验分享 一、引言 在信息学竞赛的舞台上&#xff0c;ACM/ICPC、NOI和CSP是众多学子梦寐以求的赛事。这些比赛不仅考验了参赛者的算法和数据结构知识&#xff0c;更是对团队协作、时间管理和心理素质的全面挑战。作为一名曾经参与过这些比赛的选手&#xff0c…

最新 Vue3、TypeScript、组合式API、setup语法糖 学习笔记

最新 Vue3、TypeScript、组合式API、setup语法糖 学习笔记 1、创建 Vue3 工程基于 `vue-cli` 创建(基于webpack实现)基于 `vite` 创建(推荐)2、Vue3 项目开发 `vscode` 插件推荐3、`Vue3` 核心语法【optionsAPI】与【CompositionAPI】Options API 的弊端Composition API 的…

洛谷 P8630 [蓝桥杯 2015 国 B] 密文搜索

题目描述 福尔摩斯从 X 星收到一份资料&#xff0c;全部是小写字母组成。 他的助手提供了另一份资料&#xff1a;许多长度为 8 的密码列表。 福尔摩斯发现&#xff0c;这些密码是被打乱后隐藏在先前那份资料中的。 请你编写一个程序&#xff0c;从第一份资料中搜索可能隐藏…

K8S更新部署docker的两种方法举例

前提条件 imagePullPolicy: Always 方法1&#xff1a;删除更新法 test-project为命名空间 --删除所有asp-svc下面的pod,这会导致从新拉取镜像 kubectl delete pods -l appasp-svc -n test-project --删除指定的pod&#xff0c;这会导致从新拉取镜像 kubectl delete pod …

JSON协议详解、语法及应用

文章目录 一、什么是JSON二、JSON协议结构协议结构包括要素JSON语法规则JSON的协议结构示例 三、JSON的特点四、JSON常见应用场景 一、什么是JSON JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;它以易于阅读和编写的文本格式…