请任何人告诉我如何在matlab中实现R树结构来加速图像检索系统,我想告诉你我的数据库空间有一个颜色直方图(多维)的特征向量,还有一个距离向量对于相似度测量...
谢谢
请任何人告诉我如何在matlab中实现R树结构来加速图像检索系统,我想告诉你我的数据库空间有一个颜色直方图(多维)的特征向量,还有一个距离向量对于相似度测量...
谢谢
我不使用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。
我不熟悉 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}
然后,您的问题变成编写函数来构建和遍历您选择的表示中的树。大多数树函数最好写成递归。任何好的文本,以及大量的互联网站点,都会告诉你所有你想知道的关于这些功能的信息。
实现 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