I used a variation on the algorithm proposed by Brown, et al.. Given two images, which are assumed to overlap, the first step is to detect feature points. Once points are detected, I used the Adaptive Non-maximal suppression algorithm outlined in the paper to reduce the number of feature points to the strongest 400 points. I then match these feature points between the two images using a nearest neighbor approach. These matches are further filtered by taking the ratio of the distance between the first and second nearest neighbors and threshholding this value by the mean distance over 4 (this value was found through trial and error).
Once the features are selected and matched, a homography is recovered by robustly solving a series of equations using an iteratively rewegihted least squares algorithm. A homography is a type of image warp, also known as a planar projection. Bellow is an example of using a homography to warp the image as though it were taken facing either side of the CIT head on:
![]() | ![]() | ![]() |
The results were pretty good when a suficient number of matching features were found. The results shown bellow were composited by averaging the two images in the overlap region. These could be greatly improved using some of the blending techniques we have used before, such as graphcut and poisson blends, but I was not able to incorperate these due to time constraints. Another improvement would be equalize the colors in the imaghes using the differences of the colors around each feature point.
![]() | This allignment is not perfect, as can be seen by the ghosting around the wire. This could easily be hidden by a better compositing method. |
![]() | This allignment is very good. However, the tone of the sky is slightly different, which could be fixed by equalizing the colors in each image. |
![]() | This is a picture I took on a trip in Alaska. This is an interesting result since a homography is not sufficient for a perfect allignment, since the picture was taken from two different view points. The result is actually quite good considering, as the two ridge lines and the left seem allign perfectly. However, the rock on the right side appears in very different places in the two images. |
![]() | Another case where the allignment is quite good, but a better compositing method is needed to account for the difference in image content. |
![]() | The allignment in this result is very good in the upper half, but is off by quite a bit in the lower half. This is most likely due to the moving person from the temporal difference in the two images. |
![]() | A fairly simple case, but a very good allignment. |