Content based image retrieval(CBIR), also called as
query by image content(QBIC),
google search by image and
TinEye maybe are the famous example in our daily live. In short, CBIR search the images
based on the content of the image, not the name,date,meta data or other info.
I study how to implement CBIR from
PyImageSearch Gurus, the algorithms are almost the same, but my codes are written by c++, build on top of
opencv,
hdf5,
armadillo,
boost,
rapidjson. I pick c++ but not python(PyImageSearch use python) for this project because
1 : c++ suit for building stand alone package
2 : I like c++
These series of post would not discuss the implementation details of the codes(codes located at
github) but summarize the keys I learn from the CBIR lessons of
PyImageSearch Gurus.
The keys of this CBIR system
1 : Feature detector--kaze
2 : Feature descriptor--kaze
3 : Bag of visual words
4 : Data structure(hdf5, inverted index)
5 : Create Code book(I prefer kmeans)
6 : Quantization(build a histogram)
7 : Tf-idf(Term frequency and inverse document frequency)
8 : Spatial verification
9 : Evaluation
ukbench contain 6376 images, it would be a tedious job to find relevant images by human, this is why we need CBIR to save us from this kind of labor. Before I begin to summarize the keys of this CBIR system, I would post some examples, a picture is worth a thousand words.
Case 1 : Find similar image of the camera(pic00) within ukbench
 |
| pic00 |
 |
| Search result of pic00 |
Case 2 : Find similar image of the toy(pic01) within ukbench
 |
| pic01 |
 |
| Search result of pic01 |
The most similar image are shown at the
first row. Until now, I think it should be clear enough to show what are CBIR intent to solve. We could use it to deal with a lot of problems, like object recognition(however,
cnn is state of the art when I writing this post), search web site with the image(like google and TinEye), remove duplicate images and so on.
On next post, I would record part of the flows of this CBIR system, write down how to use the codes located on
github(without explanation of implementation details).