Opencv2系列学习笔记12(检测fast特征)

一:Fast特征定义什么是角点:

这次的定义基于假定特征点周围的图像强度,通过检查候选像素周围一圈像素来决定是否接受一个特征点。与中心点差异较大的像素如果组成连续的圆弧,并且弧长大于原周长的3/4,那么我们认为找到了一个特征点

二:加速技巧

   首先测试圆上被90度分割的四个点(顶部,底部,左侧及右侧),那么为了满足上述条件,四个点中至少三个点必须大于或者小于中心像素。如果不成立,那么该点可以被直接移除而不需要检查额外圆周上的点。在实践中,大部分的像素点可以通过该测试进行移除,因此非常有效。

三:半径参数

   测试中圆的半径是一个参数,实践中发现,半径为3可以兼顾结果和效率。

四:算法适用

该算法可以获得非常快的特征点检测,在需要考虑进行速度时可以选用,如在高帧率的视频序列中进行视觉跟踪。

Code:

[cpp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. #include <iostream>  
  2. #include <opencv2\highgui\highgui.hpp>  
  3. #include <opencv2\core\core.hpp>  
  4. #include <opencv2\features2d\features2d.hpp>   //  特征点检测类都封装在features2d这个模块中  
  5. #include <opencv2\imgproc\imgproc.hpp>  
  6.   
  7. using namespace std;  
  8. using namespace cv;  
  9.   
  10. int main()  
  11. {  
  12.     Mat image = imread("F:\\lena.png", 1);  
  13.     if(!image.data)  
  14.     {  
  15.         cout << "Fail to load image" << endl;  
  16.         return 0;  
  17.     }  
  18.     vector<KeyPoint> keypoints;  
  19.     FastFeatureDetector fast(20);  // 20 为阀值  
  20.     fast.detect(image,keypoints);  
  21.     drawKeypoints(image, keypoints, image, Scalar::all(-1), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);  // opencv2 提供的一个特征点绘制函数 ---- keypoints  
  22.     namedWindow("fast");  
  23.     imshow("fast", image);  
  24.     waitKey(0);  
  25.     return 0;  
  26.   
  27. }  

Result:


参考blog:

http://blog.youkuaiyun.com/yangtrees/article/details/7530354

作者:小村长  出处:http://blog.youkuaiyun.com/lu597203933 欢迎转载或分享,但请务必声明文章出处。 (新浪微博:小村长zack, 欢迎交流!)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值