Implementations of image matching using "Scalable Recognition with a Vocabulary Tree" [closed]
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 6 years ago.
开发者_运维技巧 Improve this questionDo you know of any implementations or improvements of the method of matching images proposed by David Nister and Henrik Stewenius, called "Scalable Recognition with a Vocabulary Tree"? I am trying to implement it and I am having trouble understanding some parts of the algorithm (more specifically, computing the score).
Here is a good implementation of vocabulary tree - libvot. It use the C++11 standard multi-thread library to accelerate the build process so it runs pretty fast.
It uses three steps to build a vocabulary tree. The first step is to build a kmeans tree using sift descriptors. The second step is to build a image database using the vocabulary tree you build in the first step. The third step is to query the image against the image database. Some advanced techniques such as inverted list and L1 distance measure are also reflected in this repository.
Regarding the vocabulary trees, I found this thesis (http://www.tango-controls.org/Members/srubio/MasterThesis-VocabularyTree-SergiRubio-2009.pdf) which implements them in C++/python. However, I can't find the code anywhere, so I contacted the author to get the code but without success til this date.
Furthermore, I found this other implementation (http://www.inf.ethz.ch/personal/fraundof/page2.html), however I was unable to put it to work.
Have you implemented it already?? I would like to do the same for image recognition but it seems like a very painful task.
Best regards.
Sergio Rubio has posted an implementation of using a vocabulary tree for image classification at http://sourceforge.net/projects/vocabularytree/. I had to rework much of the C code he posted to get it to work on my Windows system, but overall it was a very good resource for implementing the ideas presented in the original paper.
Recently I found a non-free pretty great Vocabulary Tree implementation in C++ called DBow.
The code is well organized and has a lot of comments.
Checkout here: http://webdiis.unizar.es/~dorian/index.php?p=31
and here: http://webdiis.unizar.es/~dorian/index.php?p=32
You want to look for a space-filling-curve or spatial index. A sfc reduce the 2d complexity to a 1d complexity although it is just an reorderd of the surface. A sfc recursivley subdivide the surface into smaller tiles and keep picking information of the near by tiles. It can be compared with a quadtree. This can be usefull to compare images because you compare near by tiles. The difficult is then to make the tiles comparable. I believe a DCT can be useful here. You want to look for Nick's hilbert curve quadtree spatial index blog.
I believe the Pyramid Match kernel method proposed by Grauman and Darrell is generally considered to be even better. You can get a C++ library implementation here.
精彩评论