生手从零开始,相似图像匹配SIFT算法(二)

新手从零开始,相似图像匹配SIFT算法(二)

经过两天的挣扎,终于“写出了”属于自己的java版的SIFT算法,于是兴高采烈的P了一张图来测试:

生手从零开始,相似图像匹配SIFT算法(二)

结果吓了我一跳:这就是传说中的sift算法么? 这都匹配出啥了!首先:相似的地方找出的特征点很多不对应,另外匹配正确率是在堪忧!

问题出在哪儿呢?经过再三检查,发现有四个地方和lowe做的不一样:

1、lowe先对原图进行插值放大处理,我没有。但是这只影响特征点的数目。

2、lowe的每一层金字塔的第一张图像是上一层的倒数第三张直接降采样得到的;而我是对倒数第四层进行降采样,再将结果进行高斯模糊处理得到的。但这并没有影响尺度空间的连续性。

3、我没有对DoG金字塔求出的极值点进行精确定位,而是直接进行低对比度,hessian角点等过滤(恩,这个可能影响了特征点的定位)= =

4、在对特征点分配主方向的时候,我没有按lowe在其周围统计那么大范围的梯度方向,并且没有像他说的,“实际编程实现中,就是把该关键点复制成多份关键点,并将方向值分别赋给这些复制后的关键点,并且,离散的梯度方向直方图要进行插值拟合处理,来求得更精确的方向角度值”.我是直接取了一定(恒定的值)范围内的梯度方向统计值最大的那个方向作为主方向,没有辅方向= =( 这个也可能导致我的那可怕的匹配结果= =)

好吧!接下来,就好好研究下是不是3、4点影响了我的匹配结果。不过话说那三元二次插值拟合不好理解,额,加油吧,骚年!