粗糙的一对一特征点匹配算法,挖坑Outer Lier Reception和MSAC

这是一篇填坑文。

之前写了一篇关于特征点检测的文章,其中只提及了特征点检测的部分,下面是关于特征点匹配的算法介绍。

这不是一个非常精确的匹配算法,只能筛选出大致正确的匹配特征点。如果以后有时间,我会继续介绍进一步的精确匹配算法(Outer Lier RejectionM-estimator Sample Consensus(MSAC) 的组合应用)。听起来好像又给自己挖了个坑。。。。。

好了,扯远了,下面开始介绍这个粗糙的匹配算法吧。

一对一特征点匹配算法

我们已经检测出了图像1( I 1 I_1 I1)和图像2( I 2 I_2 I2)的特征点(corner)。

corner

接下来要对这些特征点进行匹配。

这个算法中有几个重要的参数(最后的字母为在公式中的变量名):

  1. 匹配窗口大小(matching window size)- w
  2. 相关性系数阈值(correlation coefficient threshold)- t
  3. 距离比率阈值(distance ratio threshold)- d
  4. 特征点距离阈值 - p

中间涉及到的一些定义会在用到的时候提及。

在最开始,我们需要计算一个相关性系数矩阵

相关性系数矩阵(Correlation Matrix):用来描述两幅图中所有特征点相关性的矩阵(仅在不同图之间比较,即同一幅图中的特征点相关性不需计算)。假设第一幅图中有m个特征点,第二幅图中有n个特征点,那么这个相关性系数矩阵的大小就是 m × n m \times n m×n.

相关系数(Correlation):用来描述两个特征点之间的相关性,区间范围在[-1,1];数值越大,相关性越好。(具体计算方式会在后面提到)

算法主体:

  1. 寻找到相关性系数矩阵中最大值的位置 ( i , j ) (i,j) ij(第i行,第j列)。
  2. 存下这个最大值( b e s t best best)。
  3. 相关性系数矩阵中的 ( i , j ) (i,j) ij值设为-1。
  4. 寻找到当前相关性系数矩阵第i行中的最大值( m a x i max_i maxi)和第j列的最大值( m a x j max_j maxj)。
  5. 如果满足 1 − b e s t &lt; ( 1 − m a x i ) × d 1-best&lt;(1-max_i)\times d 1best<(1maxi)×d 1 − b e s t &lt; ( 1 − m a x j ) × d 1-best&lt;(1-max_j)\times d 1best<(1maxj)×d 和 这两个特征点之间的距离小于p这三个条件, 那么这个特征点组合将被记录下来,并将相关性系数矩阵中第i行与第j列的所有元素都设为-1;反之,这个特征点组合不符合条件(不够独特)。值得注意的是,在特征点组合不符合条件的情况下,如果违背的是条件1,那么第i行的所有元素都设为-1;如果违背的是条件2,那么第j列的所有元素都设为-1。
  6. 重复整个过程,直到相关性系数矩阵中的最大值都不超过相关性系数阈值(t)

整个算法描述完了,我们好像遗漏了一个很关键的步骤——如何计算相关性系数

相关性系数

相关性系数的计算方式有很多种,下面这张表展示了其中的一部分。这个相关性系数算法和之前的特征点检测算法一样,都需要一个窗口大小(window size),毕竟匹配的不可能是一个像素点,而是一小块区域,具体参数大小可以根据实际情况来调整。
match matrix

我用的是NCC算法。最后的结果长这样:
corner matching
emmmm结果依旧不是特别好,但是勉强可以用。我先把Outer Lier RejectionM-estimator Sample Consensus(MSAC) 的算法结果po上来吧。那个就看起来很舒服,有空再来填坑。corner matching

欢迎讨论、指正文中可能存在的错误。

转载请注明出处。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值