Реализация R-дерева в Matlab - PullRequest
0 голосов
/ 18 января 2010

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

спасибо

Ответы [ 3 ]

1 голос
/ 13 апреля 2012

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

R-деревья, кажется, имеют значение.Судя по 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, упомянутых выше.

0 голосов
/ 28 октября 2010

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

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

0 голосов
/ 19 января 2010

Я не знаком с 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}

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

...