Image Mosaics
For Assignment 2, you will implement an image stitcher that uses image warping and homographies to automatically create an image mosaic. We will focus on the case where we have two input images that should form the mosaic, where we warp one image into the plane of the second image and display the combined views. This problem will give some practice manipulating homogeneous coordinates, computing homography matrices, and performing image warps. For simplicity, we’ll specify corresponding pairs of points manually using mouse clicks. Note: There are some built-‐in Matlab functions that could do much of the work for this project. However, to get practice with the workings of the algorithms, we want you to write your own code. Specifically, you may not use any of these functions in your implementation: cp2tform, imtransform, tformarray, tformfwd, tforminv, maketform. Provided files: Two image files that can be used for the mosaic. What You Have to Do Task 1 (15 points) Getting correspondences: Write code to get manually identified corresponding points from two views. Look at Matlab’s ginput function for an easy way to collect mouse click positions. The results will be sensitive to the accuracy of the corresponding points; when providing clicks, choose distinctive points in the image that appear in both views. Task 2 (20 points) Computing the homography parameters: Write a function that takes a set of corresponding image points and computes the associated 3 x 3 homography matrix H. This matrix transforms any point pi in one view to its corresponding homogeneous coordinates in the second view, pi’, such that λ* pi = H * pi’ Note that pi and pi’ are both vectors with 3 elements. The function should take a list of pairs of corresponding points (what is the minimum number of points you need?) from the two views, where each point is specified with its 2d image coordinates. Useful Matlab functions: ‘\’ operator (help mldivide), reshape
Verify that the homography matrix your function computes is correct by mapping the clicked image points from one view to the other, and displaying them on top of each respective image. Be sure to handle homogenous and non-‐homogenous coordinates correctly. Task 3 (20 points) Warping between image planes: Write a function that can take the recovered homography matrix and an image, and return a new image that is the warp of the input image using H . Since the transformed coordinates will typically be sub-‐pixel values, you will need to sample the pixel values from nearby pixels. Feel free to use the sampleBilinear.m you developed for the first assignment. For color images, warp each RGB channel separately and then stack together to form the output. To avoid holes in the output, use inverse warp rather than direct mapping. To compute the bounding box of the destination image, you will need to warp the points from the source image into the reference frame of the destination. Then sample all points in that destination bounding box from the proper coordinates in the source image. Note that transforming all the points will generate an image of a different shape / dimensions than the original input. It is ok to have some areas of the new image be black (0). Useful Matlab functions: round, interp2, meshgrid, isnan. Task 4 (20 points) Create the output mosaic: Once we have the source image warped into the destination image’s frame of reference, we can create a merged image showing the mosaic. Create a new image large enough to hold both (registered) views; overlay one view onto the other, simply leaving it black wherever no data is available. Don’t worry about artifacts that result at the boundaries. You are free to use a method/convention of your own choosing for the overlap areas. Task 5 (25 points) After writing and debugging your system: 1. [5 pts] Apply your system to the provided pair of images, and display the output mosaic. 2. [10 pts] Show two additional examples of mosaics you created using images that you have taken. You can make a mosaic from two or more images of a broad scene that requires a wide angle view to see well. Or, make a mosaic using two images from the same room where the same person appears in both. 3. [10 pts] Warp one image into a “frame” region in the second image. To do this, let the points from the one view be the corners of the image you want to insert in the frame, and the let the corresponding points in the second view be the clicked points
of the frame (rectangle) into which the first image should be warped. Use this idea to replace one surface in an image with an image of something else. For example -‐-‐ overwrite a billboard with a picture of your dog, or project a drawing from one image onto the street in another image, or replace a portrait on the wall with someone else’s face, or paste a Powerpoint slide onto a movie screen, … For all examples, play around a bit with the choice of points for the correspondence pairs until you get a reasonable alignment. [OPTIONAL] Extra credit Implement RANSAC for robustly estimating the homography matrix from noisy correspondences. Your function should be able to handle more than 4 point correspondences. Show with an example where it successfully gives good results even when there are outlier (bad) correspondences given as input. Compare the robust output to the original (non-‐RANSAC, only 4 point correspondences) implementation where all correspondences are used. Note: feel free to attempt using David Lowe’s SIFT Matlab demo (http://www.cs.ubc.ca/~lowe/keypoints/siftDemoV4.zip). Warning: it only works in Linux and Windows, it does not work on Mac. The result of calling the sift.m function will be 2 vectors, one of features and one of keypoints. Make sure you understand what is saved in these two variables so that you can potentially use them for the RANSAC implementation. If you can’t get SIFT to work, you will need to select make more than 4 pairs of points using the functions deeloped in task 1.