这一章主要内容:
1. Harris角点检测
2. FAST特征检测
3. 尺度不变的SURF特征检测
4.SURF检测描述
一、引言
在计算机视觉中,特征点或称兴趣点,角点(即图像的极值点,线段的终点,曲线曲率最大的点或水平、竖直方向上属性最大的点等等)被广泛应用。这些特征点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。特征点在保留图像图形重要特征的同时,可以代替整幅图像的处理,有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。
特征点检测就是是对有具体定义的、或者是能够具体检测出来的特征点的检测。目前检测方法很多,具体分有三大类基于灰度图像的角点检测、基于二值图像的角点检测、基于轮廓曲线的角点检测。基于灰度图像的角点检测又可分为基于梯度、基于模板和基于模板梯度组合3类方法,其中基于模板的方法主要考虑像素领域点的灰度变化,即图像亮度的变化,将与邻点亮度对比足够大的点定义为角点。常见的基于模板的角点检测算法有Kitchen-Rosenfeld角点检测算法,Harris角点检测算法、KLT角点检测算法及SUSAN角点检测算法。和其他角点检测算法相比,SUSAN角点检测算法具有算法简单、位置准确、抗噪声能力强等特点。
特征点的应用也很广泛,去解决一些重要的图像问题,如目标识别,图像匹配,视觉跟踪,3D重建等等。
二、Harris角点检测
角点是图像局部特征,很方便的在图像中定位(甚至是半像素精确定位),而且经常出现在人造的物体(如墙,门,窗户,桌子等等)中,所以应用广泛。
Harris角点检测是最经典的检测方法,基本原理就是,角点的水平和竖直方向梯度都比较大(经过数学推导,两个特征值即代表水平和垂直方向的强度),边缘点是水平或竖直梯度有一个比较大,平坦点是水平和竖直梯度都比较小。因此主要是计算方向梯度,然后根据特定门限判断是否是最大,确定角点。
opencv中提供两个Harris角点检测的函数,
2.1 cornerHarris
第一个比较简单,直接调用即可
函数头文件:
#include <opencv2/imgproc/imgproc.hpp>
函数定义:
//! computes Harris cornerness criteria at each image pixel
CV_EXPORTS_W void cornerHarris( InputArray src, OutputArray dst, int blockSize,
int ksize, double k,
int borderType=BORDER_DEFAULT );
函数参数说明:
blockSize:角点是两个边缘的连接点,因此在局部范围内,角点是所有方向上梯度最大的点,blockSize就是设置局部检测窗口大小
计算个方向变化的公式:
ksize:在计算个方向变化强度的时候使用了Sobel求其导数,该参数就是设置Sobel滤波器参数。
R计算可以近似为:
k: 两个特征值都不大于门限时,该点是普通点;当只有一个特征值大于门限时,是边缘点;当两个特征值都大于门限时,是角点。由于同时判