matlab opencv image-processing matlab-cvst object-recognition

Bolsa de palabras de entrenamiento y prueba opencv, matlab



image-processing matlab-cvst (2)

Características locales

Cuando trabaje con SIFT, generalmente desea extraer características locales. ¿Qué significa eso? Usted tiene su imagen y de esta imagen ubicará puntos de los cuales extraerá vectores de características locales. Un vector de características local es solo un vector que consiste en valores numéricos que describen la información visual de la región de la imagen de la que se extrajo. Aunque el número de vectores de características locales que puede extraer de la imagen A no tiene que ser el mismo que el número de vectores de características que puede extraer de la imagen B, los componentes numéricos de un vector de características local (es decir, su dimensionalidad) siempre lo mismo.

Ahora, si desea usar sus vectores de características locales para clasificar imágenes, tiene un problema. En la clasificación de imágenes tradicional, cada imagen se describe mediante un vector de características globales, que, en el contexto del aprendizaje automático, puede verse como un conjunto de atributos numéricos. Sin embargo, cuando extrae un conjunto de vectores de características locales, no tiene una representación global de cada imagen que se requiere para la clasificación de imágenes. Una técnica que puede emplearse para resolver este problema es la bolsa de palabras, también conocida como bolsa de palabras visuales (BoW).

Bolsa de palabras visuales

Aquí está el algoritmo de BoW (muy) simplificado:

  1. Extraiga los vectores de características locales de SIFT de su conjunto de imágenes;

  2. Coloque todos estos vectores de características locales en un solo conjunto. En este punto, ni siquiera necesita almacenar desde qué imagen se extrajo cada vector de característica local;

  3. Aplique un algoritmo de agrupamiento (p. Ej., K-medias) sobre el conjunto de vectores de características locales para encontrar las coordenadas del centroide y asignar una identificación a cada centroide. Este conjunto de centroides será tu vocabulario;

  4. El vector de características global será un histograma que cuenta cuántas veces ocurrió cada centroide en cada imagen. Para calcular el histograma, encuentre el centroide más cercano para cada vector de característica local.

Clasificación de imagen

Aquí estoy suponiendo que su problema es el siguiente:

Tiene como entrada un conjunto de imágenes etiquetadas y un conjunto de imágenes no etiquetadas a las que desea asignar una etiqueta en función de su apariencia visual. Supongamos que su problema es clasificar la fotografía de paisaje. Las etiquetas de imagen podrían ser, por ejemplo, "montañas", "playa" o "bosque".

El vector de características globales extraído de cada imagen (es decir, su bolsa de palabras visuales) se puede ver como un conjunto de atributos numéricos. Este conjunto de atributos numéricos que representan las características visuales de cada imagen y las etiquetas de imagen correspondientes se pueden utilizar para entrenar clasificador. Por ejemplo, podría usar un software de minería de datos como Weka , que tiene una implementación de SVM, conocida como SMO, para resolver su problema.

Básicamente, solo tiene que formatear los vectores de características globales y las etiquetas de imagen correspondientes de acuerdo con el formato de archivo ARFF , que es, básicamente, un CSV de vectores de características globales seguido de una etiqueta de imagen.

Estoy implementando Bag Of Words en opencv utilizando las características de SIFT para hacer una clasificación para un conjunto de datos específico. Hasta ahora, he sido muy útil para agrupar los descriptores y generar el vocabulario. Como sé, tengo que entrenar a SVM ... pero tengo algunas preguntas que estoy realmente confundido acerca de ellas. El principal problema es el concepto detrás de las implementaciones, estas son mis preguntas:

1- Cuando extraigo las características y luego creo el vocabulario, ¿debo extraer las características de todos los objetos (digamos 5 objetos) y ponerlos en un archivo, por lo que los hago todos en un solo archivo de vocabulario que tiene todo el ¿palabras? y cómo los separaré más adelante cuando haga la clasificación?

2- ¿Cómo implementar el SVM? Conozco las funciones que se usan en openCV, pero ¿cómo?

3- Puedo hacer el trabajo en MATLAB, lo cual me refiero a la implementación de la capacitación SVM, pero ¿hay algún código disponible que pueda guiarme a través de mi trabajo? He visto el código utilizado por Andrea Vedaldi, pero está trabajando solo con una clase cada vez y otro tema que no muestra cómo crear el archivo .mat que está usando en sus ejercicios. Todas las demás implementaciones que pude encontrar, no están usando SVM. Entonces, ¿puedes guiar en este punto también?

Gracias


Aquí hay un artículo muy bueno que presenta el modelo Bag of Words para clasificación usando OpenCV v2.2. http://app-solut.com/blog/2011/07/the-bag-of-words-model-in-opencv-2-2/

Un artículo de seguimiento sobre el uso del clasificador de Bayes normal para la categorización de imágenes. http://app-solut.com/blog/2011/07/using-the-normal-bayes-classifier-for-image-categorization-in-opencv/

También incluye una demostración de código de ~ 200 líneas en el conjunto de datos Caltech-256 disponible. http://code.google.com/p/open-cv-bow-demo/downloads/detail?name=bowdemo.tar.gz&can=2&q=

Aquí hay algo para tener una idea intuitiva del proceso de clasificación de imágenes: here

Realmente me ayudó a aclarar muchas preguntas. Espero que esto ayude a alguien. :)