SIFT关键点描述符

大憨熊 提交于 2020-02-16 14:38:02

尺度不变特征变换(关键点描述符)第四部分详解
构建描述符步骤:①将坐标轴移动到关键点主方向的位置,实现随着尺度的变化特征点不变的性能。
②将关键点周围邻域分为44,16个子邻域,子邻域包含多个像素点。
③进行三线插值,记录每个子邻域内像素点在8个方向的梯度直方图,表示8个数值,总计128个数值,从小到大依次排列,构成128维向量,向量归一化处理,消除光照等影响
④运用KNN算法将两幅图像的相同关键点匹配操作。
算法
三线性插值:关键点邻域大小R=m
sigma*((d+1)/2)*sqrt(2),m=3,sigma为关键点所在高斯金字塔的尺寸,d=4,表示邻域边分为小区域的个数。
在这里插入图片描述

x’y’表示旋转之后的点坐标,角度为主方向角度。
在这里插入图片描述


新的局部坐标系下的点的坐标。
在这里插入图片描述

a b为点的全局坐标,m表示梯度值,对圆形区域内的点进行高斯加权。
在这里插入图片描述

红点周围小四方蓝色区域的四个顶点分别在周围四个绿色区域的中心。
若x’’ y’‘距离第0行和第2列的距离为dr、dc,那么x’’ y’'相距绿色中点的距离从上到小左到右距离为(dr,dc),(dr,1-dc)(1-dr,dc)(1-dr,1-dc)。
根据权重与距离成反比原则,则四个位置的权重分别为 W*(1-dr)(1-dc)、W(1-dr)(dc)、W(dr)(1-dc)、W(1-dr)*(1-dc)
将该点的值按照权重分为不同方向,减少一个梯度幅值从一个格子漂移到另一个格子引起的描述子突变。

KNN算法:
在这里插入图片描述

线性扫描:距离逐一比较,耗时长。
KD树算法:输入k维空间数据集,k表示数据的维度。
T={X1、X2、X3…} X1=(x,y,z…)
给定一个二维数据集{(2,3)’(5,4)’(9,6)’(4,7)’(8,1)’(7,2)}
构造根结点:输入实例在x轴上的数据的中值,2、5、9、4、8、1的中值为7,x=7作为切分点,垂直x轴做超平面将区域分为左右两个子矩形,根据不同轴上的方差,选择下一个提取维度,重复操作,直到子区域没有实例存在,得到KD树。
最近邻搜索:
①从根节点出发依次访问KD树,若目标点X当前维的值小于切分点当前维的值,则移动到左叶子结点,否则移动到右叶子结点,直至最后。则当前的叶结点为。
②向上返回,如果该结点保存的实例点比‘当前最近点’距离目标点近,则以此结点为‘当前最近点’。‘当前最近点’存在于该结点一个子结点对应的区域,
检查该子结点的父结点的另一子结点对应区域是否有更近的点,即检查另一子结点对应的区域是否以目标为圆心,以目标点与‘当前最近点’距离为半径的超球体相交,如果相交,另一子结点可能存在与目标点距离更近的点,移动到另一子节点,递归,最近邻搜索,如果不相交,向上回退,当回退到根结点,最后的‘当前最近点’为与目标点距离最近的点。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!