The Best Classes I took at UC Berkeley

I attended UC Berkeley from 2015-2019, majoring in Computer Science. This is a list of my favorite classes I took as an undergraduate. Astronomy C10 (Fall 2015) - Introduction to General Astronomy It’s hard to articulate just how amazing this course is and how much it means to me. Ever since I can remember, I’ve always had a general interest in...
Read more

My CS184 Computer Graphics Portfolio

This is a collection of links to my project reports created for CS184: Computer Graphics that I took in Spring 2019 at UC Berkeley. Rasterizer I implemented rasterization and other features for a simple vector graphics renderer. At a high-level, the program converts an image described in a vector format (in this case, points, lines, and triang...
Read more

WebGL N-body Galaxy Formation Simulation

Note: This is a modified version of my final project report for CS184: Computer Graphics at UC Berkeley in Spring 2019, developed by me and two other collaborators. Live Demo | Source Code | Project Video Abstract Cosmological simulations are important tools in astronomy for modeling how complex structures form. However, most ...
Read more

Seam Carving

This post details my implementation of Seam Carving for Content-Aware Image Resizing in Python. Introduction Seam carving is an algorithm for content-aware image resizing. It works by finding a number of seams, or paths of least importance, in an image and automatically removing them to reduce image dimensions or inserting them to extend the i...
Read more

Automatic Panorama Stiching

This post explores automatic panorama construction in Python using OpenCV. Specifically, we explore how to use feature descriptors and keypoint matching to recover homographies between images, then warp and blend them into a mosaic. Note: This was originally done as part of a project for CS194-26, a course on computational photography at UC Ber...
Read more

Face Morphing

This post explores face morphing in Python using OpenCV and Dlib. I walk through the process of creating face-movie, a tool I made to automatically create a morph video from a given set of images. It can be used, for example, to create a music video showing someone’s face change over the years. Along the way, we also explore computing an averag...
Read more

Gradient Domain Fusion

This post explores an interesting application of gradient-domain processing known as Poisson blending. The goal is to seamlessly blend an object or texture from a source image into a target image. The simplest method would be to just copy and paste the pixels from one image directly into the other, but this would result in obvious seams. One app...
Read more

Multiresolution Blending and Hybrid Images

This post explores a few applications of image processing in the frequency domain, including image sharpening and the synthesis of hybrid images. We also use Gaussian and Laplacian stacks to perform multiresolution blending, which is the process of computing a gentle seam between two images at each band of image frequencies. Note: This was orig...
Read more

High-Resolution Neural Style Transfer without a GPU

This is a quick post about how I used Justin Johnson’s neural-style implementation in torch to make a script for generating high-resolution output images without the need of a GPU in a reasonable amount of time. Background Neural style transfer is the technique used to take a style reference image, such as a painting, and an input image to be ...
Read more

Colorizing the Prokudin-Gorskii photo collection

This post presents a fast and automated process for taking glass negative scans and bringing them to life with modern image processing techniques. Specifcally, we’ll look at image alignment, white balance, and illumination correction. Note: This was originally done as a project for CS194-26, a course on computational photography at UC Berkeley....
Read more

© Andrew Campbell. All Rights Reserved.