SIFT 特征点提取算法的一些理解点

其实并没有什么原创的内容,只是我自己再看其他人的文章的时候,有很多地方,只看一个人的文章老是看不太明白,只能参考各个人的推导和理解,慢慢自己体会。

担心后面自己又给忘了,找起来麻烦,所以就中和下各家之言,说下自己的体会过程。

参考内容:

http://blog.csdn.net/zddblog/article/details/7521424

http://blog.csdn.net/hit2015spring/article/details/52972890

因为整个SIFT算法从头讲起来内容太多了,所以只讲解下我自己理解过程当中比较吃力的那部分,大头就可以直接参考前面两篇文章,总结的很好。

1.金字塔图像是怎么构成的

看文章的时候,关于金字塔的构成,一直有两种说法,一种就是标准的论文方法,尺度按

《SIFT 特征点提取算法的一些理解点》《SIFT 特征点提取算法的一些理解点》

公式进行提取,每一层图像图像都是上一层的降采样。

另外一种就是按opencv里源码的实现,每一层的第一张都是上一层倒数第三张的降采样。。其实这两种得到的效果是完全一样的。。。但是由于表达方式不一样,让我一直以为是两种不同构造金字塔图层的方法。举个简单的例子:

假设第一层第一张尺度是1,那么第二张是2^1/S,(没下载编辑器,见谅),第三张是2^2/S,第S+1张是2,第S+2是2^(1+1/S),S+3是2^(1+2/S)。

好了,按照第一种构造方法,第二层第一张图的尺度应该是,2^(1+0)=2,其实就是第一层的倒数第三张。。也就是第二种构造方法。所以其实这2种方法本质上一样的。

2。为什么说尺度是连续的。

这边主要是根据DOG空间看的,还是用1的例子。第一层金字塔图像得到DOG差分图像的尺度应该是,1,2^1/S, 2^2/S。。。第S+1张是2,第S+2是2^(1+1/S),

根据特征点的求法,DOG图像第一层和最后一层都是为计算而存在的,不会在里面求特征点,那么金字塔第一层特征点所在尺度就是2^1/S,,2^2/S,…2,

同理第二层特征点所在的尺度是,2^(1+1/S),把所有尺度排列起来,是不是一个等比数列?因此说尺度是连续的。

3.剔除极值点中对比度低的点和边缘响应高的点

边缘响应高的点比较好理解,因为DOG算子和LOG算子接近,肯定对普通的(特征点一般也是边缘点,但是是具有旋转不变性的边缘点,类似子集的关系,这里没有实际论证,只是我个人理解瞎猜)边缘点也比较敏感。所以要剔除边缘点。剔除的方法也比较好理解。

对比度低的点,怎么说呢,其实我个人觉得是因为这部分点灰度值太低,导致极值点十分不稳定,可以想象下一个很低函数,稍微一点噪声波动,这个极值点可能就没了,因此也要剔除。但是这个剔除方法,我再推导的时候。。一直推不到别人文章里的公式。。其实是高数中很多东西都忘了。。看别人文章,这部分也都是千篇一律一笔带过。。可能其他人都能推出来吧。。但我实在是整不出来,直到看到http://blog.csdn.net/hit2015spring/article/details/52972890,自己才总算弄明白了。

《SIFT 特征点提取算法的一些理解点》

 

点赞