2010-01-18 3 views
1

, пожалуйста, кто-нибудь скажет мне, как мы можем реализовать структуру R-дерева в Matlab для ускорения поиска изображений, я хотел бы сообщить вам, что в моем пространстве базы данных есть вектор-объект Color Histogram (многомерные), а также II имеют вектор расстояния для меры подобия ...Реализация R-дерева в Matlab

благодаря

+0

Как вы работаете в настоящее время? Возможно, начиная с этого мы можем помочь вам улучшить структуру данных или алгоритмы. – ahans

+0

Thank Я хотел бы сообщить вам, что я хранил свой вектор-функцию (имя файла, гистограмму цвета) в структуре массива, а затем сохраняю его в файле базы данных (.mat). Я уменьшаю цвет до 4, так что в этом случае у меня есть 4 × 4 × 4 = 64 dim, я читал о R-дереве, он не подходит для высокоразмерных, я думаю, что при нормализации цвет, который я получаю 16-мерным, так что в этом случае я могу использовать R-Tree ... мой вопрос заключается в том, как я могу реализовать свои данные (FV и вектор расстояний) в R-дереве? ИЛИ любые предложения для другой структуры, моя цель заключается в использовании структуры индексирования при извлечении изображений. спасибо – 2010-01-19 15:19:11

ответ

0

Я не знаком с R-деревьев конкретно, но в общих деревьев динамические структуры данных. Matlab действительно не выполняет динамические структуры данных, если вы не начнете использовать свои средства OO. Если вы не хотите этого делать, вы можете сгладить свое дерево в массив ячеек. Например, я напишу (строго) двоичное дерево, сплющенное в массив ячеек, что избавит меня от необходимости рисовать дерево. Здесь идет:

{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} 

ваша проблема тогда становится написание функций для построения и обхода дерева в выбранном представлении. Большинство функций дерева лучше всего записывать как рекурсии. Любой хороший текст и множество интернет-сайтов расскажут вам все, что вы хотите знать о таких функциях.

+0

Привет Большое вам спасибо за ответ. попытайтесь применить свое мнение – 2010-01-19 15:20:41

0

Реализация R-дерева на самом деле не простая задача. Вы можете использовать привязку matlab для библиотеки LidarK, она должна быть достаточно быстрой. Код находится здесь: http://graphics.cs.msu.ru/en/science/research/3dpoint/lidark

Если вы решили использовать kd-дерево (что типично для извлечения изображений), есть и хорошая реализация. http://www.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN

+1

Lidark может быть спроектирован только для 3d, что не поможет. –

+0

Вы правы, нужно изменить константу и перестроить библиотеку, чтобы изменить количество измерений. Он не был протестирован, однако может быть проще, чем внедрение R-Tree с нуля. –

0

Я не использую Matlab. Поэтому я не знаю, сколько затрат связано с Matlab с индексами. Кажется, он не предназначен для таких вещей.

R-Trees, похоже, имеет большое значение. Судя по http://elki.dbs.ifi.lmu.de/wiki/Benchmarking, некоторые алгоритмы могут извлечь огромную выгоду из наличия хорошей структуры индекса. Номера на этой веб-странице в 5-7 раз быстрее в наборе данных гистограммы цвета изображения 110250.

По моему опыту, R-Trees действительно может быть довольно трудно получить право. Но только если вы хотите идти полным ходом. Если у вас есть статическая база данных, вы можете легко достать с навалом загруженным R-Tree. Ни объемная загрузка, ни запросы очень трудно сделать. R-Trees становятся беспорядочными, если вы хотите сделать оптимизацию R * -Tree со сложными стратегиями разделения, повторными вставками, балансировкой и делать все это эффективно и на диске с интеллектуальным кэшированием. Но пока вы работаете в оперативной памяти и не динамически добавляете объекты, R-дерево с большой нагрузкой STR много помогает и будет намного проще реализовать.

Возможно, вам все равно лучше построить что-то, что уже работает R-Tree. Скажем, SQLite с модулем rtree или ELKI, упомянутым выше.

Смежные вопросы