tutorial data-structures tree vocabulary sift surf

data structures - tutorial - ¿Qué es un árbol de vocabulario y cómo construir uno?



trie (2)

Estoy leyendo mucho sobre árboles de vocabulario cuando se trata de consultas rápidas para imágenes similares o textos en grandes bases de datos. Pero no pude encontrar ninguna descripción buena (fácil de entender) sobre qué es ese árbol de vocabulario y cómo construir una de las características.


El árbol de vocabulario es una forma compacta de recuperar imágenes. Básicamente, existen tres pasos para implementar este algoritmo, y depende en gran medida de otras técnicas de visión por computadora, como las características SIFT.

El primer paso es construir un árbol kmeans usando descriptores tamiz. Los nodos de hojas de este árbol contienen una "bolsa" de descriptores de tamizado. El segundo paso es construir una base de datos de imágenes usando el árbol de vocabulario que construyes en el primer paso. Puede ver este proceso como cuantizar una imagen en un espacio vectorial. Luego, el tercer paso es consultar la imagen en la base de datos de imágenes. Por supuesto, hay algunas técnicas detalladas, como la lista invertida, etc.

Aquí hay una buena implementación del árbol de vocabulario: libvot . Básicamente sigue los tres pasos que describí arriba. Utiliza la biblioteca de hilos múltiples estándar de C ++ 11 para acelerar el proceso de compilación, por lo que se ejecuta bastante rápido.

Aquí está el trabajo de investigación original al respecto. Tiene un gran impacto en la comunidad de visión por computadora estos años.


El árbol de vocabulario es algo que se hace agrupando palabras visuales en grupos. La estructura del árbol se aplica para esto, lo que lo convierte en un árbol de vocabulario. El siguiente diagrama aclarará las cosas.

También mira esto: