COMP_SCI 331: Introduction to Computational Photography

Quarter Offered

Winter : 12:30-1:50 MW ; Cossairt


Prerequisites: 150 or 211 or 230 or permission from Prof. Willomitzer. Students should have experience with Python programming and Jupyter Notebook. Basic knowledge about Image Processing and Optics is helpful, but not a prerequisite (students will learn that during the course).


This course teaches the fundamentals of modern camera architectures and computational imaging systems. It gives students a hands-on experience in characterizing, manipulating and acquiring data captured on modern camera platforms. For example, students will learn how to estimate scene depth from a sequence of captured images or program their own high dynamic range imaging algorithm.

This course is part of  a two-part series that explores the emerging new field of Computational Photography. Computational photography combines ideas in computer vision, computer graphics, technical optics, and image processing. This course will first cover the fundamentals of image sensing and modern cameras. We will then use this as a basis to explore recent topics in computational photography such as motion/defocus deblurring cameras, light field cameras, and computational illumination.

This course will consist of six homework assignments implemented in Python using the Jupyter Notebook framework. There will be no midterm or final exam. Enrollment is limited to 40 students.

  • This course fulfills the Interfaces Breadth & Project Course requirement.

COURSE COORDINATOR: Prof. Oliver Cossairt

COURSE INSTRUCTOR: Prof. Oliver Cossairt


Homework assignments will consist of implementing several computational photography algorithms in Python using the Jupyter Notebook framework. Homeworks are each graded Pass/Fail. Each homework consists of a coding and a technical writeup. Your coding must be correct, and your writeup must be clearly written (template will be provided) in order to receive a passing grade. For each assignment that you fail, your grade gets lowered by one letter. So if you pass all seven assignments you get an A, if you fail one assignment you get a B, if you fail two you get a C, and so on. You can resubmit up to three homework assignments that you received a failing grade for.

Course website from Fall 2020: