CS 448A - Computational photography

A cutaway view showing some of the optical and electronic components in the Canon 5D, a modern single lens reflex (SLR) camera. In the first part of this course, we'll take a trip down the capture and image processing pipelines of a typical digital camera. This is the Stanford Frankencamera, an experimental open-source camera we are building in our laboratory. It's bigger, heavier, and uglier than the Canon camera, but it runs Linux, and its metering, focusing, demosaicing, denoising, white balancing, and other post-processing algorithms are programmable. We'll eventually be distributing this camera to researchers worldwide. This is the Nokia N900, the first in a new generation of Linux-based cell phones. It has a 5-megapixel camera and a focusable Carl Zeiss lens. More importantly, it runs the same software as our Frankencamera, so it's programmable right down to its autofocusing algorithm. Each student taking this course for credit will be loaned an N900. In the second part of the course, we'll consider problems in photography and how they can be solved computationally. One such problem is misfocus. By inserting a microlens array into a camera, one can record light fields. This permits a snapshot to be refocused after capture. Most digital cameras capture movies as well as stills, but handshake is a big problem, as exemplified by the home video above. Fortunately, stabilization algorithms are getting very good; look at this experimental result. We'll survey the state-of-the-art in this evolving area. One of the leading researchers in the new field of computational photography is Fredo Durand of MIT. Fredo is on sabbatical at Stanford and has agreed to co-teach this course and advise student projects. You'll be seeing a lot of Fredo this quarter.

Winter, 2010
3-4 (same workload) (+/NC or letter grade)
Tue/Thu 2:15 - 3:30
392 Gates Hall (graphics lab conference room)
Course URL
Marc Levoy, Fredo Durand, Jongmin Baek (teaching assistant)
Office hours
Marc Levoy: Tue/Thu, 4:15 - 5:30 (Gates 366)
Fredo Durand: by appointment (Gates 362)
Jongmin Baek: Fri 10:00 - 11:45 / Thu 3:45 - 5:30 (Gates 360)
An introductory course in graphics or vision, or CS 178, good programming skills

Course material

Course abstract

Computational photography refers broadly to sensing strategies and algorithmic techniques that enhance or extend the capabilities of digital photography. The output of these techniques is an ordinary photograph, but one that could not have been taken by a traditional camera. Representative techniques include high dynamic range imaging, flash-noflash imaging, coded aperture and coded exposure imaging, photography under structured illumination, multi-perspective and panoramic stitching, digital photomontage, all-focus imaging, and light field imaging.

Stanford has offered a course on computational photography in even-numbered years since 2004. In the past we've organized the course around whatever techniques were "hot" that year in the research literature. At this stage (2009-2010), the field has matured enough that we can step back and ask the question - what can computational photography do for everyday photographers? To answer this question, we'll spend a few weeks reviewing the pre-capture technologies and post-processing algorithms used in a modern digital camera, then we'll consider some of the problems that arise in real photography, such as extending dynamic range and depth of field, removing camera shake and motion blur, and improving the illumination. For each problem we'll analyze its characteristics, then consider hardware and software solutions people have proposed for them - sometimes by reading research papers together. See the course schedule for details.

Course requirements

The course is targeted to both CS and EE students, reflecting our conviction that successful researchers in this area must understand both the algorithms and the underlying technologies. Most classes will consist of a lecture by one of the instructors. These lectures may be accompanied by readings from the research literature. These readings will be handed out in class or placed on the course web site. Students are expected to:

  1. read the assigned papers, attend the lectures, and participate in class discussions and the scheduled debate (20% of grade),
  2. complete the "Hello camera" assignment (10% of grade),
  3. do a major project of their own design (70% of grade).
The course schedule shows the days set aside for student presentations of papers and for a lively debate. The schedule also shows dates for project milestones and the "Hello camera" assignment. Since the project will constitute the bulk of your work in the course, we've spaced these dates out to cover most of the quarter.

We are encouraging but not requiring students to implement their course project on a programmable camera of some species. For this purpose we have a menagerie of cameras we can loan out, including the Frankencamera (pictured above). In addition, as part of a research collaboration between Nokia and Stanford (called Camera 2.0), Nokia has agreed to loan every student in the course an N900 (also pictured above), which is not yet widely available in the United States. The student or team who turns in the best project implemented on an N900 will be allowed to keep their phone(s).

© 2010 Marc Levoy and Fredo Durand
Last update: March 3, 2010 08:33:10 PM