PCL — Point Pair Feature 中层次点云处理
博客转载自:http://www.cnblogs.com/ironstark/p/5971976.html
机器人视觉中有一项重要人物就是从场景中提取物体的位置,姿态。图像处理算法借助Deep Learning 的东风已经在图像的物体标记领域耍的飞起了。而从三维场景中提取物体还有待研究。目前已有的思路是先提取关键点,再使用各种局部特征描述子对关键点进行描述,最后与待检测物体进行比对,得到点-点的匹配。个别文章在之后还采取了ICP对匹配结果进行优化。
对于缺乏表面纹理信息,或局部曲率变化很小,或点云本身就非常稀疏的物体,采用局部特征描述子很难有效的提取到匹配对。所以就有了所谓基于Point Pair 的特征,该特征使用了一些全局的信息来进行匹配,更神奇的是,最终的位姿估计结果并不会陷入局部最小值。详细可参见论文:Model globally, match locally: Efficient and robust 3D object recognition. 与 Going further with point pair features。SLAM的重要研究方向object based Slam 也声称使用了Point Pair Feature进行匹配。
为了更好的理解这种方法,而在pcl中也没有找到现成的算法,所以我自己用matlab实现了一遍
算法的思想很简单:
0、ppf 特征为[d,<d,n1>,<d,n2>,<n1,n2>].
1、针对目标模型,在两两点之间构造点对特征F,如果有N个点,那么就有N*N个特征(说明此算法是O(N2)的),N*N个特征形成特征集F_Set
2、在场景中任意取1定点a,再任意取1动点b,构造ppf特征,并从F_set中寻找对应的,那么理想情况下,如果找到了完全匹配的特征,则可获得点云匹配的结果。
3、此算法是一种投票算法,每次匹配都能得到一个旋转角度,如果m个b都投票给了某一旋转角度则可认为匹配成功
这个算法最大的问题就是不停的采样会导致极大的计算量。不过算法本身确实可以匹配物体和场景。

//ppf 特征的构建function obj = ppf(point1,point2)
d = point1.Location - point2.Location;
d_unit = d/norm(d);
apha1 = acos(point1.Normal*d_unit');
apha2 = acos(point2.Normal*d_unit');
apha3 = acos(point1.Normal*point2.Normal');
obj = [norm(d),apha1,apha2,apha3];
end
ppf 特征集的构建
classdef modelFeatureSet < handle
%MODELFEATURESET 此处显示有关此类的摘要
% 此处显示详细说明
properties
FeatureTree
ModelPointCloud
Pairs
end
methods
function obj = modelFeatureSet(pt)
obj.ModelPointCloud = copy(pt.removeInvalidPoints());
end
function growTree(self)
self.ModelPointCloud = pcdownsample(self.ModelPointCloud,);
pt_size = self.ModelPointCloud.Count;
idx = repmat(:pt_size,pt_size,);
tmp1 = reshape(idx,pt_size*pt_size,);
tmp2 = reshape(idx',pt_size*pt_size,1);
pairs = [tmp1,tmp2];
rnd = randseed(,,,,pt_size*pt_size);
pairs = pairs(rnd,:);
Features = zeros(size(pairs,),);
:size(pairs,)
Features(i,:) = ppf(self.ModelPointCloud.)),...
self.ModelPointCloud.)));
end
self.FeatureTree = createns(Features);
self.Pairs = pairs;
end
end
end
PCL — Point Pair Feature 中层次点云处理的更多相关文章
- PCL —— RCNN Family 中层次点云处理
博客转载自:http://www.cnblogs.com/ironstark/p/6046411.html RCNN是从图像中检测物体位置的方法,严格来讲不属于三维计算机视觉.但是这种方法却又非常非常 ...
- 三维计算机视觉 — 中层次视觉 — Point Pair Feature
机器人视觉中有一项重要人物就是从场景中提取物体的位置,姿态.图像处理算法借助Deep Learning 的东风已经在图像的物体标记领域耍的飞起了.而从三维场景中提取物体还有待研究.目前已有的思路是先提 ...
- PCL—点云分割(邻近信息) 低层次点云处理
博客转载自:http://www.cnblogs.com/ironstark/p/5000147.html 分割给人最直观的影响大概就是邻居和我不一样.比如某条界线这边是中华文明,界线那边是西方文,最 ...
- point pair feature在2D图像匹配中的应用
point pair feature在2D图像匹配中的应用 point pair feature(ppf) @article{BertramDrost2010ModelGM, title={Model ...
- 从PCD文件中读取点云数据
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=84 在本小节我们学习如何从PCD文件中读取点云数据. 代码 章例1文件夹中, ...
- MeshLab中进行点云配准
MeshLab是一个开源.可移植和可扩展的三维几何处理系统,主要用于交互处理和非结构化编辑三维三角形网格.它支持多种文件格式: import:PLY, STL, OFF, OBJ, 3DS, COLL ...
- 在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程
在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现本地文件上传流程 by shuijingwan · 2016/01/13 1.SDK安装 github ...
- 【阿里云产品公测】在Laravel4框架中使用阿里云ACE的缓存服务
作者:阿里云用户dvbhack 受论坛排版和格式限制,这篇帖子的格式不是很利于阅读,如果你看帖子觉得不那么舒服,可以看我发表在自己博客上的原文:http://www.ofcss.com/2014/04 ...
- Ubuntu系统中登陆阿里云服务器的方法
如果您购买了阿里云服务器,恰巧又在使用Ubuntu操作系统,那么恭喜你来对地方了,今天给大家分享一下如何在Ubuntu中登陆阿里云服务器: 主要使用两款软件:1.SecureCRT:2.SecureF ...
随机推荐
- 剑指offer--12.不用加减乘除做加法
位运算,好久没用了 &:都为1,结果为1 ^:相同为0,不同为1 |:有1,结果为1 <<:左移 ----------------------------------------- ...
- 2018.8.10 programming bat based on python
@echo off REM Current DevProg Version. Match the pip package version (x.y.z)SET currentversion=0.4.0 ...
- html 常用代码块
解决外边框不计入div尺寸的代码-moz-box-sizing: border-box;box-sizing: border-box;-webkit-box-sizing: border-box; 手 ...
- pdp 的连接方法
<?php $dsn = "mysql:host=127.0.0.1;dbname=blog_edu"; try{ $pdo = new PDO($dsn,'root','' ...
- Android Studio 学习 - Activity生命周期
落下两晚了,继续学习…… 先粘贴2张官方给的流程图: ------------------------------------------------------------------------- ...
- bzoj5457 城市
一棵树,每个点有一个民族,和一个人数,求每个子树里最多的民族及其人数,如果一样,输出编号最小的 $n \leq 500000$ sol: 卡莫队的毒瘤题,需要 dsu on tree 大概就是 dfs ...
- SQL夯实基础(五):索引的数据结构
数据量达到十万级别以上的时候,索引的设置就显得异常重要,而如何才能更好的建立索引,需要了解索引的结构等基础知识.本文我们就来讨论索引的结构. 二叉搜索树:binary search tree 1.所有 ...
- python 中zip函数的使用
1.ta = [1,2,3] tb = [9,8,7] tc = ['a','b','c'] for (a,b,c) in zip(ta,tb,tc): print(a,b,c) 2. ta = [1 ...
- 【ASP.NET Web API2】初识Web API
Web Api 是什么? MSDN:ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务 百度百科:Web API是网络应用程序接口. ...
- 门禁 IC卡 ID 卡 RFID 手环 NFC 银行卡 手机模拟门禁
门禁 IC卡 ID 卡 RFID 手环 NFC 银行卡 手机模拟门禁 原因 最近给公司换了一个门禁. 旧的门禁按键面板已经破了. 不支持我的手环. 按了密码后竟然要按 #. 相关信息 查了资料记录一下 ...