I have over 200,000 images and have written some code to find one image (which can be different in scale, color, etc) in the group of 200,000. I generate SURF key points and descriptors. I then save these to a file. When I want to find an image in this group, I generate the SURF key points and descriptors for the target image and scan through all 20000 key point/descriptor files and do a comparison of the target against each file looking for the best match. Assuming multithreading, etc. I can reduce this process down to about 5-8 per target image. Would anyone recommend a better strategy for doing this? Would bag of words approach work? As I understand BOW, you have categories which you train. I don't think this would be applicable in this case.