matlab练习程序(点云表面法向量)
思路还是很容易想到的:
1.首先使用KD树寻找当前点邻域的N个点,这里取了10个,直接调用了vlfeat。
2.用最小二乘估计当前邻域点组成的平面,得到法向量。
3.根据当前邻域点平均值确定邻域质心,通常质心会在弯曲表面的内部,反方向即为法线方向。
vlfeat在这里下载,配置参考这里,rabbit.pcd下载地址
处理效果如下:
原始点云:
点云表面法向量,做了降采样处理:
兔子果断变刺猬。
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 = vl_kdtreebuild(pc_point); %使用vlfeat建立kdtreenormE=[]; for i=1:length(pc_point)p_cur = pc_point(:,i);[index, distance] = vl_kdtreequery(kdtree, pc_point, p_cur, 'NumNeighbors', 10); %寻找当前点最近的10个点p_neighbour = pc_point(:,index)';p_cent = mean(p_neighbour); %得到局部点云平均值,便于计算法向量长度和方向%最小二乘估计平面X=p_neighbour(:,1);Y=p_neighbour(:,2);Z=p_neighbour(:,3);XX=[X Y ones(length(index),1)];YY=Z;%得到平面法向量C=(XX'*XX)\XX'*YY;%局部平面指向局部质心的向量dir1 = p_cent-p_cur';%局部平面法向量dir2=[C(1) C(2) -1];%计算两个向量的夹角ang = sum(dir1.*dir2) / (sqrt(dir1(1)^2 +dir2(1)^2) + sqrt(dir1(2)^2 +dir2(2)^2)+sqrt(dir1(3)^2 +dir2(3)^2) );%根据夹角判断法向量正确的指向flag = acos(ang);dis = norm(dir1);if flag<0dis = -dis;end%画出当前点的表面法向量t=(0:dis/100:dis)';x = p_cur(1) + C(1)*t;y = p_cur(2) + C(2)*t;z = p_cur(3) + (-1)*t;normE =[normE;x y z];i end pcshowpair(pc,pointCloud(normE));
matlab练习程序(点云表面法向量)相关推荐
- PCL之估计整个点云表面法向量
代码展示: #include <string> #include <iostream> #include <pcl/io/pcd_io.h> #include &l ...
- PCL估计点云的表面法向量
PCL估计点云的表面法向量 估计点云表面法向量的方法 理论基础 法线确定方法 法线方向确定 选择合适的邻域尺度 PCL估计表面法线代码实现 用OpenMP加速法线估计 参考资料 估计点云表面法向量的方 ...
- 光度立体(一)- 基于先验信息的快速表面法向量求解
基于先验信息的快速表面法向量求解 一.光度立体法简介 二.经典光度立体法求解法向量 三.基于先验信息快速求解法向量 一.光度立体法简介 光度立体法(Photometric Stereo)是一种使用多个 ...
- matlab hilb,MATLAB在科学计算中的应用:第2章 MATLAB 语言程序设计基础
<MATLAB在科学计算中的应用:第2章 MATLAB 语言程序设计基础>由会员分享,可在线阅读,更多相关<MATLAB在科学计算中的应用:第2章 MATLAB 语言程序设计基础(7 ...
- matlab多元回归程序,多元回归程序MATLAB程序
<多元回归程序MATLAB程序>由会员分享,可在线阅读,更多相关<多元回归程序MATLAB程序(45页珍藏版)>请在人人文库网上搜索. 1.程序MATLAB多元回归程序matl ...
- 无源定位之时差估计的精确时差估计算法(ETDE)及MATLAB实现程序
精确时差估计算法(ETDE)及MATLAB实现程序 算法原理 算法总结 性能分析 实验结果 算法原理 假设两接收站分别接收的带噪信号为 {x(kT)=s(kT)+ε1(kT)y(kT)=s(kT−D) ...
- matlab潮流程序,IEEE33节点matlab潮流程序.doc
IEEE33节点matlab潮流程序 Bus [1,0,0 ; 2,100, 60; 3,90,40; 4,120,80; 5,60,30; 6,60,20; 7, 200, 100 ; 8,200, ...
- 微信小程序访问云数据库
1.Copy官网测试代码另保存Test.html ,修改APPID和ENVID 公众号使用云开发 / 极简示例 / HTML | 微信开放文档 (qq.com) <html>& ...
- matlab有意思程序,matlab有意思的小程序
10个C++趣味小程序,很有意思的.VIP专享文档 VIP专享文档是百度文库认... 现在很多人使用微信的时间已经非常长了,他们注册的微信号往上可能已经是5年前的事情了,正是由于不少使用者在这个过程当 ...
最新文章
- ‘wmic‘ 不是内部或外部命令,也不是可运行的程序 解决方法
- 面试题整理19 矩阵Z字形扫描
- vim的全局替换[zz]把字符替换成回车
- idea2018.3.5集成scala开发环境
- html boot设置列宽,html - Bootstrap 4:设置列宽固定位置内容的宽度 - SO中文参考 - www.soinside.com...
- java 9999 符号_按格式生成序号,如0001,0002...9999
- ipython 更好的交互环境
- 动态规划之最长回文串
- 实战MHDD检测硬盘
- 简单易懂——Dijkstra算法讲解
- 【转】ASP.NET AJAX入门系列(9):使用ScriptManager控件
- mock.js那点事(上)
- Unity3D ML-agents 入坑指导
- js 大数字单位处理 千、万、千万、亿....
- P型半导体、N型半导体定义
- python中去掉字符串中的空格
- Port 1-1023
- Java第十章复习 I/O输入输出
- Bookmarks_2012_06_13
- 爬虫获取王者荣耀全英雄皮肤