The most amazing thing about the multiresolution image query is how simple it is. Here's an overview of how it works.
Using an metric devised by Finkelstein, et al., wavelet signatures can be compared. Basically, the algorithm is this: The more signature matches between two images, the closer the score of the two images.
To construct the image database, a bunch of images are preprocessed using the wavelet signature algorithm described above and saved. Currently, this is implemented as a data structure containing all of the ImageMetaData elements (a container holding image location, MIME type, size, and SHA hash) and a collection of SearchArrays, which are 128x128 2D arrays of lists. There is one list for each (x,y) position that a coeffient is possible at. There are 6 SearchArrays, one for each possible sign (+1 or -1) and color channel (Y, I, or Q).
When the user wants to look up an image in the database, he specifies the query image (this is often done with a sketch; my system is non-interactive, so the user points to a URL of an image to use as a query). The query image is processed using the wavelet signature algorithm and then compared to all the other signatures in the database using the scoring metric. The lowest scores are the images that are the best matches for the query image and are returned.
The authors of Fast Multiresolution Query have an image that explains this process much better than I could ever do on their webpage
Eikon is implemented in Java 1.4 (the current beta version). It uses the new ImageIO classes that Java 1.4 provides for converting real image formats into a Java BufferedImage object. That's the only 1.4 feature used.
The image database is stored in an object called ImageMetaDataCollection. This object is serialized and written to a file between Eikon sessions to provide for persistence. Perhaps an RDBMS solution would have been more stable, but serializing the object was much faster to implement, and more realistic for an end-user application (but not, of course, for a server-based application!).
Here is what a typical run of Eikon is like:
Sort of! In my tests, Eikon consistently returns differently sized versions of the same image as close matches. So, for example, the thumbnail of an image can be used as a very accurate search template for the larger version. This works quite well.
I've also had some success in getting different versions of the same picture to match each other. For example, using one Mona Lisa image to find others.
It is harder to tell if finding images which are similar to each other, but not directly related, will work well. The image database is so small right now (approximately 400 images) that many of the matches aren't very meaningful.
In conclusion, remember that this is a demo. It has not been tuned, tweaked, or extensively tested. However, it is a strong foundation upon which to build a real application. With a good amount of work, I think it could become a truly useful application.