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!
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 .