分享

3.FAST角点检测

 心不留意外尘 2016-03-28

from http://blog.sina.com.cn/s/blog_96b836170102w1kk.html

3.FAST角点检测

       本博文原理部分简述,重点在编程实现(程序参考并修改了网上资料,网上程序不一定能运行,但本文程序亲测能跑)

 

  基于加速分割测试的FAST算法可以快速地提取出角点特征。

  该算法判断一个候选点p是否为角点,依据的是在一个像素点p为圆心,半径为3个像素的离散化Bresenllam圆周上,在给定阈值t的条件下,如果在圆周上有n个连续的像素灰度值大于I(p)+t或小于I(p)-t

        控制FAST角点的主要参数是阈值t,输入t以进行角点检测

//FAST:

#include "stdafx.h"

#include

#include

#include

#include "opencv2/opencv.hpp"

#include "opencv2/core/core.hpp"

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include "opencv2/features2d/features2d.hpp" 

#include

#include

#include

#include

 

using namespace cv;

using namespace std;

 

int main(int argc, char** argv)

{

         Matsrc, gray;

         src = imread("C:\\Users\\Administrator\\Desktop\\qi.jpg");

         if(!src.data)

                   return -1;

         //彩色图像转换为灰度图像

         cvtColor(src, gray, CV_BGR2GRAY);

         //定义特征点KeyPoint向量

         std::vector<</span>KeyPoint> keyPoints;

         //调用FAST函数,阈值选为55

         FAST(gray, keyPoints, 55);

 

         inttotal = keyPoints.size();

         //在原图上画出特征点

         for(int i = 0; i < total; i++)

         {

                   circle(src, Point((int)keyPoints[i].pt.x, (int)keyPoints[i].pt.y), 5, Scalar(0, 0, 255), -1, 8, 0);

         }

 

         namedWindow("FAST", CV_WINDOW_AUTOSIZE);

         imshow("FAST", src);

 

         waitKey(0);

         return0;

}

FAST算法比其他已知的角点检测法要快很多倍,但是当图片的噪点较多时,它的健壮性并不好,这依靠一个阈值:当阈值过小时,检测出的角点过多;整体的阈值对于图像局部不一定合适。

效果图:

3.FAST角点检测

3.FAST角点检测

3.FAST角点检测

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多