开发者

Image Descriptors with SIFT/VLFEAT

开发者 https://www.devze.com 2023-02-17 21:52 出处:网络
I want to perform a classification task in which I map a given image of an object to one of a list of predefined constellations that object can be in (i.e. find the most probable match).

I want to perform a classification task in which I map a given image of an object to one of a list of predefined constellations that object can be in (i.e. find the most probable match). In order to get descriptors of the image (on which i will run machine learning algorithms) i was suggested using SIFT with the VLFeat implementation.

First of all my main question - I would like to ignore the key-point finding part of sift, and only use it for its descriptors. In the tutorial I saw that there is an option to do exactly that by calling

[f,d] = vl_sift(I,'frames',fc) ;

where fc specifies the key-points. My problem is that I want to explicitly specify the bounding box in which i want to calculate the descriptors around the key-point - but it seems i can only specify a scale parameter which right now is a bit cryptic to me and doesn't allow me to specify explicitly the bounding box. Is there a way to achieve this?

The second question is does setting the scale manually and getting the descriptors this way make sense? ( i.e. result in a good descriptor? ). Any other suggestions regarding better ways of getting descriptors ? ( using SIFT with other implementations, or other non-SIFT descriptors ). I should mention that my object is always the only object in the image, is centered, has constant illumination, and changes by some kinds of rotatio开发者_开发问答ns of its internal parts - And this is why I thought SIFT would work out as i understood it focuses on the orientation gradients which would change accordingly with the rotations of the object.

Thanks


Agreed about the fact that the descriptor scale looks a bit cryptic.

See the third image in the VLFeat SIFT tutorial where they overlay the extracted descriptors on the image with the following commands

h3 = vl_plotsiftdescriptor(d(:,sel),f(:,sel)) ;  
set(h3,'color','g') ;

You can thus play with scale and see if the region where the histogram is extracted jives with what you expected.

SIFT sounds like it might be overkill for your application if you have that much control over the imaging environment but it should work.


Hey. It might help looking through the background chapter of this Thesis: http://www.cs.bris.ac.uk/Publications/pub_master.jsp?id=2001260

it would take time for me to explain about the scale so try reading it and see the relevant citation. Btw in that work the descriptors are used at base resolution, i.e. scale ~ 1.

Hope this helps.


Maybe I did not understood the problem, but, if the query image must be matched against a database of train images, and both train and test images are constant in illumination, scale, ... maybe SIFT is not necessary in here. You could have a look on correlation. Are you using matlab?

http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html#template-matching "Here" you can see an example using correlation with opencv.

0

精彩评论

暂无评论...
验证码 换一张
取 消