首页 > 代码库 > OpenCV2马拉松第26圈——FAST特征点检测
OpenCV2马拉松第26圈——FAST特征点检测
计算机视觉讨论群162501053
转载请注明:http://blog.csdn.net/abcd1992719g/article/details/28424579
关于角点检测,我写过两篇文章
openCV2马拉松第19圈——Harris角点检测(自己实现)
OpenCV2马拉松第21圈——形态学操作实现角点检测
有兴趣的童鞋可以去看看~~~
收入囊中
- FAST角点检测原理
- 使用OpenCV FAST API检测角点
葵花宝典
对于一个角点来说,应该与周围的大多数像素点有很大的差别
如上图,对于点P,我们圈出了周围的16个点.
I(x)是这16个点的灰度值,I(p)是中心点p的灰度值,只要相差超过一个阀值(譬如40),N就会增加1.当N超过了一定值(比如16个点中的12个),就会被认为是角点,直观明了。
加速算法:测试候选点周围每隔90度角的4个点(点1,5,9,13),应该至少有3个和候选点的灰度值差足够大,否则直接认为其不是特征点。为了提高比较的效率,通常只使用N个周边像素来比较,也就是大家经常说的FAST-N。大家使用比较多的是FAST-9和FAST-12。
半径也是一个参数,如上图选的半径是3,半径3通常给出好的结果和较高效率参数有阀值,非极大值抑制和类型(fast-n)
初识API
在之前的Harris角点检测中,进行非极大值抑制是比较好的选择。因此,一个角点的强度定义如下:中心点灰度值与周围灰度值差的绝对值的和。
荷枪实弹
#include <opencv2/core/core.hpp> #include <opencv2/features2d/features2d.hpp> #include <opencv2/highgui/highgui.hpp> #include <vector> using namespace cv; void main(int argv, char **argc) { Mat image; image = imread(argc[1]); std::vector<KeyPoint> keyPoints; FastFeatureDetector fast(40,true,TYPE_9_16); fast.detect(image,keyPoints); drawKeypoints(image, keyPoints, image, Scalar::all(255), DrawMatchesFlags::DRAW_OVER_OUTIMG); imshow("FAST feature", image); cvWaitKey(0); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。