1 | initial version |
Well, you must first take into account the comments made below your question. I would just like to add a remark that could be an answer for your problem, or for other viewers.
Actually, you must know what you really want to do. You say that you want to tell whether a query image is identical to a model image or not. As some pointed, "identical" can take a lot of meanings when you you think about it. Identical could mean that every single pixel on the image has the same intensity or colour value. Then only a pixel by pixel comparison can give you a 100% match; when you think about it, the only way is to verify every one of them.
This said, maybe "identical" bears another meaning. Maybe you mean that everything is the image is identical but the global illumination might vary.
Then, maybe an image is "identical" but actually there is a random small noise added that changes the value of some pixels. So you really got to know precisely what is the criterion of a match. Maybe it was pretty clear in your mind when you asked the question but it can be confusing for another person.
So, now a comment about keypoint-descriptors. By themselves, they have no knowledge of their global positioning on the image, I mean that the first keypoint do not take into account that there is a second keypoint a couple of pixel away when you do the matching. So as you may have realized, by matching the keypoint with a simple score metric, you are actually counting how much of the keypoint have a correct match, not if the matched keypoint is correctly positioned in relation to the others. This mean that if you have the same image but it is rotated, a correct match will arise (which is generally the behaviour you want with these detectors). So, as you have realized they are not the best choice for your situation.
Now, you said that a pixel by pixel comparison is too long. But what about looking only at every 2, or 3 pixels? What is the chance that, using a regular "grid" comparison pattern, that the image will only vary in the pixels that are not looked at? Again, it depends on what is your "identical" requirement; if a single pixel variation between the two images is a "no go", you must check everyone of them.
It makes me think that, depending of the meaning of your "identical", you could still use a keypoint detector. Think about it: you compute the keypoints (not the descriptors) of both the model and the query images. You will have the knowledge of the location of every keypoint detected. So you might simply compare the x-y coordinates of the keypoints, and if like 99% (or whatever percentage fits your needs) of the match, then you may affirm that it is the same image.
The bottom line : There seems to be a couple of solutions for your problem. It only depends on HOW you define it. And this is often the case in problem solving (computer vision, engineering, etc.): You must correctly constrain and define your problem.
Hope it will help someone! :)