KAZE与SIFT算法比较

KAZE与SIFT算法比较比较KAZE与SIFT的算法。根据测试结果,两种算法对于ubc、bikes、trees和boat四种图集都有很好的鲁棒性,能够准确将图像匹配起来。两种算法的差异主要是在bark、graf、leuven和wall图集中表现出来的。bark图集主要检验特征算法对旋转和缩放的鲁棒性。可见KAZE算法有效检测的特征点少于SIFT算法,而SIFT算

大家好,又见面了,我是你们的朋友全栈君。

比较 KAZE 与 SIFT 的算法。根据测试结果,两种算法对于ubc、bikes、trees和boat四种图集都有很好的鲁棒性,能够准确将图像匹配起来。两种算法的差异主要是在bark、graf、leuven和wall图集中表现出来的。


  1. bark图集主要检验特征算法对旋转和缩放的鲁棒性。可见KAZE算法有效检测的特征点少于SIFT算法,而SIFT算法则能成功匹配所有5对图像;我们可以发现,KAZE算法在尺度不变性上是逊于SIFT的,当缩放系数低于0.6以后,KAZE的正确匹配率就会明显下降,而SIFT则能保持60%以上的正确匹配率。通过对SIFT的源码分析可以知道,SIFT中每组Octave的层数nOctaveLayer默认为3层,而组数nOctaves则是根据图像的大小自动生成的:

       int nOctaves = actualNOctaves > 0 ? actualNOctaves : cvRound(std::log( (double)std::min( base.cols, base.rows ) ) / std::log(2.) – 2) – firstOctave;

        这使得 SIFT 能够根据图像尺寸选择合适的尺度范围,在不同尺度上都能检测到关键点,保证其尺度不变性。测试中KAZE算法的nOctaves=2, nLayers=4,包含的尺度范围较少。在源码里这两个参数的调整需要使用者输入。可以仿照SIFT那样自动计算nOctave,但由于KAZE构造非线性尺度空间耗时较长,太多的nOctave却会降低KAZE的效率。

  2. graf和wall图集侧重检验算法对视角变化的鲁棒性。可以看到KAZE算法有效检测的特征数和成功匹配的点对数均比SIFT高,不过两者都不能将graf图集的Img1与Img6匹配起来,而SIFT算法也不能匹配出wall图集的Img-1和Img-6.

  3. leuven图集侧重于光照变化方面的检验。KAZE算法和SIFT算法都表现稳定,对光照变化不敏感。

    在后期的进一步试验发现,KAZE特征的匹配对参数的设置比较敏感。我github上最新的样例 azeOpenCV.cpp 中使用 BFMatcher 或 FlannBasedMatcher 进行特征匹配,默认情况下会对匹配后的结果作初步过滤(filterMatches=true),筛选出小于2倍最小距离的配对特征,然后再寻找Homography。实验发现,这样的初步过滤在大部分情况下可以有效排除冗余配对的干扰,找出正确的Homography;但在极限情况下(例如视角变换大、明暗差异大、尺度差异大等),初步过滤又会减少配对数量,从而找不到有效的Homography。而SIFT则比较稳定,做不做过滤都能找到Homography。可能KAZE的描述向量还是有改进的空间,后期可以测试下用作者最新的G-SURF描述向量,或者用其它类型的描述符来搭配测试。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150298.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月18日 下午2:46
下一篇 2022年6月18日 下午2:46


相关推荐

  • IndexDB学习

    IndexDB学习cookiecookie 是保存在客户端本地的纯文本文件 其核心目的是为了解决服务器无法识别用户身份的问题 HTTP 协议是无状态的 cookie 工作原理客户端发送一个请求到服务器服务器发送一个 HttpResponse 响应到客户端 其中包含 Set Cookie 的头部客户端保存 cookie 之后向服务器发送请求时 HttpRequest 请求中会包含一个 Cookie 的头部服务器返回响应数据可以在浏览器调试栏中的 Headers 和 Cookies 中查看 cookie 的属性属性项

    2026年3月18日
    2
  • 汉字与 Unicode 转换

    汉字与 Unicode 转换

    2021年8月31日
    53
  • ebx 与 ebp的作用 —- 总线接口部件

    ebx 与 ebp的作用 —- 总线接口部件ebx 是基址寄存器 比如存放的数组的首地址 https wenda so com q 13369 很简单的啊 基址寄存器存放的是相当于某内存空间的首地址 而基址指针存放的是偏移量 类似其他编程语言中的索引 不同的是基址指针的单位是字节 而索引的单位是依赖于数据类型宽度 比如 C 中 int 类型的宽度为 4 字节 因此索引必须乘以 4 才能换算成字节单位 假设 BX 1000 BP 102 则计算后的地址为 BX BP 1102 而如果假设数组 intA XXXX 的首地址也是

    2026年3月17日
    2
  • ideaspringboot启动_idea中java代码无法运行

    ideaspringboot启动_idea中java代码无法运行idea解决Command line is too long. Shorten command line for ServiceStarter or also for Application报错1.在IDEA里找到”.idea===>workspace.xml”2.找到,在里面添加即可

    2022年8月19日
    6
  • Hibernate学习笔记:hibernate二级缓存攻略

    Hibernate学习笔记:hibernate二级缓存攻略
     hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了。
    二级缓存是SessionFactory级别的全局缓存,它底下可以使用不同的缓存类库,比如ehcache、oscache等,需要设置hibernate.cache.provider_class,我们这里用ehcache,在2.1中就是
    hibernate.cache.provider_class=

    2022年5月23日
    61
  • Maven – 解决Maven下载依赖包速度慢问题

    Maven – 解决Maven下载依赖包速度慢问题

    2021年6月29日
    69

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号