2010-01-18 15 views
1

S'il vous plaît, quelqu'un me dire comment nous pouvons implémenter la structure R-tree dans matlab pour accélérer le système de recherche d'image, je voudrais vous informer que mon espace de base de données multidimensionnels) et aussi II ont un vecteur de distance pour la mesure de similarité ...Implémentation de R-tree dans matlab

grâce

+0

Comment fonctionne l'implémentation actuelle? Peut-être qu'à partir de là, nous pouvons vous aider à améliorer votre structure de données ou vos algorithmes. – ahans

+0

Remerciez Je voudrais vous informer que je stocke mon vecteur caractéristique (nom de fichier, histogramme couleur) dans la structure du tableau, puis enregistrez-le dans le fichier de base de données (.mat) je réduis la couleur à 4, dans ce cas j'ai 4 × 4 × 4 = 64 dim, j'ai lu sur R-arbre, il ne convient pas à haute dimension, je pensais à la normalisation de la couleur que je reçois 16 dimension, dans ce cas je peux utiliser R-tree ... ma question est comment puis-je mis en œuvre mes données (FV et vecteur de distance) dans R-tree? OU toute suggestion pour une autre structure, mon but est d'utiliser la structure d'indexation dans la récupération d'image merci –

Répondre

0

Je ne suis pas au courant spécifiquement R arbres mais dans les arbres généraux sont des structures de données dynamiques. Matlab ne fait pas vraiment de structures de données dynamiques à moins de commencer à utiliser ses fonctionnalités OO. Si vous ne voulez pas faire cela, vous pouvez aplatir votre arbre dans un tableau de cellules. Par exemple, je vais écrire un arbre (strictement) binaire aplati dans un tableau de cellules, ce qui me sauvera de devoir dessiner un arbre. Ici va:

{1,{2},{3}} 

qui représente un arbre binaire avec racine 1 et les branches gauche à 2, droit à 3. Je peux faire ce plus profond:

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

qui ajoute un autre niveau à l'arbre précédent. Si vous souhaitez ajouter des données à l'un des noeuds, votre (premier) arbre pourrait ressembler à ceci:

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

Une alternative à cela serait de définir vos nœuds séparément, comme celui-ci

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

alors votre arbre devient

{node1, node2, node3} 

votre problème devient alors l'écriture des fonctions pour construire et parcourir l'arbre dans votre représentation choisie. La plupart des fonctions d'arbre sont mieux écrites en tant que récursions. Tout bon texte, et beaucoup de sites Internet, vous dira tout ce que vous voulez savoir sur ces fonctions.

+0

Salut Merci beaucoup pour la réponse que je vais tenter d'appliquer votre avis –

0

La mise en œuvre de R-tree n'est pas vraiment une tâche simple. Vous pouvez utiliser la liaison matlab pour la bibliothèque LidarK, elle devrait être assez rapide. Le code est ici: http://graphics.cs.msu.ru/en/science/research/3dpoint/lidark

Si vous décidez d'utiliser kd-tree (ce qui est typique pour la récupération d'image), il y a aussi une bonne implémentation. http://www.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN

+1

Lidark pourrait être conçu pour seulement 3d, ce qui ne va pas aider beaucoup alors. –

+0

Vous avez raison, il faut changer la constante et de reconstruire la bibliothèque afin de changer le nombre de dimensions. Il n'a pas été testé, mais pourrait être plus facile que de mettre en œuvre R-Tree à partir de zéro. –

0

Je n'utilise pas Matlab. Je n'ai donc aucune idée du coût associé à Matlab avec les structures d'index. Cela ne semble pas être conçu pour de telles choses. Les arbres R semblent faire toute la différence. A en juger par certains algorithmes peuvent bénéficier énormément d'avoir une bonne structure d'index. Les nombres sur cette page Web sont 5 à 7 fois plus rapides sur un ensemble de données d'histogramme de couleur de l'image 110250. D'après mon expérience, R-Trees peut en effet être assez difficile à obtenir correctement. Mais seulement si vous voulez aller jusqu'au bout. Si vous avez une base de données statique, vous pouvez vous en sortir facilement avec un en vrac chargé R-Tree. Ni le chargement en bloc ni les requêtes sont très difficiles à faire. Les R-Trees deviennent désordonnés une fois que vous voulez faire les optimisations R * -Tree avec des stratégies de split complexes, réinsertions, équilibrage, et faire tout cela efficacement et sur le disque avec la mise en cache intelligente. Mais tant que vous travaillez en mémoire et que vous n'ajoutez pas d'objets dynamiquement, un arbre R chargé en masse de STR vous aidera beaucoup et sera beaucoup plus facile à implémenter.

Il est peut-être encore mieux de s'appuyer sur quelque chose qui a déjà un R-Tree fonctionnel. Dites SQLite avec le module rtree ou ELKI mentionné ci-dessus.