其实并没有什么原创的内容,只是我自己再看其他人的文章的时候,有很多地方,只看一个人的文章老是看不太明白,只能参考各个人的推导和理解,慢慢自己体会。
担心后面自己又给忘了,找起来麻烦,所以就中和下各家之言,说下自己的体会过程。
参考内容:
http://blog.csdn.net/zddblog/article/details/7521424
http://blog.csdn.net/hit2015spring/article/details/52972890
因为整个SIFT算法从头讲起来内容太多了,所以只讲解下我自己理解过程当中比较吃力的那部分,大头就可以直接参考前面两篇文章,总结的很好。
1.金字塔图像是怎么构成的
看文章的时候,关于金字塔的构成,一直有两种说法,一种就是标准的论文方法,尺度按
公式进行提取,每一层图像图像都是上一层的降采样。
另外一种就是按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,自己才总算弄明白了。