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
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
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
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
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
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
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
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
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
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.