基于Open3D的点云处理14-法向量

法向量

计算法向量的接口函数:
在这里插入图片描述
Open3d使用estimate_normals函数来计算法向量。其参数设置Open3d提供了3中参数搜索的方法(所有计算的法向量模长为1):

open3d.geometry.KDTreeSearchParamKNN(knn=20)                        # 计算近邻的20个点
open3d.geometry.KDTreeSearchParamRadius(radius=0.01)                # 计算指定半径内的点
open3d.geometry.KDTreeSearchParamHybrid(radius=0.01, max_nn=20)     # 同时考虑搜索半径和近邻点个数

法线朝向:

#自定义主方向
orient_normals_to_align_with_direction(self, orientation_reference=None, *args, **kwargs)

#相机方向
orient_normals_towards_camera_location(self, camera_location=None, *args, **kwargs)

#最小生成树
orient_normals_consistent_tangent_plane(self, k)

接口测试:

import open3d as o3d
import numpy as np

pcd = o3d.io.read_point_cloud("bunny.pcd")
pcd.paint_uniform_color([1.0, 0.0, 0.0])


pcd_sampled = pcd.uniform_down_sample(every_k_points=10)
pcd_sampled.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.01, max_nn=30))
# 自定义法线朝向
pcd_sampled.orient_normals_to_align_with_direction([0, 0, 1])  
# 可视化点云和法线
o3d.visualization.draw_geometries([pcd_sampled], point_show_normal=True, mesh_show_back_face=False)

# # 最小生成树
# pcd_sampled.orient_normals_consistent_tangent_plane(6)
# o3d.visualization.draw_geometries([pcd_sampled], point_show_normal=True, mesh_show_back_face=False)

# # 相机方向
# pcd_sampled.orient_normals_towards_camera_location()
# o3d.visualization.draw_geometries([pcd_sampled], point_show_normal=True, mesh_show_back_face=False)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zfjBIT/article/details/132125631