Implementations of image matching using “Scalable

2019-03-20 02:08发布

问题:

Do 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).

回答1:

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.



回答2:

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.



回答3:

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.



回答4:

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



回答5:

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.



回答6:

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.