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.
We will be using Canvas for lab assignments and grades and Piazza for class discussion.
Note! The first time you access Piazza MUST BE VIA CANVAS to ensure that the two are properly connected. After that you can access Piazza directly via a Browser or the iOS and Android apps.
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.
Note! If your question reveals part of a solution, do not post it publicly! Mark the question as private in Piazza and send it to the course staff.
The tentative grading scheme will be:
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.
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.
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.
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.
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.
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.
Undeclared copying of code or images (either from other students or from external sources) is strictly prohibited! I take this very seriously! If you violate this rule, you not only risk a failing grade on the assignment or entire course, I’m required to report the case to the Dartmouth Office of Judicial Affairs, resulting in a lot of wasted time, a COS hearing, and possible suspension or even explusion from the College. Don’t do it. We know how to use Google and will use automated tools to check for similarity in solutions between students (past or present) and to other sources available online. The goal of the class is to learn and have fun. Let’s keep it that way.
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.
Example 1: Two students, Alice and Ralph, discuss an assignment and design their code together. That is fine. But then they decide that since their programs would be so similar, they might as well have Alice type in the code, have Ralph make his own copy of the file containing the code, and then have Ralph make his own minor changes. This is a violation of the Academic Honor Principle. Although you may discuss and design with others, the code you hand in must be entirely your own.
Example 2: Tina and Eric start working independently on a program. Tina finishes and has a working version. Eric has trouble with his. Tina helps Eric debug. That is fine. But then Tina realizes that Eric has a section of code that is all wrong and the program she wrote has just the right code for that section. She shows Eric her program. Or worse, she gives Eric an electronic copy of her program so that he can just paste in the correct code. Either action is a violation of the Academic Honor Principle.
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.
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.