Finding similar pictures in a database I have large database of pictures, about a few million.

I need an algorithm to find pictures which are similar to those in the database, up to a scale factor or a crop and shift (I have only these types of variations).

I know about histogram matching and perceptual hash, but is there a faster algorithm that exist for these purposes?
For this you can use local features like SIFT, SURF, FREAK, etc.