目录
2.1 得到特征点 xfeatures2d.SIFT_create(),detect(),drawKeypoints()
1 理论部分
感兴趣的朋友可以看一下视频的讲解,不感兴趣的可以直接进入代码实现部分
我们SIFT的目的就是让计算机在物体站图像不同大小时也能识别图像
1.1 高斯模糊
我们SIFT的第一步是高斯模糊
1.2 多分辨率金字塔
这个用的还是同样大小的图,只不过清晰程度不同,我们上一步使用的高斯模糊的结果,在这里作为Octave1,然后使用金字塔变成Octave2
1.3 高斯差分金字塔
这一步的作用是找到同样大小但清晰度不同的图中间的特征,5个高斯模糊的结果可以进行高斯差分金字塔后可以得出4个DOG结果
1.4 DOG空间极值检测
这一步我们用DOG的结果寻找极值点
我们现在探究中间画叉的这个点是不是极值点,除了比周围的8个,还得比上层的9个与下层的9个,第一层与最后一层我们认为在这两层中没有极值点
1.5 关键点的精确定位
从上一步我们获取了很多离散的极值点,我们使用上面的这个进行拟合,然后让上面这个式子的f(x)求导等于0,从而求出x,求出x之后我们再把x带入上面的式子,这样我们的出来了f(x),这个f(x)是我们的精确极值点
- 由于我们每个点都是离散点,我们 每个点对应的导数 约等于 该离散点最近的左右两点 连成一条直线 然后求导
上面我们说的是x这个维度的计算方式,我们的D是一个三维的点,下面这个是三维的计算方式
- 第二行是简化之后上面式子的结果
1.6 消除边界相应
1.7 特征点的主方向
1.8 生成特征描述
2 代码实现
2.1 得到特征点 xfeatures2d.SIFT_create(),detect(),drawKeypoints()
2.2 计算特征 compute()
kp是我们上面那个图显示的关键点,des是我们每一个关键点对应的128维向量,也就是下面这个图的结果是des