Vision
Computer Vision and Computational Photography - CIS 581
These are some of the projects I implemented as part of a Computer Vision Course at the University of Pennsylvania in Fall 2016 taught by Professor Jianbo Shi. All projects were implemented in MATLAB. For more details about the course, see the Course Page.
Panorama
Panorama, also known as image stitching or mosaicing, is a digital imaging process that combines overlapping images. By determining the homographies between the overlaps, the images can be transformed and stitched together to yield a single image with a larger perspective. I implemented an algorithm for panorama following the process delineated by Brown, Szeliski, and Winder in "Multi-image Matching using Multi-scale image patches."
To implement the panorama algorithm, I implemented algorithms for ANMS (Adaptive Non-maximal Suppression), feature extraction, feature matching, RANSAC (RANdom SAmpling and Consensus), and inverse warping. I used MATLAB's Harris corner detector to determine the initial set of corner points and MATLAB's kd-tree implementation to find the nearest neighbors for feature matching.
Content-aware Seam Carving
Content-aware seam carving is used to reduce image size or achieve a target aspect ratio while maintaining the integrity of important image information and maintaining minimal to no distortion. It is useful in applications where cropping is not possible because the subject of the image is too close to the edge. It is also useful for removing unnecessary voids to give more focus to the interesting parts of the image. I implemented the algorithm for minimum energy seam carving in a two person team following a similar process to the one described by Avidan and Shamir in "Seam Carving for Content-Aware Image Resizing."
This algorithm utilizes dynamic programming to calculate the "minimum energy seam," which can be any arbitrary path consisting of only adjacent or diagonal pixels along either the vertical or horizontal dimension. Repeated removals of the minimum energy seam along the desired dimension yield the final image.
Gradient Domain Blending
Gradient domain blending is a method to automatically merge two different images. It is useful for seamlessly inserting objects from one image into another. Unlike traditional insertion methods, this tool requires only a rough outline of the image to insert and the location to insert the image, making the total process take seconds. Additionally, due to the blending process, edges remain realistic looking, minimizing the "photoshopped" look prevalent in many images. I implemented the algorithm for gradient domain blending in a two person team following the process delineated by Perez, Gangnet, and Blake in “Poisson Image Editing."
Sources
Purple Petal Flowers
Grass
Water Flower
Hummingbird
Earth
Sky