CS 766 Computer Vision (Spring 2026)

MW 9:30 am - 10:45 am, online (Canvas)

Instructor: Mohit Gupta (mohitg@cs.wisc.edu) Office Hours: Wed 11 am - 12 pm on Zoom
TA: Sungjin Cheong (sungjin.cheong@cs.wisc.edu) Office Hours: Tue 10 am - 11 am / Fri 12 pm - 1pm in Person (Morgridge 6558 in person)
Discussion group: Piazza. Please post all your questions on the discussion board so that others may learn from your questions as well. Do not email the professor or TA directly with homework questions.

Image courtesy James Hays' Vision Course Website

Course description: The goal of computer vision is to compute properties of the three-dimensional world from digital images. Problems in this field include reconstructing the 3D shape of an environment, determining how things are moving, and recognizing people and objects and their activities, all through analysis of images and videos.

This course will provide an introduction to computer vision, including such topics as image formation, feature detection, motion estimation, image mosaics, 3D shape reconstruction, and object recognition. Applications of these techniques include building 3D maps, creating virtual characters, organizing photo and video databases, human-computer interaction, video surveillance, and automatic vehicle navigation. This is a project-based course, in which you will implement several computer vision algorithms and do a final project on a research topic of your choice.


Prerequisites

This course will assume a reasonable knowledge of linear algebra and calculus as a prerequisite. The programming assignments will be in Python, so a familiarity with Python is essential.

Please speak to the instructor if you are unsure of whether you can take the course.

Tentative syllabus and schedule

Class Date Topic Homeworks and project
W, Jan 21 Introduction and Fun with Optical Illusions HW1 out
M, Jan 26 Image Formation
W, Jan 28 Image Sensing
M, Feb 2 Binary Images and Processing
W, Feb 4 Image Processing 1: Basic Image Filtering HW1 due, HW2 out
M, Feb 9 Image Processing 2: Fourier-Domain Image Filtering
W, Feb 11 Edge Detection
M, Feb 16 Boundary Detection
W, Feb 18 2D Object Recognition using SIFT HW2 due, HW3 out
M, Feb 23 Image Alignment Project proposal due
W, Feb 25 Making Panoramas
M, Mar 2 Face Detection
W, Mar 4 Image Segmentation HW3 due, HW4 out
M, Mar 9 Introduction to Neural Networks and Convolutional Neural Networks
W, Mar 11 Radiometry and Surface Appearance
M, Mar 16 3D Shape from Photometric Stereo
W, Mar 18 Shape from Focus/Defocus HW4 due, HW5 out
M, Mar 23 Camera Calibration and Shape from Stereo
W, Mar 25 Internet-Scale 3D Reconstruction Project mid-term report due
M, Mar 30 no class (spring recess)
W, Apr 1 no class (spring recess)
M, Apr 6 Modern 3D Cameras: Structured Light and Time-of-Flight HW5 due, HW6 out
W, Apr 8 Optical Flow and Motion Measurement
M, Apr 13 Image Tracking
W, Apr 15 Advanced Topics: Computational Cameras
M, Apr 20 Project presentations HW6 due, HW7 out
W, Apr 22 Project presentations
M, Apr 27 Project presentations
W, Apr 29 Project presentations
W, May 6 no class HW7 due, Webpage due

Coursework and grading

Grading will be based on a 100 point system. There are two main components: (a) homeworks (60% grade), and (b) final research project (40% grade). Details about these components are given below.

In addition to the homeworks, we will also put up some quizzes on Canvas. However, they are optional, and will not contribute to your grade. They are only to help you check your understanding of the course material.

Home-work assignments

The course will consist of 7 homework assignments. They will together account for 60% of your final grade. Some homeworks are lighter than others; their relative weights in your final homework grade are determined by the total number of points listed at the top of each homework. Guidelines for completing homework assignments are provided at the bottom of this page under the Programming Assignment Guidelines section. Please read them carefully.

A discussion for each homework assignment will be created on Piazza. Please post all of your questions on the discussion board so that others may learn from your questions as well. Do not email the professor or TA directly with homework questions.

Include all the files in a zip file named hwX_yourNetID.zip (where X is the homework number) and upload the zip file to Canvas. All homeworks are to be submitted by midnight on the due date.

Late days

Only for the homeworks (not project), students will be allowed a total of 5 (five) late days over the semester; each additional late day will incur a 20% penalty.

Final Research Project

The final project is research-oriented. It can be a pure vision project or an application of vision technique in the student's own research area. You are expected to implement one (or more) related research papers, or think of some interesting novel ideas and implement them using the techniques discussed in class. Students are encouraged to propose their own project topics, subject to the instructor's approval. Some example projects from previous years' offerings of the course are at this page.

You should work on the project in groups of 2-3. In your submission, please clearly identify the contribution of all group members. Please note that members in the same group will not necessarily get the same grade.

NOTE: You can use any programming language you like for your projects.

Project timeline and what to submit

There will be three checkpoints: a project proposal, an intermediate milestone report, and a final project webpage. Create a webpage for the project at the beginning. This page will include the proposal, the mid-term report, interesting implementation details, some results (e.g., images, videos, etc.), and so on. Your website should also include downloadable source and executable code. Do not modify the website after the due date of the assignment. Upload the URL of your webpage in the corresponding Canvas assignment BEFORE the due date.

  1. Proposal (5%, due February 23)

    This will be a short report (usually one or two pages will be enough). You will explain what problem you are trying to solve, why you want to solve it, and what are the possible steps to the solution. Please include a time table.

  2. Mid-term report (5%, due March 25)

    In this report, you will need to give a brief summary of current progress, including your current results, the difficulties that arise during the implementation, and how your proposal may have changed in light of current progress.

  3. Final presentation (15%, from April 20 through April 29)

    This will be a short presentation in class about your project. It will be 5 minutes per team. Please add a link to the presentation on the project webpage.

  4. Webpage (15%, due May 6)

    Assemble all the materials you have finished for your project in a webpage or wiki, including the motivation, the approach, your implementation, the results, and discussion of problems encountered. If you have comparison results or some interesting findings, put them on the webpage and discuss these as well.

Readings

The material covered in the course will be available in the presentation slides which will be fairly self-contained. The slides will be made available via Canvas.

Optional text-book readings include Computer Vision: Algorithms and Applications, by Richard Szeliski. An online version is available, or you may purchase the book at a variety of locations. Also see Robot Vision by Berthold KP Horn and Optics by E. Hecht.

Acknowledgments

The materials from this class rely significantly on slides prepared by other instructors, especially Shree Nayar, Oliver Cossairt, Peter Belhumeur and Alyosha Efros. Also see other similar courses by Fredo Durand and Bill Freeman (MIT), Peter Belhumeur (Columbia), Irfan Essa (Georgia Tech.), Steve Seitz (U. Washington) and Kyros Kutulakos (U. Toronto). The instructor is extremely thankful to the researchers for making their notes available online.

Academic Integrity

This course follows the University of Wisconsin-Madison Code of Academic Integrity. Unless specifically authorized by the instructor, all coursework is to be done by the student working alone. Violations of the rules will not be tolerated.

Programming Assignment Guidelines

This document aims to clarify important issues relevant to programming assignments for the course. Following the guidelines explained here will greatly simplify submission, testing, and grading of your work.

Submission

The homework should be submitted on Canvas. The submission should contain:

Include all the files in a zip file named hwX_yourNetID.zip (where X is the homework number), and upload to Canvas. This zip file should have a single directory named hwX_yourNetID, which contains all the files listed above.

An easy way to get the directory structure right is by doing the following steps:

  1. download the file Python.zip from Canvas,
  2. unzip it to get a folder also named Python,
  3. rename the folder Python to hwX_yourNetID,
  4. do the homework in this new directory hwX_yourNetID, keeping in mind the other guidelines listed below,
  5. and finally, zip the folder hwX_yourNetID, creating the file hwX_yourNetID.zip.

More notes/guidelines

The runHwX.py file serves as a framework for the homework and guides you through the individual programming milestones. In this file you will need to enter your name, your NetID, and possibly to complete some skeleton code or to fill in certain parameters. It also interfaces with all the functions you need to implement and will help you run and test your solution. As such, we cannot allow you to change the signature of any function required to be implemented in the HW.

runHwX.py contains a set of sub-functions prefixed with the string walkthrough or challenge, which are test cases for walkthroughs and challenges. To execute a test, run the runHwX.py script with a command line parameter containing the name of the test to run, e.g. python runHwX.py test_name_string at the shell command prompt (or, for example, in a launch.json if using VSCode. Similar configuration in other Python IDEs). To execute the entire set of tests, use python runHwX.py all at the command prompt.

We would also like you to keep the following in mind when writing your code or preparing your submission:

Using Python packages

The Python ecosystem provides a large collection of image processing and computer vision packages. In this course, the primary goal is for you to understand and implement fundamental algorithms from scratch. Therefore, the restriction is not about banning specific libraries entirely, but about avoiding functions that directly give you the solution without requiring you to think through the algorithm.

Allowed packages:

Disallowed usage: You should not use “shortcut” functions that already implement the algorithm you are asked to code. For example:

This does not mean that OpenCV, PIL, or scikit-image are entirely forbidden, but their use is limited: you may only use functions explicitly permitted in the assignment or scaffolding code. In other cases, stick to the allowed packages listed above.

The guiding principle: If a function automatically accomplishes the main task of the assignment, you should not use it. There are too many packages in the Python ecosystem to list them all, so if you are unsure about a particular function, please ask on Piazza or at Office Hours. Using disallowed functions without clarification will result in zero credit. Remember: When in doubt, please ASK!