algorithm - SURF 工作原理总结

标签 algorithm opencv surf

我正在尝试弄清楚 SURF 特征检测的工作原理。我想我已经取得了一些进步。我想知道我与真实发生的事情的差距如何。

  • 您已存储的模板图像和真实世界的图像 根据“要点”或一些重要特征进行比较 在这两张图片中。

  • 相同点之间的最小欧氏距离构成 很好的匹配。

  • 什么构成重要特征或关键点?一个角落
    (边缘的交叉点)或 Blob (强度的急剧变化)。

  • SURF 使用 blob。

  • 它使用 Hessian 矩阵进行 Blob 检测或特征提取。
    Hessian矩阵是二阶导数的矩阵:这是为了
    找出与强度相关的最小值和最大值
    图像中的给定区域。

最佳答案

sift/surf等有3个阶段:

  1. 再次查找可能在同一对象的不同图像中找到的特征/关键点(冲浪使用框过滤器)。如果可能的话,这些特征应该是缩放和旋转不变的。角点、 Blob 等都很好,并且最常在多个尺度上进行搜索。

  2. 找到该点的正确“方向”,以便如果图像根据该方向旋转,则两个图像都会相对于该单个关键点对齐。

  3. “描述符”的计算,其中包含关键点邻域在正确比例下的外观(定向后)的信息。

现在您的欧氏距离计算仅在描述符上完成,而不是在关键点位置上完成!

重要的是要知道步骤 1 对于 SURF 来说并不是固定的。 SURF 实际上是步骤 2-3,但作者提出了如何完成步骤 1 以便与步骤 2-3 产生一些协同作用的建议。协同作用是,步骤 1 和步骤 3 都使用积分图像来加快速度,因此积分图像只需计算一次。

关于algorithm - SURF 工作原理总结,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29417888/

相关文章:

java - 配对不同集合中的元素 : how to avoid deep neSTLed for loops?

arrays - 给定数组部分已排序部分未排序,如何找到特定元素?

将图映射到另一个结构的算法

opencv - 从计算机断层扫描图像获取皮带速度

c++ - 为什么我们需要 crossCheckMatching 作为功能?

c++ - OpenCV - 从 yml 加载描述符 - 没有匹配的函数调用

algorithm - 最短根到叶路径

python - 如何将HSV色彩空间的V channel 的值设置为恒定值

c++ - opencv如何获得轮廓的中线

c++ - OpenCV 对象(邮票)识别/检测