How to get a fixed size SIFT object?

I am trying to get object vectors for N = ~ 1300 images in my dataset, one of the possibilities I have to implement is the form. Therefore, I plan to use SIFT descriptors. However, each image returns a different number of key points, so I run

[F,D] = vl_sift(image); 

F has a size of 4 x N , and D has a size of 128 x N , where N is the number of detected key points.

However, I want to get one 128 x 1 vector that can represent the image as best as possible. I have seen things like clustering and k-tools, but I don't know how to do them.

The most basic idea is to get the average of these N vectors of size 128x1, then I have a feature vector. But does meaning make sense? Should I do some kind of histogram?

Any help would be appreciated. Thanks!

+7
image-processing matlab sift data-mining vlfeat
source share
1 answer

This is actually a big research problem. You are right, averaging all descriptors will not make sense. There are several approaches to creating a single vector from a set of local descriptors. One large class of methods is called a bag of signs or a bag of visual words. The general idea is to group local descriptors (e.g., sift) from many images (e.g., using k-means). Then you take a specific image, find out which cluster each descriptor of this image belongs to, and create a histogram. There are various methods of clustering and various methods of creating and normalizing a histogram.

A slightly different approach is called the Pyramid Matching Core, which is a way to train the SVM classifier for sets of local descriptors.

So, for beginners google "bag of functions" or "bag of visual words."

+6
source share

All Articles