如何用三角形来当最小单元筛一筛

咱们从图像匹配那事儿说起,大家都有个痛点,要么好不容易抓到几个点,要么是一堆假的匹配凑在一起。作者觉得这是因为现在的特征描述子扛不住透视畸变,哪怕仿射变换只需要三个点就能定义,那不如直接用三角形来当最小单元去筛一筛。 算法大概分三步。第一步先用SIFT捞一批兴趣点,然后来个双向确认,只有两边都能互相对得上的才算数。这么干能把那些单方向瞎猫碰上死耗子的巧合给挡在外面。第二步是用Delaunay三角剖分,把候选点变成既不重叠又角度均匀的网格。这样细长的或者接近共线的三角形就被淘汰了,给后续的几何约束打好基础。 第三步是根据三角形里的点来打分。随便抓一个三角形的顶点,比如2、4、6这三个点,把对应点找出来。只要这三顶点满足仿射一致性,就能大概知道位置在哪。在这个位置周围画个圈,圈里的特征点都拿来当候选人。分数是空间距离和向量内积加起来算的。得分最高的那个点先当临时匹配点。 要是一个三角形里的临时匹配点数量达标了,大家就升格成正式的匹配点;要是不够数,这块网格就被投票踢出去。要是哪个顶点连着的三角形都没了,这顶点也就被当成误匹配删掉了。算法会重新剖分填补空洞,让网格保持完整。 这套方法最大的创新就是用三角形的稳定性来锁死误匹配,空间距离加向量相似度双保险抗旋转和尺度。还有一个自淘汰机制能把错误点在统计层面现形。实测效果挺不错的,能把数量和质量都拉高了。 最后展望一下,要是能把三角剖分的效率再提一提,或者给相似性度量加点深度学习的东西,这套算法在无人机或者AR重建这些地方肯定能大显身手。