【OpenCV文档】用于角点检测的Fast算法
原文地址:http://docs.opencv.org/trunk/doc/py_tutorials/py_feature2d/py_fast/py_fast.html#fast-algorithm-for-corner-detection
目标
- 理解FAST算法的基本原理
- 使用OpenCV的FAST函数进行角点(corners)检测
原理
learning for high-speed corner detection”(在2010年再次被修订)中被提出。下面是该算法的一个基本总结。你可以参见原论文去学习更多的细节(下面所有的图片是从原论文中提取的)。
使用FAST进行特征检测
- 从图片中选取一个像素点,下面我们将判断它是否是一个特征点。我们首先把它的密度(即像素值)设为 。
- 设定一个合适的阙值 。
- 考虑该像素点周围的16个像素。(见下图)
- 现在,如果在这个大小为16个像素的圆上有 个连续的像素点,它们的像素值要么都比大,要么都比 小,那么它就是一个角点。(如上图中白色虚线所示)。 这里被设定为12。
- 我们现在应该提出一个高效的测试,来快速排除一大部分是非角点的点。该测试仅仅检查在位置1、9、5和13四个位置的像素(首先检查1和9,看它们是否亮于或暗于阙值。如果是,再检查5和13)。如果是一个角点,那么上述四个像素点中至少有3个应该必须都大于或者小于 (因为若是一个角点,超过四分之三个圆的部分应该满足判断条件,半圆比包含上述某三个点)。如果都不满足,那么不可能是一个角点。完整的分段测试可以被用于接受的所有候选点,通过检测圆上的所有点。这种检测有很好的性能,但是有一些缺点:
1. 当n < 12时不能拒绝许多候选点。
2. 检测出来的角点不是最优的,这是因为它的效率是依靠角点外形的排列和分布的。
3.
4. 相邻的多个特征点会被检测到。
suppression。
机器学习
- 选择一个图片集合进行学习(最好是来自于目标应用定义域)。
- 在每一张图上运行FAST算法,找到特征点。
- 对于每个特征点,存储它周围的16个像素点到一个vector中。为所有的图片做同样的事,得到它们所有特征点的vector
。
- 这16个像素中的每一个像素(假设为),可以有下面三种状态中的一种:
- 依靠这些状态,特征向量被划分为3个子集,, , 。
- 定义一个新的布尔变量,。如果 是一个角点,那些为真;否则为假。
- 使用ID3算法(决策树分类器)来查询每一个子集。
- 递归计算所有的子集直到它的嫡为0。
- 被创建的决策树就被用于其他图片的fast检测。
non-maximal suppression
suppression来解决。
- 为每一个检测到的特征点计算它的分数函数(score function), 。 是和它周围16个像素点的绝对偏差的和。
- 考虑两个相邻的特征点,并比较它们的值。
- 值较低的点将会被剔除。
总结
OpenCV中的FAST特征检测
- cv2.FAST_FEATURE_DETECTOR_TYPE_5_8
- cv2.FAST_FEATURE_DETECTOR_TYPE_7_12
- cv2.FAST_FEATURE_DETECTOR_TYPE_9_16
import numpy as np
import cv2
from matplotlib import pyplot as plt img = cv2.imread('simple.jpg',0) # Initiate FAST object with default values
fast = cv2.FastFeatureDetector() # find and draw the keypoints
kp = fast.detect(img,None)
img2 = cv2.drawKeypoints(img, kp, color=(255,0,0)) # Print all default params
print "Threshold: ", fast.getInt('threshold')
print "nonmaxSuppression: ", fast.getBool('nonmaxSuppression')
print "neighborhood: ", fast.getInt('type')
print "Total Keypoints with nonmaxSuppression: ", len(kp) cv2.imwrite('fast_true.png',img2) # Disable nonmaxSuppression
fast.setBool('nonmaxSuppression',0)
kp = fast.detect(img,None) print "Total Keypoints without nonmaxSuppression: ", len(kp) img3 = cv2.drawKeypoints(img, kp, color=(255,0,0)) cv2.imwrite('fast_false.png',img3)
下面是测试结果。左边是使用了nonmaxSuppression的FAST,右边则没有使用。
【OpenCV文档】用于角点检测的Fast算法的更多相关文章
- OpenCV-Python 用于角点检测的FAST算法 | 四十一
目标 在本章中, 我们将了解FAST算法的基础知识. 我们将使用OpenCV功能对FAST算法进行探索. 理论 我们看到了几个特征检测器,其中很多真的很棒.但是,从实时应用程序的角度来看,它们不够快. ...
- opencv笔记6:角点检测
time:2015年10月09日 星期五 23时11分58秒 # opencv笔记6:角点检测 update:从角点检测,学习图像的特征,这是后续图像跟踪.图像匹配的基础. 角点检测是什么鬼?前面一篇 ...
- OpenCV计算机视觉学习(13)——图像特征点检测(Harris角点检测,sift算法)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 前言 ...
- cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测
参考文献----------OpenCV-Python-Toturial-中文版.pdf 参考博客----------http://www.bubuko.com/infodetail-2498014. ...
- SLAM: 图像角点检测的Fast算法(OpenCV文档)
官方链接:http://docs.opencv.org/trunk/doc/py_tutorials/py_feature2d/py_fast/py_fast.html#fast-algorithm- ...
- 深入学习OpenCV文档扫描及OCR识别(文档扫描,图像矫正,透视变换,OCR识别)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面 ...
- Opencv学习笔记------Harris角点检测
image算法测试iteratoralgorithmfeatures 原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/73 ...
- 编译OpenCV文档
概述 使用OpenCV的过程中经常查看文档,每次都去官网查看,不过国内访问速度很慢,有一份本地的文档就好了.本文列出了在Linux(Fedora)系统上从OpenCV源码编译出documentatio ...
- OpenCV教程(43) harris角的检测(1)
计算机视觉中,我们经常要匹配两幅图像.匹配的的方式就是通过比较两幅图像中的公共特征,比如边,角,以及图像块(blob)等,来对两幅图像进行匹配. 相对于边,角更适合描述图像特征, ...
随机推荐
- audioplayer.js插件的使用及小bug
之前在项目里用audioplayer.js做的一个页面,改了布局样式,还有插件自身有个bug就是audio添加autoplay属性后有两个音频播放,其中一个无法控制,会一直播放,我查看了官网的demo ...
- mybatis自动生成
很简单只要配两个文件 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmln ...
- RedisAsyncClientAdapter-------------接口继承
public abstract class RedisAsyncClientAdapter<K, V, T extends RedisKeyAsyncCommands<K, V> & ...
- node之querystring模块
前言 querystring 模块提供了一些实用工具,用于解析与格式化 URL 查询字符串. 一.querystring.parse() 用于将一个查询字符串解析为JS 对象. const query ...
- Window下使用ftp命令往Linux中发送文件
操作步骤:首先,切换到文件目录1.ftp ip地址2.连接成功后,输入正确的用户名和密码.3.binary(表示以二进制的格式传送)4.put/get 文件名(或文件的绝对路径) 退出:bye
- 如何判断页面是qq浏览器还是微信浏览器打开
// 判断是QQ浏览器还是微信浏览器的js代码isWx = function() { var ua = navigator.userAgent.toLowerCase(); return ua.mat ...
- C语言多维数组的指针传递
在C语言中为了节省空间,提高运行速度经常使用指针来完成数组的传递. 对于一维数组而言可以直接传递首地址 而对于二维数组必须在传递时声明是二维数组的指针,并且调用时也要经过一些运算 首先是定义形参: 函 ...
- FJUT第四周寒假作业[JL]最后的晚餐(动态规划)
题目来源:http://210.34.193.66:8080/vj/Contest.jsp?cid=163#P4 [JL]最后的晚餐 TimeLimit:1000MS MemoryLimit:100 ...
- CentOS 7安装Python3.5,并与Python2.7兼容并存
CentOS7默认安装了python2.7.5,当需要使用python3的时候,可以手动下载Python源码后编译安装.1.安装python3.5可能使用的依赖1 yum install openss ...
- Docker基本架构
Docker 采用了 C/S架构,包括客户端和服务端. Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建.运行.分发容器). 客户端和服务端既可以运行在一个机器上,也可通 ...