0

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

谢谢

4

3 回答 3

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-tree 就会有很大帮助,并且更容易实现。

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

于 2012-04-13T06:17:52.780 回答
0

我不熟悉 R-trees,但一般来说,树是动态数据结构。除非您开始使用它的 OO 工具,否则 Matlab 并不真正做动态数据结构。如果你不想这样做,你可以将你的树展平成一个单元阵列。例如,我将写一个(严格的)二叉树扁平化为一个单元格数组,这样我就不必画一棵树了。开始:

{1,{2},{3}}

它代表一棵二叉树,根为 1,分支左至 2,右至 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}

然后,您的问题变成编写函数来构建和遍历您选择的表示中的树。大多数树函数最好写成递归。任何好的文本,以及大量的互联网站点,都会告诉你所有你想知道的关于这些功能的信息。

于 2010-01-19T11:48:27.507 回答
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

于 2010-10-28T12:28:38.787 回答