特征检测 wiki
http://en.wikipedia.org/wiki/Scale-invariant_feature_transform
慢慢看。
又开始学习sift,第一个问题是why gaussian?这个问题可以参看wikipedia中scale space条目
why DOG?
不同的图像缩放算法对结果又影响吗?
sift_vc代码的理解
1.图像是在32位浮点数[0,1]计算的,所以先要把图像转换到32f表示,同时做 1/255.0,归一到[0,1].
2.关于presigma一般都指定为0.5
3.sift-vc里octaves是通过一个公式求的octvs = log( MIN( init_img->width, init_img->height ) ) / log(2) - 2;
4.sift-vc中输入图像预处理有个
sig_diff = sqrt( sigma * sigma - SIFT_INIT_SIGMA * SIFT_INIT_SIGMA * 4 );
如果不放大是
sig_diff = sqrt( sigma * sigma - SIFT_INIT_SIGMA * SIFT_INIT_SIGMA );
sig_diff传递给cvsmooth函数cvSmooth( dbl, dbl, CV_GAUSSIAN, 0, 0, sig_diff, sig_diff );
cvsmooth可以指定高斯核的大小来计算高斯核的标准差,也可以指定标准差来计算高斯核的大小。计算公式可以参考openc的手册
和源代码。其中通过标准差来计算核大小用的比较多。有个3sigma规则。cvsmooth中3*3,5*5,7*7的核是预定义的。
这里不明白的是为什么用sig_diff?看了后面的构建高斯金字塔的内容。计算sig[i]也是用sig_diff的公式,
网上有个pdf 《关于SIFT和RANSAC算法的一个slides.pdf》提到了这些问题。
高斯卷积看http://zh.wikipedia.org/wiki/%E9%AB%98%E6%96%AF%E6%A8%A1%E7%B3%8A
先总结如下:下一级图像的sigma是上一级的k倍,高斯卷积符合公式