Computational photography lies at the intersection of photography, computer vision, image processing, and computer graphics. At it’s essence, it is about leveraging the power of digital computation to overcome limitations of traditional photography. In this course, we will study the increasing computational aspects of digital photography, with an emphasis on software techniques.

We’ll cover topics like image formation and digital representation, the optics of cameras and sensors, image processing algorithms for photography, high-dynamic-range photography and tone mapping, human visual perception and color, image morphing, and advanced image editing algorithms. As part of the class, students will learn the math and algorithms behind popular image manipulation and processing software like Adobe Photoshop and Lightroom. Course work will include taking some photos and implementing several algorithms to manipulate those photos in weekly programming assignments (using C++). The second half of the quarter may include reading, presenting and discussing recent research papers. Each student will also work on a final project. By the end of the course, students should have an understanding of the capabilities and limitations of photography today, and have sufficient background to implement new solutions to photography challenges.


Successful completion of COSC 10 is required. COSC 77 and COSC 50 are highly recommended. For the programming assignments, students should already have familiarity with C++, or be able to pick it up quickly from knowledge of related languages.


The assignments will require taking some photos. Students will need access to a camera with manual exposure control. If you have a dSLR, great, but there is no need for anything fancy—any digital camera with manual controls should work, including most recent smartphones with an appropriate camera app.

There is no required textbook. Lecture material will be posted after class.


Course Staff
Prof. Wojciech Jarosz
Office hours
Wednesdays 5:00pm-5:50pm & Fridays 3:00pm-3:50pm, Sudikoff 154/155 New office!
Rawan Al Ghofaili
Office hours
Mondays 10:00am-11:00am & Tuesdays 10:00am-11:00am, Sudikoff 212
Lectures & Lab
Tuesday/Thursday 2:00pm–3:50pm, Moore Hall Room 110 New room!
Wednesday 4:15pm–5:05pm, Moore Hall Room 110 New room!
Computer lab
You are welcome to use the Linux servers or the Mac computer labs in Sudikoff 003 & 005 to work on your programming assignments. Contact the course staff within the first week to obtain an account.

Piazza & Canvas

We will be using Canvas for lab assignments and grades and Piazza for class discussion.

To set up Piazza, first log on to Canvas. This should take you to the Canvas page for this class, but if not, select “Computational Photography (GFA15)” from the “Courses” dropdown. Then, click on “Piazza” on the left side and register using your full @dartmouth.edu email address and a unique password (don’t re-use your Dartmouth NetID password!).

If you have registered with Canvas using your full @dartmouth.edu address before, then your account should already be properly set up. If you registered using a different email, you’ll need to add your @dartmouth.edu address to your Piazza account settings for it to link properly with Canvas.

E-mail the course staff for Piazza access if you are auditing or yet to register.

Piazza is the place for you to ask questions and get help. Unless your question reveals part of the solution to a homework problem, please post it to Piazza. This allows your classmates to benefit from seeing the question and subsequent instructor response. We encourage you to contribute answers to other people’s threads, or initiate open-ended discussions on topics relevant to the class.

Note that activity on Piazza will count towards your participation grade. Anonymous (to other students) posting is enabled.

Coursework & Grading

The tentative grading scheme will be:

  • 60%: Weekly assignments
  • 15%: Paper reading, discussion, and presentation
  • 25%: Final project
Disclaimer: Since this is a new course, the grade breakdown, topics, and structure of course work is subject to slight adjustments.
Lecture & Weekly Assignments

For the majority of the quarter, coursework will consist of lectures and pre-defined weekly assignments (mostly taking a photo or two and programming in C++, though we may include a "hardware" exercise or hand-written assignment as well). I will try to post slides online after lecture. The weekly assignments will be available on this course website, but we'll provide basecode and handle turnin through Canvas. Check the weekly schedule.

Paper Reading, Discussion, and Presentation

To supplement lecture material, we will be reading research papers from the recent computational photography literature and presenting and discussing them in class. For some of these papers, I will be presenting the material in lecture. Each student will also present one paper in class, and be assigned as a discussant for one paper. The role of the presenter is to summarize the contributions and method proposed in the paper to the class, and the role of the discussant is to have some questions ready and to facilitate discussion. Everyone is expected to read the papers prior to lecture—not just the presenter and discussant—so we can have an engaging conversation. These presentations will be interspersed with the standard lecture and weekly assignments, so you may need to manage your time more carefully on weeks where you are a presenter.

Final Project

Each student will also work on a final project related to computational photography and will present it to the class during the final exam period (in lieu of a final exam). The final project can be similar in style to the weekly programming assignments, but should be roughly 3× larger in scope. We will provide some ideas for possible projects, but encourage you to come up with your own. You'll need to submit a short proposal roughly halfway through the quarter.

Graduate & Extra Credit

In general, the coursework will be largely the same between grad and undergrads, but I will grade graduate work more strictly. Sometimes the programming assignments will include extra portions that will be required for students enrolled in the graduate version (CS 189), and count as extra credit for those enrolled as undergrads (CS 89). We will grade these separately and grant extra credit only if the foundation of the original assignment has been completed correctly (i.e., at least 90% of the original requirements/grade are met). Extra credit will not affect the grading curve and will not exceed 20% of the overall grade.

Late Submissions & Regrading

Each programming assignment will be submitted through Canvas, and will have a strict deadline. The assignments will build off of each other, and sometimes the basecode for the next assignment will include solutions to portions of the previous assignment. Due in part to this, we will not accept late submissions for programming assignments (e.g. an assignment handed in just 5 minutes late will get 0 credit). Exception to this rule might be made for special cases only if the professor is informed well before the deadline, or in the case of a medical emergency, and at the professor’s sole discretion.

It’s up to you to check that assignments have been successfully submitted to Canvas; if there are any problems, you must notify course staff by email immediately (not weeks later, claiming “Canvas ate it”).

Assignment regrading requests must be submitted via email to the course staff within one week of the original grade posting.

Working Together and Academic Integrity

In short: You are welcome and encouraged to chat about assignments with other students in general terms, but code must be written on your own.

I assume the work you hand in is your own, and the results you hand in are generated by your program. You’re welcome to read whatever you want to learn what you need to complete the work, but I do expect you to build your own implementations of the methods we are studying.

If you’re ever in doubt, just include a citation in your code and report indicating where some idea came from, whether it be a classmate, a website, another piece of software, or anything—this always maintains your honesty, whether the source was used in a good way or not. The same basic principle applies to your presentations. Any material you reuse from outside sources must be properly attributed.

The example scenarios below (adapted from Tom Cormen's discussion of the honor principle) should give you a more concrete idea of what is and is not acceptable.

Shared/Public Computers

If you are working on a public lab machine, or any other computer that someone else in the course might use, be sure to remove your code from the computer when you are all done. If you leave your code on a computer, and someone else can see it, then they can copy it and hand it in. It’s often difficult to tell who was the copy-ee and who was the copy-er. Avoid this situation.

Special Accommodations

Please let me know before the end of the second week of the term if you have any disabilities and would like me to make appropriate accommodations. All discussions will remain confidential, although the Student Accessibility Services office may be consulted to discuss appropriate implementation of any accommodation requested.


The materials from this class borrow heavily from slides and assignments prepared by other instructors. In particular, many materials are modified from those of Frédo Durand, Steve Marschner, Matthias Zwicker, Alexei A. Efros, Marc Levoy, and others, as noted in the slides and assignments. If you reuse this material for academic or research purposes, please maintain all acknowledgments.