NUCS331.github.io

CS331: Introduction to Computational Photography @ Northwestern

Winter 2022, Prof. Florian Willomitzer

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]

Course Description

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

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).

Time & Place

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.

Instructors

Prof. Florian Willomitzer - email : florian.willomitzer@northwestern.edu

Teaching assistants

Aniket Dashpute - email : aniket.d@u.northwestern.edu

Jiazhang Wang - email : jiazhang.wang@u.northwestern.edu

Office Hours

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.

Policies

Lecture Calendar

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

Homework Calendar

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

How to write good questions on Campuswire?

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

  1. What is the exact error that you’re receiving?
  2. What is making it difficult for you to understand this error message?
  3. What don’t you understand? Where are you struggling?
  4. What have you done exactly?
  5. Did you go over the algorithm again and are you sure you have no doubts about the theory?
  6. Can you include a minimal working example that we can try?
  7. Did you Google the error? Please post a link to something you tried and read up on what it means in Python/NumPy.

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!

How to write an e-mail to instructor/TA

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:

  1. Descriptive Subject/Header Template in E-mail like:

CS331 - HW X - “Problem description in 2-3 keywords”

  1. First line of the e-mail should contain the link to your GitHub repository of the corresponding homework

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, ..

Materials provided by us

A list with extra reading material which will be developed throughout the quarter can be found here: https://github.com/NUCS331/Material

Credits

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.

Statements

Read more about course and institutional policies here.

Top Calendar Links Slides Readings