思路还是很容易想到的:
1.首先使用KD树寻找当前点邻域的N个点,这里取了10个,直接调用了vlfeat。
2.用最小二乘估计当前邻域点组成的平面,得到法向量。
3.根据当前邻域点平均值确定邻域质心,通常质心会在弯曲表面的内部,反方向即为法线方向。
vlfeat在这里下载 ,如何配置我就不多说了。
处理效果如下:
原始点云:
点云表面法向量,做了降采样处理:
兔子果断变刺猬。
matlab代码如下:
clear all;
close all;
clc;
warning off;
pc = pcread('rabbit.pcd');
pc=pcdownsample(pc,'random',0.3); %0.3倍降采样
pcshow(pc);
pc_point = pc.Location'; %得到点云数据
kdtree = v