Forums - Scale & Rotation Invariant Feature Matching

2 posts / 0 new
Last post
Scale & Rotation Invariant Feature Matching
katrin
Join Date: 28 Oct 11
Posts: 14
Posted: Tue, 2012-06-12 07:19

Hi all,


I want to implement scale and rotational invariant feature point detection & matching with FastCV. Did anyone already successfully implement this and can provide  me some ideas and help?

I can already match detected feature points of two images (using fcvCornerFast9u8, fcvDescriptor17x17u8To36s8 and a self-implemented brute force matcher). Now I'm trying to make my approach scale & rotation invariant. I guess the best way is to use image pyramids for scale invariance (detecting feature points on various scales) and to compute the dominant orientation of a feature point for roation invariance (using fcvCopyRotated17x17u8 for rotation invariant descriptors).

Right now I'm struggled with computing the dominant gradient orientation.  I'm trying to compute the dominant orientation by creating a histogram of gradient orientations (36 bins) within the neighborhood of a feature point and choosing the most dominant orientation (that's the approach used for SIFT as far as I know). Should I use fcvImageGradientPlanars16 or fcvImageGradientSobelPlanars8 (I guess the later one is the same as fcvPyramidSobelGradientCreatei8 for image pyramids) for the gradient computation? I'm also struggled with the correct parameter selection for the size of the neighborhood and the weighting of the magnitude (just ignore too small magnitudes? how to define the threshold? or rather weight the gradient direction with the magnitude? higher weights for closer neighbors?). My current implementation returns worse results than without rotation invariance.

I've read about an upcomming release of FastCV in June. Is there already some more information available? When exaclty will the new version be released? What features will be added? Will there be new sample apps? Something that helps me with my mentioned problem?

Thanks for any advise!

  • Up0
  • Down0
grk101
Join Date: 26 Oct 11
Posts: 12
Posted: Wed, 2012-06-13 13:21

 

You could either use fcvImageGradientPlanars16 or fcvImageGradientPlanars8. The latter should yield good enough result for patch orientation while being faster at run time. Your approach to computing the general orientation is pretty standard. It's a matter of fine tuning your parameters.  Once you have a general orientation you can use fcvCopyRotated17x17 and fcvDescriptor17x17u8To36s8 to generate a rotation invariant  descriptor .

//Extract Region around feature location. Note: This isn't a fastCV function. You would have to implement it
cropImage25x25( image, x, y,  neighboorhood );
// Compute neighboorhood orientation. Note: This isn't a fastCV function. You would have to implement it
float angle; // in radians
findOrientation25x25( neighboorhood, &angle );
//Quantize unit circle in 1024 bins
int orientation = (int) (angle / 3.1415 * 512.0);
orientation = ( angle + 1024 ) & ( 1024 - 1 );
fcvCopyRotated17x17u8( region, patch, orientation );
fcvDescriptor17x17u8To36s8( patch, descriptor, normSq );
FastCV 1.1 will be coming at the end of June with : 
80+ Additional functions
Enhanced Image processing capabilities
Enhanced Gesture recognition support
Enhanced documentation support ( End of summer )
Cheers,
-Guy

 

  • Up0
  • Down0
or Register

Opinions expressed in the content posted here are the personal opinions of the original authors, and do not necessarily reflect those of Qualcomm Incorporated or its subsidiaries (“Qualcomm”). The content is provided for informational purposes only and is not meant to be an endorsement or representation by Qualcomm or any other party. This site may also provide links or references to non-Qualcomm sites and resources. Qualcomm makes no representations, warranties, or other commitments whatsoever about any non-Qualcomm sites or third-party resources that may be referenced, accessible from, or linked to this site.