15-869, Image-Based Modeling and Rendering
Assignment 1: Image Mosaicing

Nathan Bingham

For the mosaic, I used the HP digital camera from class to take pictures of the courtyard in front of Morewood Gardens. These are the two original pictures with their eventual registration points highlighted. For a better view, you can click on them to see an enlarged picture. The originals that I used to make the mosaic are TIFF images at a size of about 800x600.

The program takes the name of two images as command-line input and opens them in separate windows. In order to register the two images, the user must type 'i' (to enter 'i'nput mode) and then the point number that he or she wishes to select. By this, I mean that if the user hits '1', then points selected in the two pictures will be designated as the "first" point and thus will be correlated when the mosaic is calculated. Unless input mode is turned off (by pressing 'i' once again), any mouse click will be taken to be a registration point, thus overwriting previous points. There are helpful little output messages that let you know which point is being selected and when input mode is turned on or off (so the user doesn't get lost...)

After the user has indicated all of points 1 to 4 in both images (this is important as the program is not idiot proof at this point), the user pushes 'c' to 'c'alculate the projection. The projection is calculated in the plane of the first image and thus the second image is warped. Then, a file "output.tif" is created with the composited image. It merely averages the pixel values of the two input images if a pixel in the output image maps to pixels in both of them, and this is what causes the noticeable artifacts. Additionally, as you can see from the originals above, the input image on the right is darker than the one on the left (environmental conditions??), which also contributed to the banding effect.

Here is the example mosaic that I created. Again, click on it for a larger view.

The only problems I encountered during this assignment were time-related, and the great extent of that was figuring out how to get Linux set up and working properly for the assignment (being an extreme Linux-newbie, it was a somewhat humbling experience). This also resulted in the incredibly pedestrian interface and utter lack of "cool extras" that I implemented (hopefully to be rectified in later assignments... stay tuned!).