极值点检测模块,主要由 5 个部分组成:像素 窗生成模块、极值点检测、低对比度点剔除、强边缘点剔除和特征点位置信息存储, 像素窗生成模块缓存两行图像生成 3x3 的图像块,极值点检测模块将当前 DoG 像素与相邻的 26 个 DoG 像素比较, 判断当前 DoG 像素是否为局部极值点 (极大值或者极小值)。低对比度点剔除模块将当前 DoG 像素值与固定阈值(本架构 中该值为 3, DoG 灰度值域为[-31.0, 32.0])比较, 判断当前像素点是否为低对比度点。 为了达到全并行处理的目标,本架构使用原始 DoG 灰度值与阈值比较, 并非原文提 出的修正后的灰度值。强边缘点剔除模块利用当前 DoG 像素及其周围 DoG 像素构建Hessian 矩阵,并将 Hessian 矩阵最大特征值与最小特征值的比值与固定阈值(本章 中该值为 10)进行比较。最后, 综合极值点检测模块、低对比度剔除模块与强边缘 点剔除模块的估计结果,判断当前 DoG 像素是否为稳定的局部极值点,并将其最为SIFT 特征点。 特征点位置信息存储模块接收稳定极值点的评估结果,并将 SIFT 特征 点的相关位置信息存入特征点 FIFO( KP_FIFO)。
极值点检测模块框图如下:
其中像素 窗生成模块实现思路如下:
极值点主要是在 DOG 金字塔相邻三层图像中进行的。在比较过程中要求中间层的每一个点和周围相邻的 26个点做比较,其中这 26 个点包括上下层对应的各 9 个点,该层周围的 8 个点。为了使相邻的 26 个点能够与中间点能够以并行流水的方式,出现在同一个时钟周期内,对于每一组中的每一层图像都用了两个行FIFO,前一个 FIFO 的输入作为下一个 FIFO 的输出。每个 FIFO 的深度为 320,宽度为 8 bit,以实现对该层像素点的行延迟作用。这样在两个行 FIFO 的输出与该层图像输入行之间就构成了相邻三行的图像并行结构设计。而对于每一行数据,为了能够提取每一行中的两个三个像素点的DOG值,这里使用了三组触发器做延时。框图如下: