matlab中的R-tree实现

时间:2010-01-18 13:31:33

标签: matlab indexing multidimensional-array r-tree

请问,任何人都告诉我如何在matlab中实现R树结构来加速图像检索系统,我想通知你,我的数据库空间是一个颜色直方图(多维)的特征向量,而且还有II相似性度量的距离向量...

感谢

3 个答案:

答案 0 :(得分:1)

我不使用Matlab。所以我不知道Matlab与索引结构相关的成本是多少。它似乎并不是为这类事物而设计的。

R-Trees似乎有很大的不同。从http://elki.dbs.ifi.lmu.de/wiki/Benchmarking来看,一些算法可以从拥有良好的索引结构中获益匪浅。在110250图像颜色直方图数据集上,该网页上的数字快5到7倍。

根据我的经验,R-Trees确实很难做到正确。但只有你想要全力以赴。如果您有静态数据库,则可以轻松使用批量加载的 R-Tree。批量加载和查询都不是很难做到。一旦你想用复杂的拆分策略进行R * -Tree优化,重新插入,平衡,并且通过智能缓存有效地和在磁盘上完成所有这些操作,R-Trees就会变得混乱。但只要您在内存中运行并且不动态添加对象,STR批量加载的R树将会有很多帮助并且更容易实现。

在构建已经有效的R-Tree的东西上,你可能还会更好。用上面提到的rtree模块或ELKI说SQLite。

答案 1 :(得分:0)

我不熟悉R树,但一般来说树是动态数据结构。除非您开始使用其OO工具,否则Matlab并不真正执行动态数据结构。如果您不想这样做,可以将树展平为单元格阵列。例如,我将一个(严格的)二进制树写成一个单元格数组,这将节省我必须绘制树。这是:

{1,{2},{3}}

表示一个二进制树,其根1和分支从左到右,从右到3.我可以做得更深:

{1,{2,{5,6}},{3,{7,8}}}

为前一棵树添加了另一个级别。如果要在任何节点上添加数据,那么(第一个)树可能如下所示:

{1,[a b c],{2,[e f]},{3,[h i j k l]}}

另一种方法是单独定义节点,例如

node1 = [a b c]; node2 = [e f]; node3 = [h i j k l],

然后你的树变成了

{node1, node2, node3}

然后你的问题就变成了编写函数来构建和遍历所选表示中的树。大多数树函数最好写为递归。任何好的文本和许多互联网网站都会告诉你关于这些功能的所有信息。

答案 2 :(得分:0)

实现R-tree并不是一项简单的任务。您可以对LidarK库使用matlab绑定,它应该足够快。代码在这里: http://graphics.cs.msu.ru/en/science/research/3dpoint/lidark

如果你决定使用kd-tree(这是典型的图像检索),那么也有一个很好的实现。 http://www.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN