图像处理复习(三):特征点的搜索匹配和筛选

来源:互联网 发布:税收征管数据质量方案 编辑:程序博客网 时间:2024/06/06 17:17

特征点匹配及筛选

特征点匹配

图像的SIFT或者SURF特征均包含一个特征描述子(特征向量),这个描述子构成了一个特征点的描述空间,SIFT为128维,SURF为64维。两个特征点描述子的差异(距离)越小,这两个特征点越有可能来自同一物体的同一位置,也就是所谓的,是互相匹配的特征点。

一般来说采用欧氏距离d)来描述SIFT或SURF的描述子之间的相似程度。对于目标图像和待识别图像的特征向量集R=R1,R2,...,Ri,...,RmS=S1,S2,...,Sj,...,Sn,若有对于Sj,向量集R中最近的向量Rp,次近的向量Rq

d(Sj,Rp)d(Sj,Rq)<Threshold

那么SjRp匹配。

这里就涉及到搜索算法的选择。如果直接采用暴力匹配搜索,在特征点数目比较小的时候匹配效率尚可,但当特征点数目较大时,其O(N2)的算法复杂度就有些吃不消了。

基于KD-Tree的特征点匹配

KD-Tree查找是二叉树查找方法从一维到k维的推广。
但是,KD-Tree只在叶节点记录数据,父节点只记录空间划分的依据。

匹配算法,以SURF为例:

  1. 在64维的特征向量数据集R中寻找特征向量方差最大的维数k,并在该维数上选择中值m。创建一个节点,在该节点上储存(k,m)。搜索数据集,对于在k维上大于m的数据,划分为右侧特征向量数据集,否则划分为左侧特征向量数据集。

  2. 用两侧的两个子集代替R重复1的操作,直到某个子集无法再划分。将该无法再划分的子集保存到该子集所在的节点,作为叶节点。由此完成建立KD-Tree。

  3. 获取待匹配特征向量Si,从根节点开始,将S(k)m进行比较,根据比较结果进入对应的分支。将未进入的分支在树结构中的位置以及特征向量距离分割超面的距离|S(k)m|记录在一个优先级队列中,距离越小越靠前。

  4. 对分入一个分支的特征向量重复3的操作,直到访问到叶节点。在叶节点中包含的特征向量集Rl中用枚举法寻找到最相近的Rp和次近的Rq

  5. 进行回溯:对优先级列表项中的树节点按顺序和3中的步骤一致,访问到叶节点。在叶节点中若存在距离更加小的最近Rp和次近的Rq则替换,否则就取出优先级队列中下一个树节点,重复操作,直到队列为空或者回溯次数到达上限

  6. 对于最终获得的两个特征向量RpRqd(Si,Rp)d(Si,Rq),若小于阈值则SjRp匹配,否则在匹配结果中去除该特征点Si


特征点提纯:

经过搜索匹配的特征点只是一个基于欧氏距离的粗匹配的结果。
利用马氏距离来进行提纯
马氏距离:

di=(ziu)C1(ziu)

其中z为一张图片的特征向量集,u为其均值,C为其协方差矩阵。

设粗匹配的特征点集对为P=P1,P2,...,Pi,...,PmQ=Q1,Q2,...,Qi,...,Qm,相同下标的点对互相匹配。

计算PQ各自的马氏距离集合Pd=Pd1,Pd2,...,Pdi,...,PdmQd=Qd1,Qd2,...,Qdi,...,Qdm

进行筛选:

  1. 计算di=pdiqdi

  2. di中的最大值dimax

  3. 删除满足di>kdimax的特征点对,其中k为阈值,根据相关文献取0.003比较合适

除了利用马氏距离进行筛选之外,还有许多筛选方法,比如利用仿射矩阵变换匹配来筛选等。筛选的方法可以自行根据需求设计,合适的筛选方法可以一定程度上减少匹配过程中收到的噪声干扰。

原创粉丝点击