三维计算机视觉 — 中层次视觉 — Point Pair Feature
机器人视觉中有一项重要人物就是从场景中提取物体的位置,姿态。图像处理算法借助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,'GridAverage',.);
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,),);
for i = :size(pairs,)
Features(i,:) = ppf(self.ModelPointCloud.select(pairs(i,)),...
self.ModelPointCloud.select(pairs(i,)));
end
self.FeatureTree = createns(Features);
self.Pairs = pairs;
end
end
end
三维计算机视觉 — 中层次视觉 — Point Pair Feature的更多相关文章
- 三维计算机视觉 —— 中层次视觉 —— RCNN Family
RCNN是从图像中检测物体位置的方法,严格来讲不属于三维计算机视觉.但是这种方法却又非常非常重要,对三维物体的检测非常有启发,所以在这里做个总结. 1.RCNN - the original idea ...
- point pair feature在2D图像匹配中的应用
point pair feature在2D图像匹配中的应用 point pair feature(ppf) @article{BertramDrost2010ModelGM, title={Model ...
- PCL — Point Pair Feature 中层次点云处理
博客转载自:http://www.cnblogs.com/ironstark/p/5971976.html 机器人视觉中有一项重要人物就是从场景中提取物体的位置,姿态.图像处理算法借助Deep Lea ...
- PCL—低层次视觉—关键点检测(NARF)
关键点检测本质上来说,并不是一个独立的部分,它往往和特征描述联系在一起,再将特征描述和识别.寻物联系在一起.关键点检测可以说是通往高层次视觉的重要基础.但本章节仅在低层次视觉上讨论点云处理问题,故所有 ...
- PCL —— RCNN Family 中层次点云处理
博客转载自:http://www.cnblogs.com/ironstark/p/6046411.html RCNN是从图像中检测物体位置的方法,严格来讲不属于三维计算机视觉.但是这种方法却又非常非常 ...
- PCL—低层次视觉—关键点检测(rangeImage)
关键点又称为感兴趣的点,是低层次视觉通往高层次视觉的捷径,抑或是高层次感知对低层次处理手段的妥协. ——三维视觉关键点检测 1.关键点,线,面 关键点=特征点: 关键线=边缘: 关键面=foregro ...
- PCL—低层次视觉—点云分割(邻近信息)
分割给人最直观的影响大概就是邻居和我不一样.比如某条界线这边是中华文明,界线那边是西方文,最简单的分割方式就是在边界上找些居民问:"小伙子,你到底能不能上油管啊?”.然后把能上油管的居民坐标 ...
- [Deep-Learning-with-Python]计算机视觉中的深度学习
包括: 理解卷积神经网络 使用数据增强缓解过拟合 使用预训练卷积网络做特征提取 微调预训练网络模型 可视化卷积网络学习结果以及分类决策过程 介绍卷积神经网络,convnets,深度学习在计算机视觉方面 ...
- 计算机视觉中的词袋模型(Bow,Bag-of-words)
计算机视觉中的词袋模型(Bow,Bag-of-words) Bag-of-words 读 'xw20084898的专栏'的blogBag-of-words model in computer visi ...
随机推荐
- 一道c++面试题 输入一个维度,逆时针打印出一个指定的矩阵
题目:逆时针打印矩阵元素 #include <stdio.h> #include <malloc.h> int main() { int dimension; int *p; ...
- Vue(一)创建第一个Vue程序
一.下载安装nodeJs 基于node.js,利用淘宝npm镜像安装相关依赖.由于国内使用npm会很慢,这里推荐使用淘宝NPM镜像 -- npm install -g cnpm --registry= ...
- 【springboot】【redis】springboot+redis实现发布订阅功能,实现redis的消息队列的功能
springboot+redis实现发布订阅功能,实现redis的消息队列的功能 参考:https://www.cnblogs.com/cx987514451/p/9529611.html 思考一个问 ...
- iOS:Gif动画功能(显示gif动画、获取gif动画时长、获取gif动画执行次数)
一.简单介绍 gif动画是iOS开发中很常用的一个功能,有的是为了显示加载视频的过程,更多的是为了显示一个结果状态(动画更直观). 那么如何执行gif动画,方法有很多.(这里只写一下方法三,前两种之前 ...
- [Vuex] Split Vuex Store into Modules using TypeScript
When the Vuex store grows, it can have many mutations, actions and getters, belonging to different c ...
- shell中打印带有时间的日志的命令(转)
echo "`date "+%Y-%m-%d %H:%M:%S"` | [logadm -on@`date "+%Y%m%d%H%M%S"`] &qu ...
- 基于R语言的ARIMA模型
A IMA模型是一种著名的时间序列预测方法,主要是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型.ARIMA模型根据原序列是否平稳以及 ...
- 安装Docker,Asp.net core
升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署 Docker从入门到实践 一.安装Docker a).设置Docker仓库 1.按惯例,首先更新Ubuntu的包索引 ...
- OpenCV 对矩阵进行掩码操作
Mask operations on matrices https://docs.opencv.org/master/d7/d37/tutorial_mat_mask_operations.html ...
- H+ 关闭menuTab页面
//注:在contabs.js文件中 $(function () { }); 方法外 加入//注: data-name="' + menuName + '" 这句是加入的自定义属性 ...