法向量估计

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ˉ是一组输入向量的去中心化向量。

相关推荐

  1. python统计学-矩估计、极大似然估计

    2024-04-05 15:50:05       60 阅读
  2. VCG 网格面片向量平滑

    2024-04-05 15:50:05       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 15:50:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 15:50:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 15:50:05       87 阅读
  4. Python语言-面向对象

    2024-04-05 15:50:05       96 阅读

热门阅读

  1. 线程和进程的区别?

    2024-04-05 15:50:05       39 阅读
  2. Linux升级openssl至openssl-1.1.1版本

    2024-04-05 15:50:05       39 阅读
  3. 如何在运行时或以编程方式生成testng.xml

    2024-04-05 15:50:05       33 阅读
  4. Spirngboot JWT快速配置和使用

    2024-04-05 15:50:05       39 阅读
  5. 有关在运行时生成testng.xml的更多信息

    2024-04-05 15:50:05       33 阅读
  6. zookeeper之基本命令

    2024-04-05 15:50:05       41 阅读
  7. 蒟蒻求助帖

    2024-04-05 15:50:05       33 阅读
  8. 微信小程序 ---- 慕尚花坊 订单列表

    2024-04-05 15:50:05       39 阅读
  9. Android 关机充电动画卡住无反应,也不灭屏

    2024-04-05 15:50:05       39 阅读
  10. 【递推与递归】python例题详解

    2024-04-05 15:50:05       35 阅读