First lets make some order with terminology:
Registration process is not always performed between 2 images. It can be image to set of points, or image to set of polygons, or set of points to set of points, and so on.
It is not limited to just perspective transformation. It can be simple shift, or rigid transformation, or similarity transformation, or affine transformation, or ellastic transformation, and so on and so forth. They may have some restrictions. Amount of possible transformation is countless.
One of most popular approaches for registration (but not the only one!) is extraction of points of interest from both images and then finding transformation that creates good match between them.
There countless ways to extract those points, countless ways to find good match, and even countless ways to define what is the good match. Purpose of findHomography function you mentioned is to find good perspective transformation between two sets of points. Are you sure that is what you need?
If you are talking about superimposition of images, you will also need function to transform one of the images, and another one to stitch the results.
OpenCV has very rich repository of algorithms to help you in all those stages:
You can use matchTemplate() to find good shift between images.
You can use FAST, ORB, MSER, FREAK to find points of interest and their descriptors.
You can use this for stitching, or this for image transformation.
Those are just a small part of functions that might help you. Whole list will be just too long. If this is the first time you are dealing with registration I recommend you to check books about the issue first, and to decide how you want to solve your problem. Without that it will be impossible to choose right tools from OpenCV.