速度要求:在一些场合下,由于对检测时间要求较高,需要在较短的时间内完成整个检测过程,所以整个系统从图像输入到检出结果的工作时间就会受到限制,这也就会造成对检测系统速度有所要求。因此,在能保证检测出的角点能准确、稳定并且可靠的前提下,检测时间也应当越短越好。
1。4 本文内容结构
通过以上对问题的分析,这里对本文的内容结构作一个简要概述。本文总共分为四个章节。
第一章:对检点检测课题的研究背景及其意义做一个简要说明,介绍了检测方法的几种主要类型以及对应的优缺点,最后简要说明了判断检出角点质量的判定依据。
第二章:对Harris角点检测理论进行阐述,并对理论中提到的将会影响到检测结果的因素进行了分析。
第三章:阐述了本文对于将Harris算法在FPGA上的设计思路,对总体结构和各模块设计均作了较为详尽的说明。
第四章:展示仿真和检测结果,并对结果中的问题加以分析,并给出针对各个问题的解决方案。
2 原理
2。1 Hariss角点检测理论
1988年,C.Harris和J。Stephens在Moravec的基础上提出了一种基于信号的点特征提取算子,即Harris算子。Harris算子检测角点的原理是建立与图像的X和Y方向一阶导数自相关函数相联系的对称矩阵M,由于M阵的特征值代表自相关函数的一阶曲率,若两个曲率值都很高,则说明自相关函数呈尖顶形,所以通过求取M的两个特征值IX和IY,通过这两个特征值求出角点响应值R,并将R与阈值进行比较判断这个点是不是图像的角点[12]。在用R判断角点时,一种常见的处理方法是在大小的邻域内进行非极大值抑制,局部响应极大值点即为角点[19],即将中央值与相邻的8个点比较,若中央值大于所有相邻的点,则该点就是角点。这种8邻域比较筛选的方法尽管能较为精确地提取出角点位置,但是会筛选出大量不必要的角点[20]。另一种方法是人为设定一个阈值,将响应值R与阈值比较,若R大于阈值则可认为这个点是角点,此外亦可对所有R值进行排序,人为设定一个角点提取数量x,将R从大到小取前x个点作为角点也是一种思路。但是这个方法受阈值影响严重,阈值过大将会使部分应被检出的角点被忽略,而阈值过小则会将会把不是角点的点被检出[21]。
Harris算法不仅能有效提取出图像的角点,还有以下几点优势:①计算量小,与Moravec提出的利用灰度方差提取特征点的算法[22]相比,Harris算法这点有着一些优势。②点特征提取直观。Harris角点检测算法计算图像中每个点的R值,并且选取邻域中的最优点,这有助于有效地提取出图像中的纹理信息③鲁棒性好。因为只计算图像中每个点的一阶导数,因此对图像旋转,灰度变化和视角转换具备一定稳健性[23]。但是,Harris算法也存在缺点,对每个点求兴趣值导致了过大的计算量,由于计算依据是梯度信息,因此在检测过程中对噪声变得十分敏感[24]。
由于在使用Harris算子检测角点时需计算X和Y方向一阶导数,而在Harris算子的推导过程中,这个一阶导数是由图像中需要被检测的像素与模板卷积后的结果近似而来,即:[12]
因此,可以将两个模板结合,通过设计一个3×3模板,对图像中的像素同时进行X和Y方向的求导。这样一来,对X和Y方向的求导就可以简化为用一个3×3模板进行卷积,从而简化了计算结构。为了优化求导结果,可以将求导模板设计为5×5大小,此外,因为该算法尽管计算量大,但相对来说计算结构简单,而且有并行计算结构,适合利用FPGA来实现[25,25]。