2010-08-02 2 views
7

У меня есть своего рода общего R вопроса здесь:Кластеризация фотографий в R?

Обычно с цифровыми камерами мы склонны нажимать много immages, которые могут быть повторяющимися и может тратить онлайновое пространство, разделяя на Picassa или накладные расходы при попытке удалить некоторые нежелательные изображений.

Можно ли группировать фотографии с помощью R? Я имею в виду, что в Matlab существуют некоторые возможности кластеризации для обработки изображений, но есть ли такая функциональность или есть какие-либо предложения, чтобы сделать это в R?

Просьба представить некоторые идеи, если они есть на эту тему.

ответ

9

Если вы посмотрите на CRAN, есть различные (я считаю, около 10) пакетов для чтения данных изображения. И, конечно же, для кластеризации существуют различные пакеты. В теории вы можете просто подключить данные необработанного изображения к алгоритмам кластеризации, но на практике это не будет работать очень хорошо. С точки зрения скорости это было бы очень медленно, и с точки зрения точности это, вероятно, было бы очень плохо. Современные методы группировки данных изображений основаны на специализированных функциях, извлеченных из изображений, и работают над этим. Лучшие функции зависят от приложения, но некоторые из наиболее известных - SIFT, SURF и HOG. Старые методы основывались на гистограммах цветов изображения как на функциях, и это вполне выполнимо с вышеупомянутыми пакетами R, но это не очень точно - он не может отличить изображение моря от изображения синей комнаты.

А что делать? На самом деле это зависит от вашей конечной цели. Одним из способов может быть использование одного из различных экстракторов функций с открытым исходным кодом, сохранение данных в текстовый или другой R-читаемый формат, а затем обработка данных в R, как обычно.

Хорошая библиотека C с открытым исходным кодом для извлечения функций с интерфейсом cli - vlfeat. Если вы используете это, я рекомендую использовать плотное извлечение SIFT на трех цветовых каналах. Затем представляйте каждое изображение конкатенированными векторами SIFT и применяйте свой любимый метод кластеризации (который может обрабатывать векторы с размерами в тысячах). Это вряд ли даст вам современное представление, но это начало.

This page имеет различные эталонные реализации экстракторов признаков, но только двоичные.

Остерегайтесь: по моему опыту, R не слишком хорошо масштабируется с большими, объемными наборами данных (с размерами в диапазоне GB). Я люблю R до смерти, но использую C++ для этого.

+0

Отличное предложение, рассмотрим это. Благодаря! –

+1

@Neo_Me: Я помню программу Python + C для группировки изображений на основе этих методов. Насколько я вижу, это одноразовый проект для исследовательских целей, но он может послужить вдохновением. [Йорг] (http://lear.inrialpes.fr/src/yorg/doc/index.html) – dimatura

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