Matlab计算点云法向量和曲率 您所在的位置:网站首页 离散点的曲率怎么求的出来 Matlab计算点云法向量和曲率

Matlab计算点云法向量和曲率

2024-07-13 05:11| 来源: 网络整理| 查看: 265

垂直于平面的直线所表示的向量为该平面的法向量。

计算点云法向量,即设定点p属于点云集合pt中的一点,搜索其k邻近个点或者r范围内的点,构成局部平面,计算该平面的法向量。

pcnormals

在MATALB2019B中包含了最邻近点计算法向量的function,用法如下

normals = pcnormals(ptCloud); normals = pcnormals(ptCloud,k);

k是最邻近点的数量,默认是8。

clear % 加载茶壶的点云 ptCloud = pcread('teapot.ply'); % 计算法向量,6个邻近点 normals = pcnormals(ptCloud); % 读取x x = ptCloud.Location(1:5:end,1); % 读取y y = ptCloud.Location(1:5:end,2); % 读取z z = ptCloud.Location(1:5:end,3); % uvw为法向量的三列 u = normals(1:5:end,1); v = normals(1:5:end,2); w = normals(1:5:end,3); pcshow(ptCloud) hold on % 显示法向量 quiver3(x,y,z,u,v,w); hold off

结果如下:

曲率计算-并计算法向量 

知网中已有很多文献表明怎么做了,博主直接采用了协方差矩阵进行计算,这里就贴代码了

clear % 读取茶壶点云 ptCloud = pcread('teapot.ply'); % 读取xyz a = ptCloud.Location; %vec储存法向量 vec = zeros(size(a)); %q储存曲率 q = zeros(length(a),1); k = 8; % 搜索每个点的最邻近点 neighbors = knnsearch(a(:,1:3),a(:,1:3), 'k', k+1); for i = 1:length(a) curtemp = neighbors(i,2:end); indpoint = a(curtemp,:); % 计算协方差并提取特征 [v, c] = eig(cov(indpoint)); %特征值按照升序排列1


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有