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通常给出好的结果和较高效率

初识API

class FastFeatureDetector : public FeatureDetector
{
public:
    FastFeatureDetector( int threshold=1, bool nonmaxSuppression=true, type=FastFeatureDetector::TYPE_9_16 );
    virtual void read( const FileNode& fn );
    virtual void write( FileStorage& fs ) const;
protected:
    ...
};

参数有阀值,非极大值抑制和类型(fast-n)

在之前的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);
}

OpenCV2马拉松第26圈——FAST特征点检测

时间: 2024-12-23 22:04:55

OpenCV2马拉松第26圈——FAST特征点检测的相关文章

OpenCV2马拉松第22圈——Hough变换直线检测原理与实现

计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/27220445 收入囊中 Hough变换 概率Hough变换 自己实现Hough变换直线检测 葵花宝典 先看一下我实现的效果图 下面,我们进入Hough变换的原理讲解. 看上图,我们知道,经过一点(x0,y0)的直线可以表示成y0 = mox + b0 反过来看方程,b = –x0m + y0 ,于是我们从原来的坐标系转移到了Hough空间,m是横

openCV2马拉松第19圈——Harris角点检测(自己实现)

计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/26824529 收入囊中 使用OpenCV的connerHarris实现角点检测 自己实现Harris算法 下面是自己实现的一个效果图 因为阀值设置比较高,所以房屋周围没有找出来 葵花宝典 在此之前,我们讲过边缘的检测,边缘检测的基本原理就是x方向或者y方向梯度变化很大,角点,顾名思义,就是两个方向的梯度变化都很大. 左1,平滑区域,没有边缘和角点

OpenCV2马拉松第27圈——SIFT论文,原理及源码解读

计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/28913101 简介 SIFT特征描述子是David G. Lowe 在2004年的ijcv会议上发表的论文中提出来的,论文名为<<Distinctive Image Featuresfrom Scale-Invariant Keypoints>>.这是一个很强大的算法,主要用于图像配准和物体识别等领域,但是其计算量相比也比较大,性价

OpenCV2马拉松第15圈——边缘检測(Laplace算子,LOG算子)

收入囊中 拉普拉斯算子 LOG算子(高斯拉普拉斯算子) OpenCV Laplacian函数 构建自己的拉普拉斯算子 利用拉普拉斯算子进行图像的锐化 葵花宝典 在OpenCV2马拉松第14圈--边缘检測(Sobel,prewitt,roberts)  我们已经认识了3个一阶差分算子 拉普拉斯算子是二阶差分算子.为什么要增加二阶的算子呢?试想一下,假设图像中有噪声,噪声在一阶导数处也会取得极大值从而被当作边缘.然而求解这个极大值也不方便.採用二阶导数后,极大值点就为0了.因此值为0的地方就是边界.

OpenCV2马拉松第7圈——图像金字塔

收入囊中 高斯金字塔 拉普拉斯金字塔 葵花宝典 图像金字塔是一系列的图像集合,都是从单张图片获得的,连续做下采样(downsample)直到预设停止条件.最常用的是两种,高斯金字塔和拉普拉斯金字塔.[当然还有其他的金字塔,比如小波金字塔] 高斯金字塔 对一张图像不断的模糊之后向下采样,得到不同分辨率的图像,同时每次得到的新的图像宽与高是原来图像的1/2, 最常见就是基于高斯的模糊之后采样,得到的 一系列图像称为高斯金字塔. 原图来自http://blog.csdn.net/jia20003/ar

OpenCV2马拉松第10圈——直方图反向投影(back project)

收入囊中 灰度图像的反向投影 彩色图像的反向投影 利用反向投影做object detect 葵花宝典 什么是反向投影?事实上没有那么高大上! 在上一篇博文学到,图像能够获得自己的灰度直方图. 反向投影差点儿相同是逆过程,由直方图得到我们的投影图. 步骤例如以下: 依据模版图像,得到模版图像的灰度直方图. 对灰度直方图对归一化,归一化后是个概率分布,直方图的积分是1 依据概率分布的直方图,求输入图像的投影图,也就是对每个像素点,我们依据灰度值,能够得到其概率 得到的投影图是介于[0,1]之间的,为

OpenCV2马拉松第12圈——直方图比較

收入囊中 使用4种不同的方法进行直方图比較 葵花宝典 要比較两个直方图, 首先必需要选择一个衡量直方图相似度的对照标准.也就是先说明要在哪个方面做对照. 我们能够想出非常多办法,OpenCV採用了下面4种 公式也都不难,我们自己就能实现. d越小,表示差异越低,两幅图像越接近,越相似 初识API C++: double compareHist(InputArray H1, InputArray H2, int method) C++: double compareHist(const Spars

OpenCV2马拉松第13圈——模版匹配

收入囊中 在http://blog.csdn.net/abcd1992719g/article/details/25505315这里,我们已经学习了如何利用反向投影和meanshift算法来在图像中查找给定模版图片的位置.meanshift针对的是单张图像,在连续图像序列的跟踪中,camshift(Continuously Adaptive Mean-SHIFT)是一种著名的算法.但在这里,我们先不讨论camshift,而是先讨论最简单的模版匹配. 模版匹配算法 opencv normalize

OpenCV2马拉松第16圈——边缘检测(形态学梯度)

计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g 收入囊中 利用OpenCV函数进行形态学梯度操作 自定义结构矩阵进行形态学梯度操作 葵花宝典 在此之前,如果你还没接触过灰度图像形态学膨胀与腐蚀,希望你能仔细阅读灰度图像形态学膨胀与腐蚀 本质上,灰度与二值并不差异,二值不过是0与255,膨胀与腐蚀的操作都是一样的 形态学梯度的定义如下: 形态梯度 dst=morph_grad(src,element)=dilate(src,ele