2010-08-02 8 views
7

J'ai une sorte de question générale R ici:Clustering Photos dans R?

Habituellement avec digicams nous avons tendance à cliquer sur un grand nombre de immages qui peut être répétitif et peut perdre de l'espace en ligne, tout en partageant sur Picassa ou est une surcharge lorsque vous essayez de supprimer certains indésirables images.

Est-il possible de regrouper des photos avec R? Je veux dire qu'il y a des capacités de mise en cluster dans Matlab pour le traitement d'image, mais est-ce que ce genre de fonctionnalité est disponible ou y a-t-il des suggestions pour le faire en R?

Veuillez fournir quelques idées sur ce sujet s'il y a lieu.

Répondre

9

Si vous regardez CRAN, il y a plusieurs paquets (je compte environ 10) pour lire des données d'image. Et bien sûr, il existe différents paquets pour faire du clustering. En théorie, vous pourriez juste brancher les données d'image brutes dans les algorithmes de clustering, mais en pratique cela ne fonctionnerait pas très bien. En termes de vitesse, ce serait très lent, et en termes de précision, ce serait probablement très mauvais aussi. Les techniques modernes de regroupement de données d'images reposent sur des caractéristiques spécialisées extraites d'images et fonctionnent à cet effet. Les meilleures caractéristiques dépendent de l'application, mais certaines des plus connues sont SIFT, SURF et HOG. Les anciennes techniques reposaient sur des histogrammes de couleurs de l'image en tant que caractéristiques, ce qui est tout à fait faisable avec les paquets R susmentionnés, mais ce n'est pas très précis - on peut difficilement distinguer une photo de la mer d'une chambre bleue.

Alors que faire? Cela dépend de votre objectif ultime, vraiment. Une solution pourrait consister à utiliser l'un des divers extracteurs de fonctions open source disponibles, enregistrer les données dans un format texte ou autre format R, puis effectuer le traitement des données dans R comme d'habitude.

Une belle bibliothèque C open source pour extraire des fonctionnalités qui ont une interface cli est vlfeat. Si vous l'utilisez, je recommande d'utiliser une extraction SIFT dense sur les trois canaux de couleur. Ensuite, représentez chaque image par les vecteurs SIFT concaténés et appliquez votre technique de clustering préférée (qui peut gérer des vecteurs avec des dimensions dans les milliers). Cela ne vous donnerait pas une performance à la pointe de la technologie, mais c'est un début.

This page a différentes implémentations de référence d'extracteurs de caractéristiques, mais uniquement binaires.

Attention: d'après mon expérience, R ne s'adapte pas trop bien aux grands ensembles de données de grande taille (avec des tailles dans la gamme GB). J'aime R à mort, mais utilise C++ pour ce genre de choses.

+0

Grande suggestion, va se pencher sur cela. Merci! –

+1

@Neo_Me: Je me suis souvenu d'un programme Python + C pour regrouper des images basées sur ces techniques. Pour autant que je puisse voir, c'est un projet ponctuel à des fins de recherche, mais il pourrait servir d'inspiration. [Yorg] (http://lear.inrialpes.fr/src/yorg/doc/index.html) – dimatura