Open3d 自定义点云法向量,朝内或朝外
重写法向量估计函数:根据质心与点的方向估计法向量
前言
前提是我知道这个点云一定会朝着质心向外,或者向内,比如室内扫描基本都是向内,而室外扫描基本向外;Open3d自带的mesh生成的api——estimate_normals是随机判断的,还需要法向量对齐,很麻烦
o3d自带函数计算结果:内外不一

一、思路
点云的质心——与点法向量判定夹角——改变符号,赋值法向量
而法向量的生成,从原理上有很多方式,这里采用最小二乘拟合平面,使用segment plane这个API,拟合临近点的平面的法向量,作为这个点的法向量
#拟合最近的N个点的平面
plane_model, inliers = keypoint.segment_plane(distance_threshold=distance_threshold,
ransac_n=knn_num,
num_iterations=10 * knn_num * knn_num)
二、使用步骤
1.引入库
代码如下(示例):
import numpy as np
import open3d as o3d
2.核心代码
代码如下(示例):
# 判断法向量是否朝向质心外部
outward_direction = np.dot(normal, center) > 0
return outward_direction
# 法向量赋值
pcd_1.normals = o3d.utility.Vector3dVector(np.array(normals))
3.完整代码
代码如下(示例):
import numpy as np
import open3d as o3d
def estimate_normals_by_center(pcd,knn_num=10,distance_threshold=5,outdoor = True):
def is_normal_outward(normal, center):
# 判断法向量是否朝向质心外部
outward_direction = np.dot

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



