Yingchuan Hu (yh537), Hang Chu (hc772)

CS 4670/5670 Introduction to Computer Vision

Nov. 3rd, 2013

Project 3: Autostich

I. Test 1 Panorama

This is the panorama with exposure compensation:

Full Version jpg

View in krpano

This is the panorama without exposure compensation:

Full Version jpg

View in krpano

II. Hand-held Panorama

Full Version jpg

View in krpano

III. Homography

This is the panorama using homography transformation without spherical warping, the panorama exceeds boundary with more than 3 input images.

Full Version jpg

IV. Discussions

On the whole, the system works quite well. Our exposure compensation is not perfect but we think its result is still better than the previous one. Some edge pixels might be influenced very slightly by sub-pixel blending as we use 4 pixels for interpolation.

V. Extra Credits

Blend images with sub-pixel localization

We take advantage of the PixelLerp function defined in image.inl to do sub-pixel image blending. When we do accumulate blending, we map one integer position in accumulator to a floating point position in img. Based on that floating point position, we calculate the value in a bilinear interpolation way. Note that as PixelLerp may influence the edge of the image because it needs a 2x2 box to do that interpolation, a little bit black line may appear near the edges of the overlapping region, which is not observed when no sub-pixel image blending is done.

Reduce exposure differences

When doing AccumulateBlend, instead of adding the pixel value(after feathering) to acc, we multiply the whole image to be added by a scale factor. The scale factor is calculated by averaging the scaling of luminance in the overlapping region of the accumulator and the img to be added. As we have a color image, so we first transform the RGB values to YUV values, and Y stands for the luminance of that pixel, which is exactly what we want. In this way, the exposure differences between images are greatly reduced, but it's also not perfect to use the average. We tried the block-based exposure compensation in the paper, but it turned out to be a little bit blocky as we used a scaling transfer function instead of a quadratic transfer function.