SIFT特征点匹配与消除错配:BBF,RANSAC

本文详细介绍了SIFT特征匹配中的BBF算法和RANSAC算法。首先,解释了KD-tree的构造过程,并展示了BBF算法如何在KD-tree上寻找KNN。接着,通过BBF算法找到K个最近邻后,使用RANSAC算法去除错配,以确保特征匹配的准确性。最后,讨论了RANSAC算法的基本思想和在SIFT特征匹配中的应用。
摘要由CSDN通过智能技术生成

Step1: BBF算法,在KD-tree上找KNN。第一步做匹配咯~

1.       什么是KD-tree(from wiki)

K-Dimension tree,实际上是一棵平衡二叉树。

一般的KD-tree构造过程:

function kdtree (list of points pointList, int depth)

{

    if pointList is empty

        return nil;

    else {

        // Select axis based on depth so that axis cycles through all valid values

        var int axis := depth mod k;

        // Sort point list and choose median as pivot element

        select median by axis from pointList;

        // Create node and construct subtrees

        var tree_node node;

        node.location := median;

        node.leftChild := kdtree(points in pointList before median, depth+1);

        node.rightChild := kdtree(points in pointList after median, depth+1);

        return node;

    }

}

【例】pointList = [(2,3), (5,4), (9,6), (4,7), (8,1), (7,2)] tree = kdtree(pointList)


2.       BBF算法,在KD-tree上找KNN ( K-nearest neighbor)

BBF(Best Bin First)算法,借助优先队列(这里用最小堆)实现。从根开始,在KD-tree上找路子的时候,错过的点先塞到优先队列里,自己先一个劲儿扫到leaf;然后再从队列里取出目前key值最小的(这里是是ki维上的距离最小者),重复上述过程,一个劲儿扫到leaf;直到队列找空了,或者已经重复了200遍了停止。

Step1: 将img2的features建KD-tree; kd_root = kdtree_build( feat2, n2 );。在这里,ki是选取均方差最大的那个维度,kv是各特征点在那个维度上的median值,features是你率领的整个儿子孙子特征大军,n是你儿子孙子个数。

/** a node in a k-d tree */

struct kd_node{

     int ki;                      /**< partition key index */

     double kv;                   /**< partition key value */

     int leaf;                    /**< 1 if node is a leaf, 0 otherwise */

     struct feature* features;    /**< features at this node */

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值