15-463 Project 5

Nat Storer

Panorama Stitching

Harris Corner Detector: All 9000+ corners

 

500 Strongest corners

 

Adaptive Non-Maximal Suppression in action (with a ridiculous radius to prove that it works)

 

Suppressed corners (same ridiculous radius)

 

Suppressed corners with a much more sensible radius

 

 

Sample corner set after RANSAC, and the resulting panorama

 

More Results

Colorado

Manual

 

 

Automatic

 

Source images

 

Gesling Stadium

Manual

 

 

Automatic

 

Source Images

 

Home Battlestation

 

Manual

 

Automatic: Failure!!!

In this run, the curve of my jacket and the body of my acoustic were seen as the same feature point, since they are very similar and the jacket curve doesn't appear in the left image.

RANSAC didn't eliminate this error; since the points are on opposite sides of the image, any homography which did not include the points caused a massive skew in the error, making the bad match the "best" selection.

Source Images

Work Battlestation

Manual

 

Automatic

 

Source Images

 

Bells and Whistles

Billboard projection

 

 

Hands-on Image Blending and Auto-cropping


Instead of using MATLAB's built-in functions, I tried to implement my own blending function for greater control. I aimed to create a mask which I could multiply by each image to get my blended result.

First, I converted to greyscale and took the logical XOR of the two images when placed on the blending canvas.

It was safe to multiply both images by this mask, as there is no overlap, and it represents areas of full intensity for each image.

Since I am cropping to the un-warped image, the right bound was simply its right border. The left border is a little more tricky. I didn't want any rough edges, so I solved for the leftmost edge intersection between the two images, and made the area inbetween full left, as shown below.

Next, I used MATLAB's color map function to generate a small swatch of gray gradient, which I then scaled and rotated to the appropriate direction.

If I add that gradient to two copies of the mask in opposing direcitons, one for each image, I get a mask for each image.

This method ensures that the sum of the masks (in the areas where both images have data) will always be one, so they are weighted appropriately and there will be no strange edge brightness variations.

I can now do an element-wise multiplication of each image by the appropriate mask, and add the two images together to get my final mask.

 

Once the images are weighted appropriately and placed on the final canvas, the image is cropped to eliminate strange errors.

The top of the image is set to the maximum y value of the upper right coordinates of the two images.

The bottom of the image is set to the minimum y value of the lower right coordinates of the two images.

The right of the image is set to the minimum x value of the top right and bottom right coordinates of the image on the right, and the left is set to 0 since the left image is unwarped.

As stated before, the left and right boundaries for the blending are set by the end of the first image, and the intersection point between the two to eliminate weird ghosting effects.

 

Graffiti