摘要: 上一篇较详细地介绍了k-d树算法。本文来讲解具体的实现代码。 首先是一些数据结构的定义。我们先来定义单个数据,代码如下://单个数据向量结构定义struct _Examplar{public: _Examplar():dom_dims(0){} //数据维度初始化为0 //带有完整的两个参数的constructor,这里const是为了保护原数据不被修改 _Examplar(const std::vector<double> elt, int dims) { ... 阅读全文
posted @ 2012-04-09 16:21 视频理解 阅读(718) 评论(2) 推荐(2)
摘要: BBF(Best Bin First)是一种改进的k-d树最近邻查询算法。从前两篇标准的k-d树查询过程可以看出其搜索过程中的“回溯”是由“查询路径”来决定的,并没有考虑查询路径上数据点本身的一些性质。BBF的查询思路就是将“查询路径”上的节点进行排序,如按各自分割超平面(称为Bin)与查询点的距离排序。回溯检查总是从优先级最高的(Best Bin)的树节点开始。另外BBF还设置了一个运行超时限制,当优先级队列中的所有节点都经过检查或者超出时间限制时,算法返回当前找到的最好结果作为近似的最近邻。采用了best-bin-first search方法就可以将k-d树扩展到高维数据集上。 下面我们. 阅读全文
posted @ 2012-04-09 16:19 视频理解 阅读(1258) 评论(0) 推荐(1)
摘要: k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。应用背景 SIFT算法中做特征点匹配的时候就会利用到k-d树。而特征点匹配实际上就是一个通过距离函数在高维矢量之间进行相似性检索的问题。针对如何快速而准确地找到查询点的近邻,现在提出了很多高维空间索引结构和近似查询的算法,k-d树就是其中一种。 索引结构中相似性查询有两种基本的方式:一种是范围查询(range searches),另一种是K近邻查询(K-neighbor searches)。范围查询就是给定查询点和查询距离的阈值,从数据集中找出所有.. 阅读全文
posted @ 2012-04-09 16:16 视频理解 阅读(1172) 评论(0) 推荐(1)