法向量估计

news2024/11/18 14:29:43

法向量估计

  • 1. 求解点P法向量的原理
  • 2. 法向量估计的证明
  • 3. 为什么求点P的法向量,需要使用以P为中心的邻域内的点?
  • 4. 法向量估计的应用和思考
  • 5. 权重法向量估计

1. 求解点P法向量的原理

已知有一组点 P = ( p 1 , p 2 , p 3 , . . . , p n ) , p i ∈ R 3 P = (p_1,p_2,p_3,...,p_n),p_i \in R_3 P=(p1,p2,p3,...,pn),piR3,求点 p 3 p_3 p3的法向量的通用步骤:

  • 确定邻域:首先需要确定点 P 的邻域,即在点云中与点 P 相邻的点的集合。通常情况下,可以通过设置一个固定的半径或者固定数量的最近邻来定义邻域。
  • 计算局部表面拟合:对于确定的邻域内的点,可以使用拟合曲面的方法来估计局部表面形状。常用的拟合方法包括最小二乘拟合、主成分分析(PCA)拟合等。这些方法可以得到一个与邻域内点最适合的平面、曲线或曲面。
  • 计算法向量:通过拟合得到的局部表面形状,可以计算点 P 的法向量。对于平面拟合,法向量即为拟合平面的法向量;对于曲面拟合,可以通过对曲面方程求导得到法向量。
  • 后处理:在计算法向量后,可以进行一些后处理操作,比如法向量的平滑化、去噪等,以提高法向量的质量和稳定性。

这里给出使用PCA求解的步骤和代码

  • 确定领域,得到邻域内的所有点
  • 求邻域内点组成的矩阵 M ∈ R n × 3 M \in R_{n \times 3} MRn×3的协方差矩阵的奇异值分解
  • 求左奇异值矩阵的特征向量,最小的特征值对应的特征向量即为所求
    normals = []
    radius = 0.05
    leaf_size = 5  
    tree = KDTree(points,leaf_size)
    near_point_idx = tree.query_radius(points,radius)#每一点的邻居点索引,包含自身点
    
    for i in range(points.shape[0]):
        point_near = points[near_point_idx[i]] #某一点的邻居点,
        v = PCA(point_near)
        normal = v[:,2]
        normals.append(normal)
    normals = np.asarray(normals)

2. 法向量估计的证明

为什么最小特征值对应的特征向量即为法向量方向
在这里插入图片描述

3. 为什么求点P的法向量,需要使用以P为中心的邻域内的点?

假设点P为这组点的中心,只要求所有点到点P的切平面的距离的L2范数最小,就说明这个切平面最接近这簇点的表面形状
在这里插入图片描述
在这里插入图片描述

4. 法向量估计的应用和思考

  • 应用
    分割,聚类,平面检测
  • 思考半径选择太大,会受到不相关部分影响,导致法向量平滑;半径过小会容易受到噪声影响;半径不仅可以使用欧式空间邻域,同样可以使用其他尺度的邻域,包括反射率邻域,颜色邻域等;也可以根据周围点对点P的影响程度,在求法向量的时候为每个点加上权重

5. 权重法向量估计

在这里插入图片描述
也就是求 X ˉ W X ˉ T \bar{X} W \bar{X}^{T} XˉWXˉT的最小特征向量, X ˉ \bar{X} Xˉ是一组输入向量的去中心化向量。

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

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

相关文章

糖豆人打开失败或无法运行

一般就是网络不行,选择加速器加速就好了。 eg: (uu加速器) 一般直接点启动游戏就行。 如果提示找不到文件路径,或者说直接弹出steam的登录的话就是配置路径有问题。现在糖豆人已经不再steam平台了,应该是epic才对。 配置方法:…

普通人想要赚钱,就要坚持五个要点

最近都在努力搞钱,所以今天就围绕【持续赚钱】,分享一些心得体会。 普通人想要赚钱,就要坚持以下5点: 持续学习 持续破圈 持续行动 坚持长期利他 坚持长期主义 1、持续学习 要持续学习,做一个终身学习者。 只有保持空杯…

通用开发技能系列:Git

云原生学习路线导航页(持续更新中) 本文是 通用开发技能系列 文章,主要对编程通用技能Git进行学习 1.为什么使用版本控制系统 版本控制系统可以解决的问题 代码备份很重要版本控制很重要协同工作很重要责任追溯很重要 常见的版本控制系统 Gi…

【学习笔记】java项目—苍穹外卖day10

文章目录 苍穹外卖-day10课程内容1. Spring Task1.1 介绍1.2 cron表达式1.3 入门案例1.3.1 Spring Task使用步骤1.3.2 代码开发1.3.3 功能测试 2.订单状态定时处理2.1 需求分析2.2 代码开发2.3 功能测试 3. WebSocket3.1 介绍3.2 入门案例3.2.1 案例分析3.2.2 代码开发3.2.3 功…

Django环境搭建及测试

Django环境搭建及测试 一、安装 Python二、安装 Django三、终端命令创建 Django 项目四、运行 Django 项目五、访问 Django 网站 一、安装 Python 首先确保你的电脑上安装了 Python。 Python官网点击直达 官网下载后双击即可安装 第一个相当于快速安装,第二个则是…

【保姆级讲解如何计算机视觉入门】

🌈个人主页:程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

C++中的STL——vector类的基本使用

目录 vector介绍 vetor类定义 vector常见构造 vector类中的容量操作 size()函数与capacity()函数 resize()函数 reserve()函数 max_size()函数 vector类中的数据遍历操作 operator[]()与at()函数 vector类中的迭代器遍历 正向遍历begin()和end()迭代器——非const …

练习 22 Web [极客大挑战 2019]BuyFlag

php弱类型比较,注意Cookie值,php利用数组赋值进行绕过,科学计数法 很明显是弱类型比较,之前的练习题已经遇到过 构造password404adsffd,后面随便什么字母都行 然后 money100000000 然后在student这里卡了很久,post…

SpringData ElasticSearch - 简化开发,完美适配 Spring 生态

目录 一、SpringData ElasticSearch 1.1、环境配置 1.2、创建实体类 1.3、ElasticsearchRestTemplate 的使用 1.3.1、创建索引 设置映射 1.3.2、创建索引映射注意事项(必看) 1.3.3、简单的增删改查 1.3.4、搜索 1.4、ElasticsearchRepository …

当代软件专业大学生与青年在新质生产力背景下的发展探究

在新质生产力的浪潮中,信息技术以前所未有的速度革新,为软件专业的大学生和青年带来了丰富的机遇,同时也伴随着一系列的挑战。他们如何把握时代的脉搏,实现个人的发展,成为了值得深入探讨的话题。 一、新质生产力背景下的机遇 随着新质生产力的不断发展,信息技术在各个领…

Vue3中的computed,watch和watchEffect的特点

1.computed 1)computed拥有缓存性,多次调用会直接从缓存中获取,而不会重新执行,所以说computed性能很高。 例:下面是同时调用三次计算属性firstTotal和三次函数firstTotalFun()的运行结果。可以发现,函数被…

免费微信小程序源码分享~搭起来改一下就可以【创业】

【前言】现在很多人都想做微信小程序创业搞钱,但是苦于不会开发或过高的开发成本只能放弃,下面我收集了几套微信小程序的源码供各位有梦想的同学免费使用~ 这些小程序代码都包含了客户端和管理端,你搭建起来就可以开始创业搞钱了~ 下载链接&…

基于SpringBoot+Vue共享客栈管理系统(源码+部署说明+演示视频+源码介绍)

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(9)复发

PS从入门到精通视频各类教程整理全集,包含素材、作业等 最新PS以及插件合集,可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制,今天先分享到这里,后续持续更新 第一课 ——第三课素材文件 https://www.alipan.c…

设计模式总结-装饰者模式

模式动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制,使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的,用户不能控制增…

Java快速入门系列-5(Java进阶特性)

第五章:Java进阶特性 5.1 多线程与并发编程5.1.1 多线程基础5.1.2 线程同步与锁5.1.3 线程间通信与协作5.1.4 线程池5.2 Java I/O流5.2.1 字节流与字符流5.2.2 缓冲流5.2.3 对象序列化与反序列化5.3 网络编程基础5.3.1 Socket编程5.3.2 NIO编程5.4 Java反射机制反射的基本用法…

IDEA+Docker远程一键部署SpringBoot项目

一.引语 本文将学习使用IDEADocker远程一键部署SpringBoot项目,对比上传jar包到服务器,再通过java指令运行项目,极大程度的提高了项目部署效率。可谓不用不知道,一用再也停不下来~ 为了后续学习方便,需要提前进行如下…

leetcode.206.反转链表

题目 题意:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路 双指针:创建指针p,curr,初始分别指向null和头节点,每轮循环移动一个节点的指向,直到指到最后一…

先登杯·14天创作挑战营·第④期~ 等你来战!

文章目录 ⭐️ 活动介绍⭐️ 活动详情⭐️ 活动奖品⭐️ 活动流程​⭐️ 评审规则⭐️ 报名&投稿注意事项⭐️ 活动组织 ​ 活动报名入口:https://bbs.csdn.net/topics/618374514 本次活动与官方活动及其他博主的创作型活动并不冲突! ​ ​ ⭐️…

非conda环境(powershell与cmd)使用opencv-python库

1.安装python 3.11.7 Python Release Python 3.11.7 | Python.org 安装成功后,查看版本为3.11.7 2.安装numpy pip install numpy 3.安装matplotlib pip install matplotlib matplotlib库安装成功