Zimu Wang Personal website ↗

UC Berkeley · CS 180 · Fall 2025

Computer vision & computational photography

Six course projects spanning camera geometry, image alignment, multiscale processing, automatic mosaics, neural radiance fields, and image generation. The examples below come from my retained project notebooks, images, and reports.

Project 00 / Camera geometry

Perspective & dolly zoom

I photographed close and distant views to study how camera position and focal length change apparent perspective, then assembled a dolly-zoom sequence.

  • Compared facial distortion and architectural perspective across shooting distances.
  • Kept a subject roughly fixed in frame while changing camera distance and zoom.
Animated dolly zoom from the camera geometry project
Dolly-zoom sequence from Project 0.

Project 01 / Image alignment

Colorizing glass-plate images

I aligned three vertically stacked monochrome exposures into one color image.

  • Built a coarse-to-fine image pyramid and used Sobel edge maps for alignment.
  • Searched channel shifts with normalized correlation, then cropped border artifacts.
Colorized historic cathedral scene after aligning three image channels
Aligned RGB reconstruction from the notebook output.

Project 02 / Spatial and frequency domains

Filters, hybrid images & blending

I implemented convolution and several multiscale image-processing techniques to test how structure changes across spatial frequencies.

  • Compared a from-scratch convolution with SciPy and explored finite differences, derivative-of-Gaussian filters, and sharpening.
  • Built hybrid images, Gaussian and Laplacian stacks, and multiresolution blends.
A hybrid cat image made by combining low and high spatial frequencies
One hybrid-image result; its appearance changes with viewing distance.

Project 03 / Registration

Manual & automatic photo mosaics

I first stitched photographs with manually selected correspondences, then automated the correspondence-finding stage.

  • Estimated homographies and warped images into a shared canvas.
  • Used Harris corners, adaptive non-maximal suppression, normalized patch descriptors, ratio-test matching, and RANSAC.
  • Compared automatic mosaics with manual-point results on three image pairs.
Automatic and manual panorama results shown side by side
Automatic result at left, manual correspondences at right. The visible distortions show where alignment and blending still need work.

Project 04 / Neural rendering

NeRF from real photographs

I trained a PyTorch neural radiance field on a small model car, using photos rather than only the provided synthetic scene.

  • Calibrated the camera, estimated poses from ArUco markers with solvePnP, and prepared 45 usable views: 36 for training and nine held out.
  • Implemented rays, positional encoding, point sampling, a radiance-field MLP, and volume rendering.
  • Tracked held-out PSNR and rendered a novel camera path. The real-scene reconstruction remained visibly rougher than the synthetic result.
Novel camera path rendered by the NeRF model around a small model car
Rendered camera path from the real-scene model.
A reconstructed view of the model car with an ArUco marker visible
A single reconstructed view.

Project 05 / Generative models

Denoising & flow matching

I implemented and trained PyTorch UNets for image denoising and time- and class-conditioned flow matching on MNIST.

  • Inspected training curves, denoising at noise levels outside training, and generated samples.
  • Used a pretrained diffusion model in a separate notebook for iterative denoising and image-editing experiments.
Grid of MNIST digits sampled from a class-conditioned flow model
Class-conditioned samples from the saved notebook output.
Denoising output at several noise levels
Out-of-distribution denoising inspection.