Hey guys,

I'm working with SIFTing salient objects like so: http://imageshack.us/photo/my-images/526/yuisalient.png/

as you see, the salient image has quite a messy black background. My question is, will these black backgrounds be picked up by SIFT or affect SIFT feature extraction in anyway?

asked Dec 07 '11 at 00:48

mugetsu's gravatar image

mugetsu
233212431


3 Answers:

Why do you mask the object like this? You could just use the saliency map to find regions where to extract the descriptors.

If a SIFT descriptor is extracted near a black boundary, it will definitely be affected. The black region is a very high contrast gradient and therefore a very strong feature.

answered Dec 07 '11 at 05:42

Andreas%20Mueller's gravatar image

Andreas Mueller
2686185893

I'm using GBVS and I was just being spoon fed a mask as such so I was just curious if I could get away with just that. But alas it doesn't seem possible. I've been thinking of the best way to find these regions. The code I'm using right now does: img_thresholded=img.*repmat(saliency_map >= prctile(saliency_map(:),75),[1 1 size(img,3)]);

which explains all the masking. I was also considering determining the location of the salient map boundary so I could get a rough rectangular cut out of the original image. But this has the risk of cropping in unnecessary parts but in the case of my example it actually gives me a better salient region. How would you recommend finding the regions?

(Dec 07 '11 at 13:51) mugetsu

I would use a mask like yours but would not apply it to the image but to the descriptors. If you use the vlfeat implementation of dense sift (which is great and you seem to be using any way), it will give you descriptors and locations of these descriptors. You can simply just drop all descriptors that lie outside of the region of interest.

(Dec 08 '11 at 03:53) Andreas Mueller

I think the best thing you can do is play around with an implementation of SIFT to see how it behaves.

The best open-source solution I've seen so far is VLSift. They have a C library if you want to make use of it in your own program(s), command-line tools for finding/extracting SIFT features without direct integration, and a Matlab toolbox.

I haven't gone through the documentation in any real depth (I'm one of those people that plays around before I actually read the docs), but my over-all impression thus far is a positive one.

It's single-threaded, so if you want to take advantage of multiple cores you have to thread it yourself (eg, in Matlab I used parfor loops to process many images rapidly). Otherwise, it's pretty fast. I was able to churn through around 5,000 medium size images in about 5-10 seconds on an 8-core machine.

answered Dec 07 '11 at 15:13

Brian%20Vandenberg's gravatar image

Brian Vandenberg
824213746

yea i'm using vlsift. Great stuff, just wish they had community of some sort for discussion and questions

(Dec 07 '11 at 15:53) mugetsu

The implementation of SIFT and SURF in OpenCV supports passing a mask to the call to SIFT/SURF, in order to direct the algorithm to ignore parts of your image. I've used this functionality myself, and it seems to work well.

answered Dec 07 '11 at 21:00

Cerin's gravatar image

Cerin
462314046

edited Dec 07 '11 at 21:01

Your answer
toggle preview

powered by OSQA

User submitted content is under Creative Commons: Attribution - Share Alike; Other things copyright (C) 2010, MetaOptimize LLC.