图像处理之cornerdetection(角点检测)综述
角点检测是机器视觉和计算机视觉领域的基本课题。目前,角点尚无精确的数学定义,通常将以下几种点称为角点:两条以上边缘的交点、图像上各方向亮度变化足够大的点,以及边缘曲线上的曲率极大值点。角点也称为兴趣点或特征点,它在简化图像信息的同时,保留了重要的特征信息,便于图像数据处理。因此,角点检测在三维场景重建、运动估计、视觉跟踪以及图像配准与匹配等计算机视觉领域广泛应用。
下面对现有的角点检测方法进行了分类和阐述,主要分为基于灰度强度的方法和基于边缘轮廓的方法,并汇总了其他类别的角点检测方法
1 角点检测算法发展与现状分析
根据实现原理,现有的角点检测算法大致可分为三类:基于灰度强度的方法、基于边缘轮廓的方法和基于二值图像的角点检测。其中,基于二值图像的角点检测方法并不普遍。因此,我们主要阐述前两类方法的典型算法核心思想及关键特征提取步骤。
1.1 基于灰度图像的角点检测
基于灰度图像强度的角点检测技术又可分为三类:基于梯度、基于模板和基于模板梯度组合。基于梯度的方法通过计算边缘曲率来判断角点是否存在,但对噪声敏感。基于模板的方法考虑像素邻域点的灰度值变化,将与邻近点灰度值差异明显的点定义为角点。还有一类方法综合了灰度曲率和模板策略进行角点检测。
1.1.1 Moravec角点检测技术
1977年,Moravec提出了Moravec角点检测算子,其基本思想是通过在图像上移动一个二值矩形窗口来查找最小灰度值变化的最大值。这种方法的缺点是响应值非各向同性,对噪声和边缘敏感,对旋转不具备不变性。尽管如此,Moravec算子作为第一个被广泛使用的角点检测算法,开创了角点检测的新时代。
1.1.2 Harris角点检测技术及相关改进方法
受Moravec角点检测算法启发,Harris和Stephens在1988年提出了著名的Harris角点检测算子。该方法首先计算Harris矩阵M(二阶矩矩阵或自相关矩阵),然后计算该矩阵的特征值 λ 1 , λ 2 {\lambda _1},{\lambda _2} λ1,λ2。这两个特征值表征了Harris矩阵主曲率,再通过构建如下的Harris角点量测函数R来确定角点:
R = ( λ 1 λ 2 ) − k ( λ 1 + λ 2 ) 2 = ∣ M ∣ − k ⋅ t r 2 ( M ) R = ({\lambda _1}{\lambda _2}) - k{({\lambda _1} + {\lambda _2})^2} = \left| M \right| - k \cdot t{r^2}(M)\; R=(λ1λ2)−k(λ1+λ2)2=∣M∣−k⋅tr2(M)
最后对R进行非极大值抑制,所得角点位置在局部梯度最大值处。Harris角点检测方法不仅对噪声不敏感、具有平移和旋转不变性、高重复性和高信息量,而且在不同光照条件下具有良好的稳定性。然而,该方法不适用于对尺度变化要求高的场合。
2014年,Qiao等人提出了一种改进的Harris亚像素角点检测算法,提高了控制点图像的定位精度。针对Harris角点检测算法在含噪声图像中检测不准确的问题,卢伟家提出在Harris算法设置的局部移动窗口中加入一种加权系数自适应的加权均值滤波,该方法可有效减少伪角点的形成,同时具有良好的精确度和检测速度。2017年,Wang等人针对角点检测算法在提取角点时必须给出合适阈值的问题,提出了一种基于迭代阈值的自适应Harris角点检测算法。
1.1.3 基于SUSAN的角点检测技术
1997年,Smith和Brady提出了另一种著名的角点检测算法——同值分割吸收核(SUSAN, Smallest Univalue Segment Assimilating Nucleus)。该算法利用像素邻域的圆形模板,判断该点是否属于USAN区域,判别函数如下:
c ( r ⇀ , r 0 ⇀ ) = { 1 i f ∣ I ( r ⇀ ) − I ( r 0 ⇀ ) ∣ ≤ t 0 i f ∣ I ( r ⇀ ) − I ( r 0 ⇀ ) ∣ > t c(\mathop r\limits^ \rightharpoonup,\mathop {r_0}\limits^ \rightharpoonup) = \left\{ \begin{array}{l} 1\;\;\;{\rm{ if}}\left| {I(\mathop r\limits^ \rightharpoonup) - I(\mathop {r_0}\limits^ \rightharpoonup)} \right| \le t\\ 0\;\;\;{\rm{ if}}\left| {I(\mathop r\limits^ \rightharpoonup) - I(\mathop {r_0}\limits^ \rightharpoonup)} \right| > t \end{array} \right. c(r⇀,r0⇀)=⎩ ⎨ ⎧1if I(r⇀)−I(r0⇀) ≤t0if I(r⇀)−I(r0⇀) >t
使用如下角点响应函数计算函数值:
R ( r 0 ) = { g − n ( r 0 ) n ( r 0 ) > g 0 n ( r 0 ) < g R({r_0}) = \left\{ \begin{array}{l} g - n({r_0})\;\;\;{n({r_0}) > g}\\ 0\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; {n({r_0}) < g} \end{array} \right. R(r0)={g−n(r0)n(r0)>g0n(r0)<g
如果该函数值大于某个阈值且为局部极大值,则认为该点是角点。其中,统计圆形模板中和核心点有相似亮度值的像素个数n的公式如下:
n ( r 0 ) = ∑ r e D ( r 0 ) c ( r , r 0 ) \;{\rm{ }}n({r_0}) = \sum\limits_{reD({r_0})} {c(r,{r_0})} n(r0)=reD(r0)∑c(r,r0)
该算法具有速度快、定位精度高、高重复性、平移和旋转不变性等优点。但许多特征位于边缘结构而非真正的角点处,且对噪声敏感、缺少信息量,在处理模糊图像时性能较差。
在经典SUSAN算法的基础上,He等人采用角点预检测来消除伪角,减少计算量,从而提高算法速度。针对传统SUSAN算子只能在单一尺度下检测图像中角点的不足,王冠群等人提出了一种基于高斯变换的多尺度SUSAN角点检测方法。该方法利用高斯变换获得待检测图像的多尺度分层图像,构建高斯金字塔,结合自适应阈值的SUSAN算子检测出不同尺度下的候选角点,将其还原到原始图像中的相应位置构成候选角点集,在候选角点集中经小邻域信息筛选获得最终角点。实验结果表明,该方法不仅能在不同尺度下有效获取有用的角点信息,而且在提高SUSAN算子正确率的同时,降低了角点的伪检率。
1.1.4 FAST角点检测技术
1998年,Trajkovic和Hedley[提出了一种快速角点检测算子,其基本思想是研究某点邻域内通过该点的任意一条直线上的灰度变化情况。首先计算出水平和垂直方向灰度变化值,然后构建一个角点度量函数来判断角点。2006年,Rosten和Drummond提出了高速角点检测算子,其基本思想是利用机器学习来加速角点检测过程。上述两种算法都对图像尺度变化敏感。
近年来,针对当前FAST角点检测算法只能检测单一类型的角点,且单一阈值作用于整幅图像难以取得理想效果等问题,Park等人为解决可穿戴设备的图像分辨率与系统功耗之间的权衡问题,提出了一种新的快速角点检测方法。该方法在计算性能和可重复性方面优于以前的算法。
1.2 基于轮廓曲线的角点检测
相对于基于梯度和基于模板的检测器,基于轮廓的检测器在角点检测前先进行边缘轮廓检测,在轮廓上而非整幅图像上检测角点,因此具有极低的错误检测概率。该方法的角点测度被定义在轮廓上,并且区别于轮廓上的光滑像素点。
1.2.1 基于Freeman链码的角点检测技术
二维线条图像可用方向Freeman链码表示。这种检测方法先分割图像,然后提取图像边界的Freeman链码,将方向改变速率大的点标记为角点。Freeman链码指相邻两像素连线的八种可能方向值,称为八方位链码。该方法计算步骤简洁,但检测效果强依赖于图像分割的质量。由于需要计算夹角,对噪声敏感,在进行检测时必须对图像进行去噪预处理。
2014年,曾接贤等人提出了一种曲率尺度空间与链码方向统计相结合的角点检测方法。2017年,Rachmawati等人提出了一种将高速角点检测与Freeman链码相结合的多边形逼近技术。该方法利用一组图像角点构造了一串有序线段的近似多边形,可进一步用于形状表示和分析领域,作为数字图像的轮廓描述。2018年,刘相湖等人提出了一种对Freeman链码分析的角点检测算法,该方法在Freeman链码发生变化时,通过分析其连续前后多个点的链码是否符合特定规则来判定角点。
1.2.2 基于CSS的角点检测算法
Mokhtarian等人提出了曲率尺度空间(Curvature-Scale-Space, CSS)的角点检测器,利用不同角度下的局部曲率进行角点检测,并在角度下追踪角点以改善定位准确性。然而,CSS角点检测算法对轮廓的局部变化和噪声高度敏感,且难以选择合适的高斯尺度来平滑轮廓和角点阈值。
Zhong等人提出了直接曲率尺度空间(DCSS),该方法将平面曲线的曲率与高斯核直接转换而产生CSS。他们从理论上分析了DCSS在平面曲线拐角检测中的应用,研究了孤立的单角和双角模型的尺度空间行为,定义了若干模型属性,使DCSS图像能够转化为树型组织,从而能够在多尺度意义上进行角点检测。
2016年,李伟生等人提出了一种基于曲率多尺度的自适应角点检测算法AMCP(Adaptive Multi-scale Curvature Polynomial)。该算法结合了尺度多项式的方法,并构造局部曲率显著度LCCS(Local Corners Curvature Saliency),从而用自适应的阈值代替全局阈值,极大地增强了算法应对尺度、旋转等变化的鲁棒性。
1.2.3 利用弦到点的距离累加的角点检测算法
2008年,Awrangjeb等人提出了利用弦到点的距离累加(CPDA)的角点检测算法。该方法在对图像中的角点进行定位时产生最小的定位误差,有效避免了CSS算法中存在的主要问题。然而,该算法仍存在以下缺陷:邻近角点被合并、钝形角点被误删除,以及无法有效剔除圆形角点。
2014年,Jin等人针对基于弦对点距离累加、定位精度低、检测时间复杂度高等缺点,提出了改进方法。他们首先获得单尺度下的候选角点并保留相邻角点,然后计算多尺度下候选角的特征值,从而有效地消除了伪角。
2017年,Hossain等人提出了一种基于CPDA改进的角点检测算法CADT。该方法的预处理和改进步骤与CPDA相似,但有效地减少了定位误差,提高了平均重复性,并降低了角点的伪检率。
1.2.4 基于角度(Angle)的角点检测算法
基于Angle的角点检测算法根据边缘点与左右邻域内其他点形成的夹角最小值来标识该边缘点。它将Angle值固定在一定范围内,其值大小与角点的尖锐度成正比,有效避免了基于CSS和CPDA算法中存在的问题。但是,该方法仍有以下不足:无法检测出邻近角点,难以有效去除圆形角点和虚假角。
2012年,Sadat等人结合了角探测器CPDA和高曲率点探测器IPAN99,为不同的图像变换提供了鲁棒的角点位置。
2017年,金亦挺等人提出了基于角度累加的角点检测算法。该算法首先获取图像边缘,定义反映边缘点特征的角度累加概念,并在"单弦"下计算边缘点角度累加值,作为角点初始响应以获取候选角点。然后,构造候选角点的局部自适应阈值来去除圆形角点,并通过实验确定其支撑邻域范围和比例系数。接着,在"三弦"下获取角点特征值,构造全局阈值来去除伪角点。最后,对曲线端点和T交叉点进行检测,得到最终角点检测结果。
1.2.5 多尺度Gabor滤波器的角点检测
2004年,Gao等人提出了基于Gabor小波的角点检测算子。多尺度Gabor滤波器的角点检测算法克服了在不同图像上的尺度选择问题。该算法首先提取图像边缘轮廓,然后用一组4个尺度8个方向的Gabor滤波器虚部对图像进行平滑处理,并计算每个像素在相同尺度下各方向上Gabor滤波器虚部响应的归一化和。最后,将每个边缘像素点在所有尺度下的乘积作为新的角点测度,当角点测度大于预设阈值时,认定该点为角点。
2014年,Zhang等人提出了一种基于轮廓的角点检测器,该方法利用Gabor滤波器虚部在轮廓上的幅值响应。与传统通过分析边缘轮廓形状和搜索平面曲线上局部曲率极大值来检测角点的方法不同,该角点检测器结合了边缘轮廓的像素及其相应的灰度变化信息。
2016年,田子怡等人提出了一种基于边缘轮廓线的多尺度Gabor滤波器角点检测算法。
2017年,高华提出了一个既利用图像边缘轮廓信息又利用图像灰度信息的基于Log-Gabor梯度方向一致性的角点检测算法,以提高角点检测器的检测性能。
1.3 其他的角点检测技术
此外,许多研究人员也提出或改进了基于角点的检测算子:
2008年,He和Yung提出了一种使用自适应曲率阈值从初始列表中删除圆角的角点检测方法。
刘文进等人提出了一种基于AP聚类角点提取优化的双边滤波(BF)角点检测改进算法。
2015年,孔祥楠等人提出了一种基于各向异性高斯方向导数表示的角点检测器和分类器。该角点检测器融合了基于轮廓和灰度强度的检测思想,提出了一种像素表示为定向角度函数的方法,从而表征了像素周围的局部方向灰度变化。
2016年,Xing等人基于局部区域的自适应阈值,提出了一种新的带填充环和外环的掩码来检测图像中的角点。该方法先利用内填充圆作为响应函数,对图像角领域、目标边缘以及平坦区域等非角区域进行滤波。然后利用复杂的响应函数,同时考虑内圈和外环的边缘,并采取相关算法检测位于薄带、噪声和突出像素上的虚假角点。
2017年,Cho等人提出了一种新的基于非角度测量的角点检测方法。该非角函数消除了位于平坦区域的像素并删除了沿任意方向边缘的像素。
2 常见角点检测算法及其优劣势:
- Harris角点检测算法:
- 优点:
- 能够快速检测图像中的角点。
- 对于旋转、平移、缩放等几何变换具有一定的不变性。
- 算法原理简单,易于理解和实现。
- 缺点:
- 对图像亮度的变化比较敏感,可能会误检测出噪声点或者平滑区域。
- 对于尺度变化比较敏感,可能会漏检一些重要的角点。
- 在角点密集的区域,可能会出现角点重复检测的情况。
- 优点:
- Shi-Tomasi角点检测算法(也称为Good Features to Track):
- 优点:
- 相对于Harris角点检测,对图像亮度变化和尺度变化的适应性更强。
- 在角点密集的区域,能够避免角点重复检测的情况。
- 可以通过设置阈值来控制检测出的角点数量。
- 缺点:
- 对于旋转不变性不如Harris角点检测好。
- 算法原理比Harris角点检测稍微复杂一些。
- 优点:
- SIFT(Scale-Invariant Feature Transform)算法:
- 优势:
- 具有旋转不变性和尺度不变性,对光照变化也具有较好的鲁棒性。
- 描述子长度较长(128维),提供丰富的特征信息,适用于高精度匹配场景,如图像拼接、三维重建等。
- 劣势:
- 计算复杂度较高,不适用于实时应用。
- 专利曾受保护,商业应用受限,尽管现在专利已过期。
- 优势:
- SURF(Speeded Up Robust Features)算法:
- 优势:
- 计算效率高,相比于SIFT,SURF的计算速度大大提升。
- 鲁棒性强,在不同的光照条件、视角变化下表现良好。
- 内存占用少,描述子较短(64维),减少了存储需求。
- 劣势:
- 在一些极端情况下可能不如SIFT稳定。
- 准确性较低,对噪声和变形更敏感。
- 优势:
- FAST(Features from Accelerated Segment Test)算法:
- 优势:
- 速度非常快,适合实时应用,因为它不涉及尺度、梯度等复杂运算。
- 使用一定邻域内像素的灰度值与中心点比较大小去判断是否为一个角点,操作简单。
- 劣势:
- 不具有方向性、尺度不变性。
- 获得的候选点比较多,特征点的选取不是最优的,对旋转变化较大的物体可能会存在检测不准的情况。
- 优势:
- ORB(Oriented FAST and Rotated BRIEF)算法:
- 优势:
- 速度快,适用于实时应用,比SIFT和SURF等算法快得多。
- 旋转不变性,通过给每个特征点定义方向,实现了特征点的旋转不变性。
- 简单易用,实现较为简单,容易理解和实现。
- 劣势:
- 在检测过程中存在一定的噪声干扰,可能会导致检测结果误解。
- 对于旋转变化较大的物体可能会存在检测不准的情况。
- 优势:
参考:
https://www.c-s-a.org.cn/csa/article/pdf/7237?file_name=A8D77C701D04C881E52E8B1CB9B8FEE13FAE6909B074264A01E4C013791FB2E2C5E36A78A9049883&open_type=self