一,关键点定位
直观上来说,关键点的定位是SIFT算法的核心部分,正是因为这一步的存在,才有了后面的操作。注意,这里只讲算法的大致流程。
DoG(Difference of Gaussian,高斯差分图)的构造
对同一张图片,选取不同的高斯核(也就是标准差不同),就产生了一个图像簇,使用这些图像簇互相做减法,就得到了DoG。再对原图进行下采样,重复上面的操作,就得到了多尺度DoG。多尺度的目的是为了模拟人眼远近看到的图片大小不同。通过这种方法达到了尺度不变性
就如上图一样,图片来自这里。具体的细节,也可以参考这篇文章,写得真的很好。
选取极值点(关键点)
选取极值点是在DoG图片中选取的,具体的做法就是和周围的像素相比较,选择一个最大的数来代替现在位置的数。
就比如上面的那张图片一样,中间的像素要和周围的333-1 = 26个像素相比较。
二,关键点方向确定
关键点确定之后,以关键点坐标(在原图上的坐标)为圆心,做一个圆,把圆内所有的梯度方向叠加到8个方向上面,然后选取最大值,作为关键点主方向。通过这种方法,达到了方向不变性。
确定了主方向,后面的操作就会围绕这个主方向来进行。
三,描述子的生成
将坐标轴和主方向的方向对齐。如下图:
然后就是选择一个大小合适的方框,把方框分为4×4个小格,每个小格都有8个主方向,同理,也是计算每个小格的梯度方向,然后加到8个方向里面(如果方向不同,就取方向最相近的一个方向。)然后最后得到的就是4×4×8大小的向量,这个向量就是SIFT描述子。
这里是参考网址。
(后面有时间了再写如何匹配)