Previous Versions of the course:
Summer 2021 (Schiffers)
Fall 2020 (Cossairt & Willomitzer)
Fall 2019 (Cossairt)
Top | Calendar | Homework | Links | Slides | Readings | Credits |
The Lytro Camera captures a 4D light field of a scene, enabling photographs to be digitally refocused after images are captured. Image source: [I1] | High Dynamic Range (HDR) Photography can be done using a smartphone camera. Multiple images at different exposures are combined to get an enhanced final image. Image source: [I2] | Computational illumination is used within the movie industry to render the performances of live actors into digital environments. Image source: [I3] |
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 70 students.
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).
Monday & Wednesday, 12:30 - 1:50 pm.
The first two weeks (01/03 - 01/16) of classes will be online, via zoom.
The rest of the quarter will be in person at Tech L361.
Prof. Florian Willomitzer - email : florian.willomitzer@northwestern.edu
Aniket Dashpute - email : aniket.d@u.northwestern.edu
Jiazhang Wang - email : jiazhang.wang@u.northwestern.edu
Office hours will mainly happen via increased activity on Campuswire (the required sign-up code can be found on CANVAS) from our side. For coding questions, please start a thread on Campuswire or browse the existing threads of previous courses (they might include the answer to your question). Please see the point “How to write good questions on Campuswire” below for more info. For coding questions that only involve your own code, please make a private thread that is only visibile to TA/Instructor.
Grading: Homeworks 0 through 6 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 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. We plan to stick closely to these grading guidelines, but partial credit (A-/B+, etc.) might be given if the student has shown increased activity on Campuswire and has actively contributed to the lectures via questions and discussions.
When and Where to Submit Assignments: A writeup report for each assignment must be submitted on Canvas by 11:59pm on the due date. Your code must be pushed to your individual GitHub Classroom code repository, also at 11:59pm on the due date.
Late Policy: If EITHER there is nothing on Canvas OR your code has not been pushed to by 11:59pm on the due date, you fail the assignment. The most recent code on github at 11:59pm on the due date is the code we will grade. The most recent submission in Canvas at that point, is the one we grade. A good approach is to continually check in and push to GitHub as you work. Also, put up a “safety” submission on Canvas with what you currently have, an hour prior to the deadline. You can resubmit up to three homework assignments that you received a failing grade for.
Cheating & Academic Dishonesty: Do your own work. This includes free response answers and code. Penalties include failing the class and can be more severe than that. If you have a question about whether something may be considered cheating, ask, prior to submitting your work. We will be checking for code duplication. Academic dishonesty will be dealt with as laid out in the student handbook.
Announcements and discussions will take place on CampusWire. The sign-up code can be found on CANVAS (syllabus section).
Read more about course policies and statements here.
This is a prediction of what will be covered in each week but the schedule is subject to change as the course progresses
Week of | Lecture of week | Topic |
---|---|---|
01/03 | Mon | No lecture - Set up Programming Environment (HW0) |
01/05 | Wed | Introduction |
01/10 | Mon | Image Formation |
01/12 | Wed | Spatial domain image processing |
01/17 | Mon | No lecture - MLK Day |
01/19 | Wed | Fourier domain image processing |
01/24 | Mon | Image Sensing |
01/26 | Wed | Edges and Illumination |
01/31 | Mon | Image Segmentation |
02/02 | Wed | Radiometry |
02/07 | Mon | HDR Imaging |
02/09 | Wed | Photometric Stereo |
02/14 | Mon | Depth from Focus |
02/16 | Wed | Camera Calibration |
02/21 | Mon | Structured Light 3D Imaging |
02/23 | Wed | SIFT |
02/28 | Mon | Light Fields and 3D Displays |
03/02 | Wed | Time-of-Flight and Non-Line-of-Sight imaging |
03/07 | Mon | Light Transport |
03/09 | Wed | Optical Flow |
See CANVAS assignments for the link to create your own GitHub repository for each assignment.
Homeworks need to be submitted as a PDF created using Overleaf or World template we provide to you.
CS331 homework template on Overleaf can be found here: https://www.overleaf.com/read/ybgqzfrjkzns
How to copy a project to your own account: https://www.overleaf.com/learn/how-to/Copying_a_project#Making_a_copy_of_a_project
For MS Word, download this template file (.docx) and make your own file (.doc) for each assignment using this template.
Homeworks are due and assigned on the dates below.
Topic | Date assinged | Date due |
---|---|---|
HW 0: Install Environment | 01/03 | 01/10 |
HW 1: Spatial Domain Image Processing | 01/06 | 01/17 |
HW 2: Sensor Noise | 01/17 | 01/27 |
HW 3: Flash/No Flash Photography | 01/27 | 02/07 |
HW 4: HDR Imaging | 02/07 | 02/17 |
HW 5: Depth from Defocus | 02/17 | 02/28 |
HW 6: Lightfields | 02/28 | 03/10 |
We are not here to debug your code line-by-line. We understand that many of you will be/are experiencing coding issues and we want to provide you with the support you need. In order to do this, we want to facilitate the process of posting questions and us (or you) answering questions.
We’d like you to write debugging/coding-related questions in a specific manner. Please find below a guideline on how to ask good questions on campuswire. If you follow those guidelines, the chances of you receiving a quick and helpful answer will increase a lot. Also, please be aware that we will remind you to reformulate your questions according to the guidelines below and we will refuse to answer questions with too little information content.
Title - Write a title that summarizes the specific problem
The title is the first thing potential answerers will see, and if your title isn’t interesting, they won’t read the rest. So make it count!
** Include Pictures **Include the example picture that we provide in the “example folder” and include a picture how your implementation looks like. This really facilitates debugging on our side!
Examples for good titles:
Bad: I don't understand confusing math in numpy
Good: Numpy - Why does using float instead of int give me different results when all of my inputs are integers?
Bad: Python if else problems
Good: Syntax - Why does str == "value" evaluate to false when str is set to "value"?
Question - Ask about specific problems with your existing implementation, not just something like “I don’t know why it doesn’t work.”
Code - DO NOT INCLUDE pictures of your code, please use CampusWire’s formatting tools to type in code (3 backticks ``` followed by code and then 3 more backticks ). Please tell us which function in the code you’re trying to solve and copy the doc string so that it is easy for us to follow without revisting the code. Don’t make your code snippets too short (but also not too long)
e.g.
import numpy as np
a = 2
b.= 2
c = a + b
print c
Error message/assertion or Code doesn’t work
Post the question and respond to feedback
After you post, leave the question open in your browser for a bit, and see if anyone comments. If you missed an obvious piece of information, be ready to respond by editing your question to include it. If someone posts an answer, be ready to try it out and provide feedback!
In the unlikely case (remember: Campuswire first. E-mails without a Campuswire thread link will be ignored) that you need to write an e-mail to the Instructor/Teaching Assistant, please follow this guideline for homework related questions:
CS331 - HW X - “Problem description in 2-3 keywords”
In any case, please always include CS331 in your header for organizational issues.
Similar Courses in Other Universities
Conferences: ICCP, SIGGRAPH, SIGGRAPH Asia, CVPR, ICCV, ECCV, ..
A list with extra reading material which will be developed throughout the quarter can be found here: https://github.com/NUCS331/Material
Many of the course materials are modified from the excellent class notes of similar courses offered in other schools by Shree Nayar, Marc Levoy, Jinwei Gu, Fredo Durand, and others. The instructor is extremely thankful to the researchers for making their notes available online.
Read more about course and institutional policies here.
Top | Calendar | Links | Slides | Readings |