Καλησπέρα..Δεν έχω δει το SURF και δεν ξέρω τί δυνατότητες προσφέρει αλλά αν δεν έχει κάτι έτοιμο, τότε θες κάποια δουλειά για να κάνεις αυτό που θες! Μια λύση θα μπορούσε να είναι η ακόλουθη (όχι η βέλτιση αλλά εύκολα υλοποιήσιμη):
Οι εικόνα που είναι rotated εξακολουθεί προφανώς να είναι ορθογώνια. Γύρω γύρω από την πραγματική εικόνα (για να γεμίσει το ορθογώνιο) θα είναι filled με κάποιο χρώμα (μαύρο λογικά..?). Θα μπορούσες να την κάνεις rotate μοίρα μοίρα μέχρι να ισιώσει και μετά απλά να συγκρίνεις τις 2 φωτογραφίες pixel-pixel. Για να ελεγξεις αν ίσιωσε μετά απο κάθε rotate μπορείς να κανεις το εξής:
Βρες το πρώτο (πάνω αριστερά pixel) που είναι non-black (ή ότι έχει γύρω γύρω) και κοίτα για όλη την σειρά στην οποία βρίσκεται αν τα pixel είναι και αυτά non-black και αν τα pixel όλης της παραπάνω σειράς είναι black. Τότε θα ξέρεις ότι ευθυγραμμίστηκες. Προφανώς εδώ υπάρχει θέμα αν τα pixel της 1ης σειράς της εικόνας είναι μαύρα (ιδιαίτερα το πρώτο) αλλά μπορείς να πάρεις στατιστικά αν ισχυεί αυτό που σου είπα για κάποιο μεγάλο ποσοστό (ιδιαίτερα σε ενδιαφέρουν οι άκρες). Και θέλει και κάποια προσοχή προς τα ποιά μεριά κάνεις rotate κλπ..
Όχι ο πιο γρήγορος τρόπος όπως σου είπα αλλά υλοποιείται σχετικά εύκολα... Αν δεις ότι σε καθυστερεί ή Bitmap.GetPixel() μπορείς να παίξεις με unsafe και pointers για να προχωρήσεις μέσα στην εικόνα. Μπορείς να δεις αυτό το post στο blog μου για το πώς να το κάνεις: http://www.studentguru.gr/blogs/jupiter/archive/2009/12/20/creating-an-image-processing-library-with-c-part-2.aspx