OpenCV2学习笔记(十一):特征点检测之FAST算法
来源:互联网 发布:linux 字体安装 编辑:程序博客网 时间:2024/06/04 18:32
在上一节中,记录了Harris算子检测图像特征点的定义和基于OpenCV的实现方法,它基于两个正交方向上的强度变化率。本节记录另一种特征点检测算子FAST(Features from Accelerated Segment Test),它依赖少数像素的比较来确定是否接受一个特征点,其检测效率要好于Harris。
与Harris算法相同,FAST特征算法需要定义什么是特征点。这次的定义基于假定特征点周围的图像强度,通过检查候选像素的周围一圈像素来决定是否接受这一个特征点。与中心点差异较大的像素如果组成连续的圆弧,并且弧长大于圆周长的3/4,则可判断为特征点。
在此基础上,算法还使用了额外的技巧进行加速。首先测试一个圆圈上被90度分隔的四个点(如顶部、底部,左侧和右侧四个点),如果要满足FAST的定义条件,四个点中至少要有三个点必须同时大于或小于中心像素。如果条件不成立,则该点可以直接被移除而不需要进一步的验证。在实践中,大部分的像素点可以通过这个测试进行移除,因此该算法非常高效。
和Harris方法相同的是,可以在找到的角点上执行非极大值抑制,因此需要指定角点强度的测量方法。
这里可以使用OpenCV 2的通用接口来创建任意的特征检测器,比如FAST检测器的使用方法如下:
// 创建特征点的向量 std::vector<cv::KeyPoint>keypoints; // 构造FAST特征检测器 cv::FastFeatureDetector fast(75); // 进行检测 fast.detect(image, keypoints);
同时,为了方便标记特征点,OpenCV提供了通用的特征点绘制函数cv::drawKeypoints,其调用方法如下:
// 通用的特征点绘制函数 cv::drawKeypoints(image, // 输入图像 keypoints, // 特征点向量 image, // 输出图像 cv::Scalar(255,255,255), // 特征点颜色 cv::DrawMatchesFlags::DRAW_OVER_OUTIMG); // 绘制标记
通过指定选中的绘制标记,可以看到输出图像中特征点均得到了绘制:
完整的实现代码如下,只需修改main函数:
#include <QCoreApplication>#include <opencv2/core/core.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/features2d/features2d.hpp>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); // 输入图像 cv::Mat image = cv::imread("c:/031.jpg", 0); cv::namedWindow("Original Image"); cv::imshow("Original Image", image); // 特征点的向量 std::vector<cv::KeyPoint>keypoints; // 构造FAST特征检测器 cv::FastFeatureDetector fast(75); // 进行检测 fast.detect(image, keypoints); // 通用的特征点绘制函数 cv::drawKeypoints(image, // 输入图像 keypoints, // 特征点向量 image, // 输出图像 cv::Scalar(255, 255, 255), // 特征点颜色 cv::DrawMatchesFlags::DRAW_OVER_OUTIMG); // 绘制标记 cv::namedWindow("Fast Feature"); cv::imshow("Fast Feature", image); return a.exec();}
FAST算法可以获得非常快速的特征点检测,在需要考虑运行速度的时候可以选用,比如在高帧率的视频序列中进行视觉跟踪。
关于FAST特征算法的详细描述,可参考以下论文:
The article by E.Rosten, T.Drummond, Machine Learning for High-speed Corner Detection, In European Conference on Computer Vision, pp.430-443, 2006
- OpenCV2学习笔记(十一):特征点检测之FAST算法
- 特征点检测学习_4(FAST算法)
- Opencv2系列学习笔记12(检测fast特征)
- Opencv2系列学习笔记12(检测fast特征)
- OpenCV2编程手册笔记之 8.3检测FAST特征
- 【特征检测】FAST特征点检测算法
- 【特征检测】FAST特征点检测算法
- 【特征检测】FAST特征点检测算法
- OpenCV2学习笔记(十):特征点检测之Harris法
- FAST特征点检测算法
- FAST特征点检测算法
- FAST特征点检测算法
- OpenCV学习笔记(四十六)——FAST特征点检测features2D
- OpenCV学习笔记(四十六)——FAST特征点检测features2D
- OpenCV学习笔记(四十六)——FAST特征点检测features2D
- 图像特征之FAST角点检测
- Fast特征点检测
- FAST特征点检测
- Android DrawerLayout 侧滑
- java中父类对象引用指向子类对象
- ASIHTTPRequest 详解
- Java实现mysql存储过程调用
- C++中的命名空间namespace
- OpenCV2学习笔记(十一):特征点检测之FAST算法
- LINQ之增删改查
- Jenkins 发邮件 553 Mail from must equal authorized user解决办法
- redis 由浅入深之 高级(数据备份与恢复、安全、性能测试和客户端连接)
- 测试GWT 2.7.0的SuperDevMode模式
- java虚拟机JVM内存的配置与调优
- 死锁产生的原因及四个必要条件
- 邻接表(简单模拟)
- 开源项目导入eclipse的一般步骤