博客转载自:http://www.cnblogs.com/ironstark/p/5046479.html

关键点又称为感兴趣的点,是低层次视觉通往高层次视觉的捷径,抑或是高层次感知对低层次处理手段的妥协。

                                      ——三维视觉关键点检测

1.关键点,线,面

关键点 = 特征点;

关键线 = 边缘;

关键面 = foreground;

上述三个概念在信息学中几乎占据了统治地位。比如1维的函数(信号),有各种手段去得到某个所谓的关键点,有极值点,拐点...二维的图像,特征点提取算法是标定算法的核心(harris),边缘提取算法更是备受瞩目(canny,LOG.....),当然,对二维的图像也有区域所谓的前景分割算法用于提取感兴趣的区域,但那属于较高层次的视觉,本文不讨论。 由此可以推断,三维视觉应该同时具备:关键点,关键线,关键面三种算法。本质上,关键面算法就是我们之前一文中讨论的分割算法(三维点云不是实心的)。关于关键点更多的信息可以参考:特征检测

ok,在这里我们了解到了,要在n维信息中提取n-1维信息是简单的,但n-2维信息会比n-1维要不稳定或者复杂的多。很容易想象,图像的边缘处理算法所得到的结果一般大同小异,但关键点提取算法的结果可以是千差万别的。主要原因是降维过大后,特征的定义很模糊,很难描述清楚对一幅图像来说,到底怎样的点才是关键点。所以,对3维点云来说,关键点的描述就更难了。点云也有1维边缘检测算法,本文不做讨论。单说说关键点提取。

2.来自点云的降维打击

图像的Harris角点算子将图像的关键点定义为角点。角点也就是物体边缘的交点,harris算子利用角点在两个方向的灰度协方差矩阵响应都很大,来定义角点。既然关键点在二维图像中已经被成功定义且使用了,看来在三维点云中可以沿用二维图像的定义...不过今天要讲的是另外一种思路,简单粗暴,直接把三维的点云投射成二维的图像不就好了。这种投射方法叫做range_image.

首先放上一张range_imge和点云图像的合照:

看起来像个眼睛的那玩意就是range_image. 至于它为什么像个眼睛,就要从它的出生开始说起了。三维点云有多种采集方式,最为著名的是结构光,飞秒相机,双目视觉。简而言之,采集都离不开相机。用相机拍照当然就存在相机的光心坐标原点 Oc 以及主光轴方向 Z. 从这个点,有一种办法可以将三维数据映射到2维平面上。首先,将某点到光心Oc的距离映射成深度图的灰度或颜色(灰度只有256级但颜色却可接近连续变化)。除此之外,再定义一下怎样将点云映射到图像的横纵坐标上就可以了。

任意一点都要和光心进行连线.....这么听起来很熟悉....好像有点像球坐标的意思。球坐标长下面这张图这样。

深度图中的横,纵坐标实际上是a和phi,如果要保证沿着场景中某条直线移动,a线性变化phi却先增大后减小。这也就造成了深度图像一个眼睛一样。但这并不妨碍什么,phi没有定义的地方可以使用深度无限大来代替。

将点云转成深度图,只需要确定一个直角坐标系,角分辨率,a范围,phi范围即可。毕竟这只是一个直角坐标转球坐标的工作而已。

这样做显然是有好处的,首先,这是一种除了八叉树,kd_tree之外,能够将点云的空间关系表达出来的手段。每个点云都有了横,纵,深,三个坐标,并且这种坐标原点的设定方式,在理论上是不会存在干涉的(从原点出发的一条线理论上不会遇到多余1个点)。于是点云的空间关系就自然的被编码与深度图中。

显然,图像中的关键点检测算子就可以被移植到点云特征点求取中来了。

3.基于PCL的点云-深度图转换

//rangeImage也是PCL的基本数据结构
pcl::RangeImage rangeImage;
//角分辨率
float angularResolution = (float) (  1.0f * (M_PI/180.0f));  //   1.0 degree in radians
//phi可以取360°
  float maxAngleWidth     = (float) (360.0f * (M_PI/180.0f));  // 360.0 degree in radians
//a取180°
  float maxAngleHeight    = (float) (180.0f * (M_PI/180.0f));  // 180.0 degree in radians
//半圆扫一圈就是整个图像了

//传感器朝向
  Eigen::Affine3f sensorPose = (Eigen::Affine3f)Eigen::Translation3f(0.0f, 0.0f, 0.0f);
//除了三维相机模式还可以选结构光模式
  pcl::RangeImage::CoordinateFrame coordinate_frame = pcl::RangeImage::CAMERA_FRAME;
//noise level表示的是容差率,因为1°X1°的空间内很可能不止一个点,noise level = 0则表示去最近点的距离作为像素值,如果=0.05则表示在最近点及其后5cm范围内求个平均距离
  float noiseLevel=0.00;
//minRange表示深度最小值,如果=0则表示取1°X1°的空间内最远点,近的都忽略
  float minRange = 0.0f;
//bordersieze表示图像周边点
  ;
//基本数据结构直接打印是ok的
  std::cout << rangeImage << "\n";

PCL—关键点检测(rangeImage)低层次点云处理的更多相关文章

  1. PCL—关键点检测(NARF)低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5051533.html 关键点检测本质上来说,并不是一个独立的部分,它往往和特征描述联系在一起,再将特征描述和识别. ...

  2. PCL—关键点检测(iss&Trajkovic)低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5069311.html 关键点检测往往需要和特征提取联合在一起,关键点检测的一个重要性质就是旋转不变性,也就是说,物 ...

  3. PCL—点云分割(邻近信息) 低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5000147.html 分割给人最直观的影响大概就是邻居和我不一样.比如某条界线这边是中华文明,界线那边是西方文,最 ...

  4. PCL—关键点检测(Harris)低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5064848.html 除去NARF这种和特征检测联系比较紧密的方法外,一般来说特征检测都会对曲率变化比较剧烈的点更 ...

  5. PCL—点云分割(基于凹凸性) 低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5027269.html 1.图像分割的两条思路 场景分割时机器视觉中的重要任务,尤其对家庭机器人而言,优秀的场景分割 ...

  6. PCL—点云分割(超体聚类) 低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5013968.html 1.超体聚类——一种来自图像的分割方法 超体(supervoxel)是一种集合,集合的元素是 ...

  7. PCL—点云滤波(基于点云频率) 低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5010771.html 1.点云的频率 今天在阅读分割有关的文献时,惊喜的发现,点云和图像一样,有可能也存在频率的概 ...

  8. PCL—点云分割(最小割算法) 低层次点云处理

    1.点云分割的精度 在之前的两个章节里介绍了基于采样一致的点云分割和基于临近搜索的点云分割算法.基于采样一致的点云分割算法显然是意识流的,它只能割出大概的点云(可能是杯子的一部分,但杯把儿肯定没分割出 ...

  9. PCL—点云分割(RanSaC)低层次点云处理

    博客转载自:http://blog.csdn.net/app_12062011/article/details/78131318 点云分割 点云分割可谓点云处理的精髓,也是三维图像相对二维图像最大优势 ...

随机推荐

  1. GEF入门实例_总结_01_教程、源码、开发环境准备

    一.前言 最近在学Eclipse插件开发,发现了一个比较好的GEF入门教程,并且按照教程上的操作,一步步实现了一个入门Demo,在此感谢作者的贡献. 好记性不如烂笔头,故决定总结一下这段时间的学习心得 ...

  2. C#中的索引器的简单理解和用法

    索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写. 1.索引器的定义 C#中的类成员可以是任意类型,包括数组和集合.当一个类包含了数组和集合成员时,索引器 ...

  3. BEC translation exercise 2

    Forest fires are a regular feature of Chile's hot, arid summers.智利夏天炙热.干燥,常发生森林火灾.A nearly decade-lo ...

  4. Django REST_framework Quickstart

    局部避免crsf的方式 针对视图函数: from django.views.decorators.csrf import csrf_exempt @csrf_exempt def foo(reques ...

  5. SQL多表联查总结

    交叉连接:(不常用)返回两个表的笛卡尔乘积(也即全组合排列)中符合查询条件的数据行. 内连接返回连接表中符合连接条件和查询条件的数据行. 左外连接返回符合连接条件和查询条件(即:内连接)的数据行,且还 ...

  6. Unity3D for Android 纹理压缩支持

    http://blog.csdn.net/asd237241291/article/details/48548557 首先附图:Unity3D for Android支持的纹理压缩格式 纹理压缩可以通 ...

  7. C#获取堆栈信息,输出文件名、行号、函数名、列号等

    命名空间:System.Diagnostics 得到相关信息: StackTrace st = new StackTrace(new StackFrame(true));StackFrame sf = ...

  8. 高性能服务器架构 的几个注意点 (High-Performance Server Architecture)

    High-Performance Server Architecture 高性能服务器架构 来源:http://pl.atyp.us/content/tech/servers.html译文来源:htt ...

  9. bzoj 1898 [Zjoi2005]Swamp 沼泽鳄鱼——矩阵快速幂

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 当然是邻接矩阵做转移矩阵来快速幂. 对于鳄鱼,好在它们周期的lcm是12,也就是每12 ...

  10. HTTP:HTTP清单

    ylbtech-HTTP:HTTP清单 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbt ...