1. A non-transitory program storage device, readable by a processor and comprising instructions stored thereon to cause the processor to: receive an image; determine an orientation for the received image based, at least in part, on one or more identified features in the received image; identify an alignment of the one or more identified features in the received image; determine an offset between a known typical alignment and the identified alignment for each of the one or more identified features at the determined orientation; rotate the received image based, at least in part, on the determined offset to generate a straightened image; and save the straightened image in a memory.