computational photography & computer vision
Neural Style Transfer
Implemented a style transfer algorithm that takes a style image and content image as inputs, and uses a deep convolutional neural network (VGG-19) to output the content image with the artistic style of the style image. Used images at each convolutional layer of the features module, normalized image tensors, and computed content and style loss. Performed content reconstruction using convolutional layers of the VGG network and performed style reconstruction using correlations between different features in CNN layers.
click for implementation details
Facial Keypoint Detection
Created convolutional neural networks to automatically detect facial keypoints, using Pytorch as the deep learning framework. First implemented and trained a 3-layer convolutional neural network for nose tip detection, next implemented and trained a 5-layer convolutional neural network for full facial keypoint detection (58 points), and finally trained a ResNet18 on a larger dataset of 6666 images to find 68 facial keypoints. Performed data augmentation to prevent overfitting.
click for implementation details
Face Morphing & Mean Face of a Population
For morphing: Defined corresponding facial features using dlibs facial landmark detector, triangulated the 68 points using Delaunay triangulation and performed 45 inverse affine warps to warp one triangle to another using interpolation. Stitched the 45 midway faces into gifs.
For the mean face of a population: used the Danes dataset and found the average shape of each image and performed inverse warping on triangularized images with the average shape.
click for implementation details
Image Warping & Mosaicing
Performed image mosaicing by taking at least 2 photographs, registering, projective warping, resampling, and compositing them. Computed homographies and used them to warp images. Used corner detection and feature matching, and finally used RANSAC (RANdom SAMple Consensus) to compute the optimal homography to perform automatic image stitching.
click for implementation details
Colorizing the Prokudin-Gorskii Photo Collection
Produced color images from grayscale Prokudin-Gorskii glass plate images by dividing the glass plate images into R, G, and B color channels. Aligned the channels by finding the optimal displacements between each channel with the least sum of squared distances, and stacked each channel to produce a color image. Optimized performance using an image pyramid: sequentially calculated displacements over multiple scaled images, starting from the coarsest image to the actual image size, and aligned the images using pixel displacements scaled to the appropriate factor relating the downsampled image to the actual resolution.
click for implementation details
computer graphics
Rasterizer
Implemented a vector graphics renderer for SVG files. Performed triangle rasterization, antialiasing by supersampling, transforms using homogeneous coordinates, barycentric interpolation to fill triangles, and various methods of texture mapping using pixel sampling (nearest neighbor and bilinear interpolation) and level sampling (nearest neighbor and bilinear level sampling using mipmapping).
click for implementation details
Mesh Editor
Developed a mesh editor using several geometric modeling concepts. Built Bezier curves and Bezier surfaces using de Casteljaus algorithm, manipulated triangle meshes using a half-edge data structure, and implemented loop subdivision for upsampling.
click for implementation details
Path Tracer
Implemented path tracing algorithms to render images with realistic physical lighting. Generated camera rays and computed their scene intersections, implemented BVH (bounding volume hierarchy) to represent scene primitives and accelerate rendering, and simulated light transport for direct illumination and global illumination.
click for implementation details