Original article from three things everyone shocould know to improve object retrieval. (cvpr2012)
Only rootsift = SQRT (SIFT/sum (SIFT) can be used to achieve good results. The actual processing is as follows:
Add a processing item before the descriptor array output.
Float sum = 0.0f; For (float F: DESC) sum + = math. ABS (f); for (I = 0; I <DESC. length; I ++) {If (DESC [I] <0) DESC [I] = (float)-math. SQRT (-Desc [I]/SUM); else DESC [I] = (float) math. SQRT (DESC [I]/SUM );}
In fact, here is a sift deformation, not the real sift, but the Harris + surf, so DESC [I] may be negative, the original matching of 38 images for more than 12000 samples was 1125 (two false matches ),
After rootsift = SQRT (SIFT/sum (SIFT) is used, 38 images match 12000 (3 by mistake) for more than 1207 samples, increasing by 9%. The matching points in other previously matched images are more stable.
If we use native sift, we believe it will have better results.