自学内容网 自学内容网

Open3D 计算点云FPFH特征

目录

一、概述

1.1法线估计

1.2SPFH(Simplified Point Feature Histograms)计算

1.3FPFH计算

二、代码实现

2.1关键函数

2.2完整代码

三、实现效果

3.1原始点云

3.2计算数据


一、概述

        FPFH(Fast Point Feature Histogram)特征是一种用于描述点云局部几何特征的描述子。它由Rusu等人在2009年提出,旨在高效地描述三维点云的局部几何特征,并用于点云配准、分类和分割等任务。

        FPFH特征的计算过程分为三个主要步骤:法线估计、SPFH计算和FPFH计算。

1.1法线估计

        在计算FPFH特征之前,首先需要估计点云中每个点的法线。这通常通过邻域搜索和PCA(主成分分析)方法来完成。

步骤:

  1. 对于点云中的每个点,确定一个邻域(例如,通过k近邻搜索或半径搜索)。
  2. 使用PCA方法计算邻域点的协方差矩阵,并获取其特征向量。特征值最小的特征向量对应的方向即为法线方向。

1.2SPFH(Simplified Point Feature Histograms)计算

        SPFH特征是对点云中每个点及其邻域点的几何关系的描述,具体通过以下三个角度计算:

        对于每个点 𝑝,通过计算它与每个邻域点 𝑞 的上述三个角度,可以构建一个三维的特征直方图,这就是SPFH特征。

1.3FPFH计算

        FPFH特征通过组合点的SPFH特征及其邻域点的SPFH特征来进一步描述点云的局部几何特征。具体步骤如下:

  1. 对于点云中的每个点 𝑝,计算其SPFH特征。
  2. 对于点云中的每个点 𝑝,收集其邻域点的SPFH特征。
  3. 通过将点 𝑝 的SPFH特征与其邻域点的SPFH特征加权求和,计算点 𝑝 的FPFH特征。

二、代码实现

2.1关键函数

def compute_fpfh_feature(input, search_param): 

input:输入的点云
search_param:KD树的近邻搜索方式
Returns:33xN的数组,33表示特征描述子,N用来表示计算FPFH的点的个数

2.2完整代码

import open3d as o3d


# -------------传入点云数据,计算FPFH------------
def fpfh_compute(pcd):
    radius_normal = 0.01  # kdtree参数,用于估计法线的半径,
    print(":: Estimate normal with search radius %.3f." % radius_normal)
    pcd.estimate_normals(
        o3d.geometry.KDTreeSearchParamHybrid(radius=radius_normal, max_nn=30))
    # 估计法线的1个参数,使用混合型的kdtree,半径内取最多30个邻居
    radius_feature = 0.02  # kdtree参数,用于估计FPFH特征的半径
    print(":: Compute FPFH feature with search radius %.3f." % radius_feature)
    pcd_fpfh = o3d.pipelines.registration.compute_fpfh_feature(pcd,
                                                               o3d.geometry.KDTreeSearchParamHybrid(
                                                                   radius=radius_feature,
                                                                   max_nn=100))  # 计算FPFH特征,搜索方法kdtree
    return pcd_fpfh  # 返回FPFH特征


# ----------------读取点云数据--------------
source = o3d.io.read_point_cloud("hand.pcd")
# -----------------计算的FPFH---------------
source_fpfh = fpfh_compute(source)
print(source_fpfh)

三、实现效果

3.1原始点云

3.2计算数据

Estimate normal with search radius 0.010.
:: Compute FPFH feature with search radius 0.020.
Feature class with dimension = 33 and num = 327323
Access its data via data member.


原文地址:https://blog.csdn.net/qq_47947920/article/details/140264715

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!