Training of SVM classifier using SIFT features

saidaniasma picture saidaniasma · Sep 27, 2013 · Viewed 9.2k times · Source

please i like to classify a set of image in 4 class with SIFT DESCRIPTOR and SVM. Now, using SIFT extractor I get keypoints of different sizes exemple img1 have 100 keypoints img2 have 55 keypoints.... how build histograms that give fixed size vectors with matlab

Answer

Faroq AL-Tam picture Faroq AL-Tam · Dec 17, 2014

In this case, perhaps dense sift is a good choice.

There are two main stages:

Stage 1: Creating a codebook.

  1. Divide the input image into a set of sub-images.
  2. Apply sift on each sub-image. Each key point will have 128 dimensional feature vector.
  3. Encode these vectors to create a codebook by simply applying k-means clustering with a chosen k. Each image will produce a matrix Vi (i <= n and n is the number of images used to create the codeword.) of size 128 * m, where m is the number of key points gathered from the image. The input to K-means is therefore, a big matrix V created by horizontal concatenation of Vi, for all i. The output of K-means is a matrix C with size 128 * k.

Stage 2: Calculating Histograms.

For each image in the dataset, do the following:

  1. Create a histogram vector h of size k and initialize it to zeros.
  2. Apply dense sift as in step 2 in stage 1.
  3. For each key point's vector find the index of it's "best match" vector in the codebook matrix C (can be the minimum in the Euclidian distance) .
  4. Increase the corresponding bin to this index in h by 1.
  5. Normalize h by L1 or L2 norms.

Now h is ready for classification.

Another possibility is to use Fisher's vector instead of a codebook, https://hal.inria.fr/file/index/docid/633013/filename/jegou_aggregate.pdf