I'd like to run a 'fuzzy hash' (a.k.a. 'fingerprint') algorithm over the images in our web archives, so that I can detect simlar images across many millions of files. We already do this for text, using ssdeep, which has the distinct advantage of producing a plain text string that will be similar for similar texts. This is important because it means I can just index the text in Solr and use the built in support for n-grams or fuzzy searches to find related texts.
For images, I should clarify the kind of image similarity I mean. I'm interested in hearing about any work done in this area, but I'm particularly interesting in trying to find very closely related images that may have been derived from one another. For example, rescaled images, cropped images, or via minor edits/modifications.
I'm aware of some image similarity and detection methods, but they don't always work in this way, and sometimes they hide the fingerprint and it's not clear how to get to it.
For example, matchbox looks great, but as far as I can tell, and pure SIFT-based feature comparison of that ilk means that each query feature set has to be compared with each feature set from each other image, one by one. i.e. the query time scales such that a single query on two thousand images takes a thousand times longer than comparing against two images (i.e. O(N)), and therefore any attempt to cluster similar images take much longer (i.e. O(N^2)).
Many fingerprint systems (like pHash, imgSeek, WindSurf, libpuzzle, ImageTerrier or LIRE) exist, but it's difficult to tell exactly how they work and whether they can be integrated with Solr in this way.
So, before spending a large amount of time attempting to reverse engineer what those packages are up to, I'd like to know if anyone out there has had any luck deploying image similarity algorithms over hundreds of millions of images. Are there other image fingerprinting systems I should look at?