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建立kdtree normE=[];
for i=:length(pc_point) p_cur = pc_point(:,i);
[index, distance] = vl_kdtreequery(kdtree, pc_point, p_cur, 'NumNeighbors', ); %寻找当前点最近的10个点
p_neighbour = pc_point(:,index)';
p_cent = mean(p_neighbour); %得到局部点云平均值,便于计算法向量长度和方向 %最小二乘估计平面
X=p_neighbour(:,);
Y=p_neighbour(:,);
Z=p_neighbour(:,);
XX=[X Y ones(length(index),)];
YY=Z;
%得到平面法向量
C=(XX'*XX)\XX'*YY; %局部平面指向局部质心的向量
dir1 = p_cent-p_cur';
%局部平面法向量
dir2=[C() C() -]; %计算两个向量的夹角
ang = sum(dir1.*dir2) / (sqrt(dir1()^ +dir2()^) + sqrt(dir1()^ +dir2()^)+sqrt(dir1()^ +dir2()^) ); %根据夹角判断法向量正确的指向
flag = acos(ang);
dis = norm(dir1);
if flag<
dis = -dis;
end %画出当前点的表面法向量
t=(:dis/:dis)';
x = p_cur() + C()*t;
y = p_cur() + C()*t;
z = p_cur() + (-)*t; normE =[normE;x y z];
i
end
pcshowpair(pc,pointCloud(normE));
matlab练习程序(点云表面法向量)的更多相关文章
- matlab练习程序(SUSAN检测)
matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...
- (转)matlab练习程序(HOG方向梯度直方图)
matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...
- 微信小程序之云开发一
最近听说微信小程序发布了云开发,可以不需要购买服务器,就能开发小程序和发布小程序,对于动辄千元的服务器,极大的节约了开发成本,受不住诱惑,我就开始了小程序的云开发,目前项目已上线,亲测不收费,闲不住的 ...
- 微信小程序与云开发
微信小程序基础概念 小程序云开发的三大基础能力:云数据库.云函数.云存储 Java.NodeJS.JavaScript.HTML5.CSS3.VueJs.ReactJs.前端工程化.前端架构 小程序开 ...
- 小程序接入云通信IM
小程序接入云通信IM--插件 小程序微信后台搜索AI情报官组件即可获得小程序云通信IM的即时通信能力
- 微信小程序--使用云开发完成支付闭环
微信小程序--使用云开发完成支付闭环 1.流程介绍 2. 代码实现和逻辑思想描述 云函数统一下单 对应云函数 unipay [CloudPay.unifiedOrder] 函数思路 : 调用云函数封装 ...
- Slog71_选取、上传和显示本地图片GET !(微信小程序之云开发-全栈时代3)
ArthurSlog SLog-71 Year·1 Guangzhou·China Sep 12th 2018 ArthurSlog Page GitHub NPM Package Page 掘金主页 ...
- matlab练习程序(点云下采样)
点云处理有时因为数据量太大,我们需要对其进行下采样. 这里的方法是先将点云填入固定大小的三维网格中,然后每个网格中选一个点生成新的点云. 新点云即为下采样后的点云. 这里使用斯坦福兔子作为测试点云. ...
- matlab练习程序(图像投影到点云)
最近接触点云比较多,如果把图像投影到点云应该挺有意思. 首先需要载入图像,然后做个球或其他什么形状的点云,这里可以参考球坐标公式. 最后通过pcshow将像素输出到点云上即可. 原图: 投影后的点云: ...
随机推荐
- odoo开发笔记 -- div标签代替odoo button写法
odoo开发笔记 -- div标签代替odoo button写法 并调用自定义js <footer> <div id="confirm_request_cloud_repo ...
- sql server 索引阐述系列三 表的堆组织
一. 概述 这一节来详细介绍堆组织,通过讲解堆的结构,堆与非聚集索引的关系,堆的应用场景,堆与聚集索引的存储空间占用,堆的页拆分现象,最后堆的使用建议 ,这几个维度来描述堆组织.在sqlserve ...
- salesforce lightning零基础学习(十二) 自定义Lookup组件的实现
本篇参考:http://sfdcmonkey.com/2017/01/07/custom-lookup-lightning-component/,在参考的demo中进行了简单的改动和优化. 我们在ht ...
- ELK实践(一):基础入门
虽然用了ELK很久了,但一直苦于没有自己尝试搭建过,所以想抽时间尝试尝试.原本打算按照教程 <ELK集中式日志平台之二 - 部署>(作者:樊浩柏科学院) 进行测试的,没想到一路出了很多坑, ...
- for循环输出树木的形状【java】
使用for循环语句输出以下“树木”效果: * *** ***** ******* ********* * * * * * 代码: /* * *** ***** ******* ********* * ...
- DWR第一篇之入门示例
1. 新建maven-web项目,目录结构如下: 2. 在pom.xml里添加dwr所需的依赖 <dependency> <groupId>org.directwebremot ...
- Chrome 浏览器最牛插件之一 Vimium
导航当页: ? 显示help,查询vimium的所有使用方法 h 向左滚动 j 向下滚动 k 向上滚动 l 向右滚动 gg 滚动到顶部 G 滚动到底部 d 向下滚动半页 u 向上滚动半页面 f 显示链 ...
- virualbox 虚拟机管理
虚拟机调换后提示UUID一致,需要重新生成新的虚拟机文件的UUID,使用如下命令: D:\Program Files\Oracle\VirtualBox>VBoxManage internalc ...
- 深入MySQL复制(二):基于GTID复制
相比传统的MySQL复制,gtid复制无论是配置还是维护都要轻松的多.本文对gtid复制稍作介绍. MySQL基于GTID复制官方手册:https://dev.mysql.com/doc/refman ...
- MySQL高可用之组复制(4):详细分析组复制理论
MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...