角点检测
角点(Corner Point)是图像处理中一个非常重要的特征,它能决定图像中观测目标的形状,位置,角度等等。
目前角点的检查算法主要主要可以分为两种:基于边缘的角点提取算法和基于灰度的角点提取算法。
基于边缘的角点提取算法首先对图像进行分割和边缘提取,而角点是两条以上边缘的交点,这种算法对图像分割和边缘提取的要求很高,而且算法和处理步骤比较复杂,当图像中边缘发生中断时,就不能很好的提取角点。
基于灰度的角点提取算法通过计算梯度和曲率来寻找角点。该方法认为角点是图像在局部范围内灰度和梯度变化剧烈的极大点,这类算法主要是通过计算曲率和梯度来检测角点,因为基本上不用事先对图像进行边缘提取和分割,这类算法在实际应用中比较广泛。
基于边缘的角点检测算法
基于边缘的提取算法首先对图像进行分割,这类算法的基本理论认为角点首先是一个边缘上的点,是一种特殊的边界点,因此,按照这种基本理论,角点的检测是基于边缘的提取。常用到的方法有以下几种:
- 用链码表示提取出的边界,计算边界的曲率,认为曲率的局部最大点对应的是角点;
- 根据角点的一种定义,角点是边界的角点,对边缘提取中提取的边界进行检测,当边界相交时他们的交点就是图像中的角点;
- 用形态学原理对提取的边界进行腐蚀和膨胀运算,搜索图像中的凹点和凸点,从而找出角点;
- 利用边缘检测算子,对检验出来的边界进行拟合处理,拟合出的任意两条直线的交点作为我们要检测的角点
基于边缘的检测算法的基础就是要检测出图像的边缘,后续的工作都是在边缘检测的基础上来完成的。因此,边缘检测的质量是这类算法检测角点的基础,
1.基于freeman链码的角点检测方法
一条数字化二值轮廓曲线可以用方向Freeman链码表示,这种检测方法先分割图像,然后提取图像边界的Freeman链码,将方向改变速率大的点标记为角点。Freeman链码是指相邻两像素连线的八种可能方向值。
ai表示第i个像素指向第i+1个像素方向的链码,每个链码指定八个方向中的一个,得到一个集合ai, 并且
,按照逆时针的方向搜索链码,定义差别码为:
可以看出,该方法计算比较简单,易于实现"但是,这种方法对于图像分割的好坏有很强的依赖性。并且由于需要计算夹角,对于噪声的抵抗能不强,在进行检测前必须对图像进行去噪声的处理。
2. 基于B样条的角点检测方法
这种方法利用图像分割技术首先求出链码来表示边界,然后用B样条来表述图像中的边界,并在此基础上进行角点的提取。具体步骤如下:
平面上的曲线X,Y的参数方程
如果一个候选点能够同时满足
,那么就认为它是一个角点,其中|| . ||表示范数。
基于灰度的角点提取算法
1 Moravec算子
这种方法计算像素沿着不同方向的平均灰度变化,选取最小的灰度方差作为兴趣值,
其中,(c,r) 为中心像素的坐标,w为影响窗口的半径, k = w/2取整,f c,r为像素灰度值,G中最小值为兴趣值,选择一个经验阈值,将兴趣值大于该值得点作为候选点。
算法步骤:
- 读取图像
- 图像预处理,对图像进行滤波去噪
- 选择一个经验阈值
- 计算四个方向最小灰度方差,取其中最小的为兴趣值
- 比较最小的兴趣值与阈值的大小,将兴趣值大的点作为候选点
- 提取角点
由于Morave"算子仅利用了四个方向的相关性,因此,算子的响应是各向异性的"同时,该算子对强边界敏感,实现的速度较快。
2 Harris算子
Harris算子利用泰勒级数展开式将移动方向进行扩展,同时引入平滑因子,增强抗干扰能力。
算法流程图
Harrls算法稳定性高,对噪声不敏感"提取的特征点均匀并且合理,即使存在图像的旋转和灰度的变化!噪音等影响,也比较稳定。
本文是读一篇硕士论文整理下来的笔记。用的时候方便找。
源论文: 《图像角点检测算法研究》郭晓冬 2007.6
论文链接:
http://www.cnki.net/KCMS/detail/detail.aspx?dbcode=CMFD&QueryID=5&CurRec=11&dbname=CMFD0911&filename=2008098573.nh&urlid=&yx=&uid=WEEvREcwSlJHSldRa1Fhak1iSFd1cHZjL0I4TFNDVmkxOVV2QUZVdnlGYWRVTER0SmZmcHJCUWRXU3c2bWhSVFZ3PT0=$9A4hF_YAuvQ5obgVAqNKPCYcEjKensW4IQMovwHtwkF4VYPoHbKxJw!!&v=MTM5NjY2ZVp1ZG9GeS9oVzdyTVYxMjdGck94RnRUTHJKRWJQSVI4ZVgxTHV4WVM3RGgxVDNxVHJXTTFGckNVUkw=