SIFT Flow for Image Alignment
Download the whole package (including MATLAB & C++ code and image files)
SIFT flow can be used to align images of very different texture and appearances. One example is to align two Mars images below. These two images look similar, but it's difficult to align them because of the change of local image difference and global distortions. But SIFT flow is able to align the two images well and to discover the cease that splits the land.
![]() |
![]() |
(a) Image 1 |
(b) Image 2 |
![]() |
![]() |
(c) Flipping image 1 and warped image 2 |
(d) Estimated flow field where you can clearly see a cease |
We then moved to the earth. We cropped two satellite pictures of MIT from Google Map and Microsoft Virtual Earth, respectively, and we applied SIFT flow to align these two images. Even though the two pictures were taken at different seaons and different time of a day (check the difference of the trees and shadows), our algorithm successfully uncovered the underneath geometric transform.
![]() |
![]() |
(a) Image 1 (from Microsoft Virtual Earth) |
(b) Image 2 (from Google Map) |
![]() |
![]() |
(c) Flipping image 1 and warped image 2 |
(d) Estimated flow field |
We also tested SIFT flow on some challenging examples from http://www.vision.cs.rpi.edu/gdbicp/dataset/. Notice that SIFT flow is NOT specially designed for the senario considered in their work, e.g. little overlap, rigid geometric transform. But our algorithm does a pretty good job. The same parameter setting is used for generating the following results. SIFT flow failed to uncover the right transform for the bottom two examples because the two input images are too different with little overlap.
(a) Image 1 |
(b) Image 2 |
(c) Flipping betwee image 1 and warped image 2 |
(d) Flow field (hue indicates orientation and saturation indicates magnitude) |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
(a) Image 1 |
(b) Image 2 |
(c) Flipping betwee image 1 and warped image 2 |
(d) sFlow field (hue indicates orientation and saturation indicates magnitude) |