时隔半个月,终于可以提笔写这篇从零开始学sift算法的博文了!
本文适合对理论有一定了解了的童鞋,帮你搞定java代码实现。如果不清楚理论,可以结合这篇博文来一起看 http://blog.csdn.net/zddblog/article/details/7521424
经过再三折腾,突然回头一看,发现SIFT并没有想象的那么难,也没有想象的那么强大(这里不指那些改进的sift)!我自己是完全用java语言写的,没有用opencv,或者metlab等工具,虽然过程比较纠结,但对sift的理解也算较为深刻的了!
其实sift的匹配效果受到初始sigma(也就是高斯模糊半径)以及后面的描述子的维度(可以自己增加或减少维度)影响较大,当然各种阈值也是影响匹配结果的!我在上一篇博文里得到的那么差的匹配结果就是因为描述子没有取好。
下面贴一下我的结果(没有剔除错误匹配的点,第一张仅仅是调了匹配的阈值),其实网上贴出来的图片大多都是给别人看的,其实也有蛮多错误匹配点的,只是很多都进行了错误点剔除),自认为也算不错了。在博文最后贴上了java的源代码:
前面的两篇的博文已写了一些参考理论博文或者文章,这里不多扯了!
这里主要总结一下我从小白到写完sift的全过程需要特别注意的地方,也给自己写代码的童鞋一些参考: