There is no universal solution, there are a few algorithms like SURF [1], SIFT [2], Winsurf [3], dhash (the one presented here), ahash [4], phash [5] each concentrating on a particular feature of the image and has it's strong points and weak points.
Many of the steps are similar to ideas used in the scale-invariant feature transform [1]. See also the original paper [2] and an early use for automatic image stitching [3].
Comments
I feel like this is doing something that was already done better (probably), but I enjoyed the article anyways. Nicely summarized what, why, and how.
Any idea of what might be a better approach?
There is no universal solution, there are a few algorithms like SURF [1], SIFT [2], Winsurf [3], dhash (the one presented here), ahash [4], phash [5] each concentrating on a particular feature of the image and has it's strong points and weak points.
[1] http://en.wikipedia.org/wiki/Scale-invariant_feature_transfo...
[2] http://en.wikipedia.org/wiki/SURF
[3] http://www-db.deis.unibo.it/research/papers/IWOSS99.ABP.pdf
[4] http://www.hackerfactor.com/blog/index.php?/archives/529-Kin...
[5] http://www.hackerfactor.com/blog/index.php?/archives/529-Kin...
Many of the steps are similar to ideas used in the scale-invariant feature transform [1]. See also the original paper [2] and an early use for automatic image stitching [3].
[1] http://en.wikipedia.org/wiki/Scale-invariant_feature_transfo...
[2] http://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf
[3] http://www.cs.bath.ac.uk/brown/papers/ijcv2007.pdf
A comment in the article mentions libpuzzle[1], which looks interesting. A Python binding also exists: PyPuzzle[2].
[1] http://www.pureftpd.org/project/libpuzzle
[2] https://github.com/ArchangelSDY/PyPuzzle
Googling "perceptual hash" yields http://www.phash.org/