2010-08-02 19 views
7

Tengo un tipo de pregunta general R aquí:Agrupación de fotos en R?

lo general, con cámaras digitales que tienden a hacer clic en un montón de immages que puede ser repetitivo y puede desperdiciar espacio en línea mientras se comparte en Picassa o una sobrecarga al intentar eliminar algunos no deseados imágenes.

¿Es posible agrupar fotos usando R? Quiero decir que hay algunas habilidades de agrupamiento en Matlab para el procesamiento de imágenes, pero ¿este tipo de funcionalidad está disponible o hay alguna sugerencia para hacer esto en R?

Proporcione algunas ideas, si las hubiera, sobre este tema.

Respuesta

9

Si mira CRAN, hay varios paquetes (cuento alrededor de 10) para leer datos de imagen. Y, por supuesto, hay varios paquetes para hacer clustering. En teoría,, podría simplemente conectar los datos de imagen en bruto en los algoritmos de agrupamiento, pero en la práctica eso no funcionaría muy bien. En términos de velocidad, sería muy lento, y en términos de precisión, probablemente sería bastante malo también. Las técnicas modernas para agrupar los datos de imagen se basan en características especializadas extraídas de imágenes y funcionan sobre eso. Las mejores características dependen de la aplicación, pero algunas de las más conocidas son SIFT, SURF y HOG. Las técnicas más antiguas se basaban en histogramas de colores de la imagen como características, y eso es bastante factible con los paquetes R antes mencionados, pero no es muy preciso: apenas se puede distinguir entre una imagen del mar y una imagen de una habitación azul.

¿Qué hacer? Depende de tu objetivo final, realmente. Una manera podría ser usar uno de los varios extractores de funciones de código abierto, guardar los datos en texto u otro formato legible por R, y luego procesar los datos en R como de costumbre.

Una buena biblioteca C de código abierto para extraer funciones que tiene una interfaz cli es vlfeat. Si usa esto, le recomiendo usar la extracción SIFT densa en los tres canales de color. A continuación, represente cada imagen mediante los vectores SIFT concatenados y aplique su técnica de clúster favorita (que puede manejar vectores con miles de dimensionalidades). Eso difícilmente le daría un rendimiento de vanguardia, pero es un comienzo.

This page tiene varias implementaciones de referencia de extractores de características, pero solo binarias.

Cuidado: en mi experiencia, R no escala demasiado bien con grandes conjuntos de datos dimensionales (con tamaños en el rango de GB). Amo a R hasta la muerte, pero uso C++ para esto.

+0

Una gran sugerencia, investigará esto. ¡Gracias! –

+1

@Neo_Me: Recordé un programa de Python + C para agrupar imágenes basadas en estas técnicas. Hasta donde puedo ver, es un proyecto único para fines de investigación, pero podría servir de inspiración. [Yorg] (http://lear.inrialpes.fr/src/yorg/doc/index.html) – dimatura