open3D-三维数据的结构

三维数据的结构:
了解Octree原理,了解k-d Tree和的作用:(这两个含义还需要进一步了解)
Kdtree是一种划分k维数据空间的数据结构,在一个K维数据集合上构建一棵Kdtree代表了对该K维数据集合构成的K维空间的一个划分,即树中的每个结点就对应了一个K维的超矩形区域。主要用于多维空间关键数据的搜索。

Octree是一种用于描述三维空间的树状数据结构。八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,将八个子节点所表示的体积元素加在一起就等于父节点的体积。能够很好的压缩点云节省存储空间。

自己思考:最邻近问题:对于点云中的点,怎么去找离它比较近的点?
获取邻域点的两种方法:KNN和RNN
第一种:KNN
在这里插入图片描述

我的理解:A是要查找的点,黑色点相当是数据库中的点,图中是找离A色点最近的2个点,显示出来就是图中的红色点。K就是要自定义的数量。
第二种:RNN
在这里插入图片描述

以上述黑点A为圆心,以所选值为半径画圆,圆内的点就是所要找的点

空间八叉树结构:
在这里插入图片描述

八叉树(四叉树)作为空间对象的一种组织方式,能够根据单位的密集度,对空间进行划分,从而避免查找对象时,循环所有对象。八叉树的原理较为简单:当满足切分条件时,将三维空间等分为8份,分配空间对象。

八叉树近邻搜索:
在这里插入图片描述

每个节点包含:

  1. 自身节点坐标最大值和最小值
  2. 是否是叶子节点的标志。不是子节点的包含子节点的索引

八叉树近邻搜索:
在这里插入图片描述

判断待查询的点是否在树中,在树中的话,找到其所属的子节点
在这里插入图片描述

点云的相交、求异:
思路:
1、首先确定 max d
2、遍历待求异点云,寻找最近邻点
3、与最近邻点距离d小于dmax,认为是相同区域的点,将点删除;若大于dmax,则认为是不同点,保留该点
在这里插入图片描述

在这里插入图片描述

练习:计算点云的平均距离遍历点云,计算最近点的距离并累加平均和

1.单位体积/面积的点数量
2.点云之中点的平均距离
思路:
首先要知道点云密度衡量方式这个知识点(以高程方向为法相方向,单位面积上点云中点的平均数量 )

import open3d as o3d
import numpy as np
#无效值包括空值和无限值。空值一般用NaN表示。
# open3d中对应的剔除函数为remove_non_finite_points。
# 当remove_nan为True时,剔除空值。当remove_infinite为True时表示去除无限值。
pc = o3d.io.read_point_cloud("piano.ply",remove_nan_points=True,remove_infinite_points=True)
# 建立八叉树
k_dTree = o3d.geometry.KDTreeFlann(pc)
#得到点个数
points = np.array(pc.points)
pointNum=points.shape[0]
distSum=0
k=2
#遍历点云
for i in range(0, pointNum):
    # k返回点个数
    # idx 返回点索引
    # dist 返回点距离
    [k, idx, dist] = k_dTree.search_knn_vector_3d(pc.points[i],k)
    distSum+=dist[1]

distSum/=pointNum
print("点云之间的平均距离是",distSum,"m")                            
o3d.visualization.draw_geometries([pc],                                    
                                     window_name="Ray",
                                      point_show_normal=False,
                                      width=800,  # 窗口宽度,高度
                                      height=600) 

在这里插入图片描述

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值