Course Syllabus


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.

You'll learn how a camera's optics form images on a sensor, how to represent images digitally on a computer, how humans perceive colors, how cameras capture color, and how we can represent color mathematically. You will build a simple camera from scratch and implement various image processing algorithms for photography, including high-dynamic-range photography and tone mapping, image morphing, and advanced image editing algorithms. This is not a photography class or a class on Photoshop/Lightroom. However, you will learn the math and algorithms behind popular image manipulation and processing tools 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 will include reading, presenting and discussing recent research papers. Each student will also work on a final project. By the end of the course, you should have an understanding of the capabilities and limitations of photography today, and have sufficient background to implement new solutions to photography challenges.

Course staff

Instructor: Wojciech Jarosz
TA: Zack Misso


TuTh, 10:10–12:00 pm
Location: Kemeny 007


W, 3:30–4:20 pm
Location: Kemeny 007

Office Hours

M/Tu 4–4:50pm, 156 Sudikoff


M 2–3:30 pm, Sudikoff 154
Th 1–2:30 pm, Sudikoff 154


Successful completion of COSC 10 is required. We will be using C++ for the programming assignments. You should either already be familiar with C++, or be able to pick it up quickly from knowledge of related languages. COSC 50 is recommended, but not required. If you've taken COSC 77, some concepts will be a bit more familiar (including C++ programming), but it also is not required.


Some assignments will require taking a few photos. You 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.

Email policy & Piazza

We will be using Piazza instead of email for most class communication. This way your questions may be answered more quickly, and all students will benefit from the answer simultaneously.

To set up Piazza, first select “Computational Aspects of Digital Photography (WI18)” from the “Courses” dropdown. Then, click on “Piazza” on the left side and register using your full email address and a unique password (don’t re-use your Dartmouth NetID password!).

If you have registered with Canvas using your full address before, then your account should already be properly set up. If you registered using a different email, you’ll need to add your 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. 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.

Coursework & Grading

The tentative grading scheme will be:

  • 60%: Weekly assignments
  • 20%: Class engagement (attendance, paper reading, discussion, and presentation)
  • 20%: Final project
Disclaimer: The grade breakdown is subject to 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, but these will not have slide notes, so you may find it useful to keep notes during class anyway.

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. Each student will present one paper in class and/or 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 to kick-start and facilitate a class 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 weekly assignments, so you may need to manage your time more carefully on weeks where you are a presenter or discussant.

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). Attendance at (the entirety of) our scheduled final exam period is mandatory. The final project can be similar in style to the weekly programming assignments, but should be roughly 2-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

Grads and undergrads enrolled in the class will be graded separately and we will generally grade grads more strictly. Additionally, the programming assignments will typically include extra portions that will be required for students enrolled in the graduate version and may count as extra credit for those enrolled as undergrads. We will grade these separately and grant extra credit only if the foundation of the original assignment has been completed correctly (e.g., at least 90% of the original requirements/grade are met).

Extra credit will not affect the grading curve. At the end of the course, extra credit will not be added directly to your score. Instead, we will consider your extra credit to potentially round your grade more favorably when discretizing to letter grades.

Late Submissions

Each 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 (e.g. >1 week, not a couple days) 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 & 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 clearly visible 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 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.

Accessibility Needs & Religious Observances

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. If you require disability-related academic adjustments and services you must consult the Student Accessibility Services office (205 Collis Student Center, 646-9900, Once SAS has authorized services, you should show the originally signed SAS Services and Consent Form and/or a letter on SAS letterhead to me. As a first step, if you have questions about whether you qualify to receive academic adjustments and services, you should contact the SAS office. All inquiries and discussions will remain confidential.

Some students may wish to take part in religious observances that occur during this academic term. If you have a religious observance that conflicts with your participation in the course, please meet with me before the end of the second week of the term to discuss appropriate accommodations.


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.

Course Summary:

Date Details Due